配置文件是部署的一部分,因为它们存储了在插件中使用的所有必要设置。
如果我正确理解了这个问题,那么你想使用一些设置,比如当 Addin 在生产环境中时说HOSTURL=http://example.com,当你正在开发 Addin 时说HOSTURL=http://localhost,你希望这一切都可以自动进行,无需人工参与。
然后,您可以尝试以下方法之一:
[1] 尝试查找ClickOnceLocation 并根据ClickOnceLocation 的值使用设置。
假设在您开发/调试插件时ClickOnceLocation 包含"Debug"。
//CodeBase is the location of the ClickOnce deployment files
Uri uriCodeBase = new Uri(assemblyInfo.CodeBase);
string ClickOnceLocation = Path.GetDirectoryName(uriCodeBase.LocalPath.ToString());
if(ClickOnceLocation.Contains("Debug"))
{
URL = "http://localhost";
}
else
{
URL = //from app.config
}
[2]Updating the app.config by using build configurations
您可以使用一些技巧,以便在发布期间获取具有生产服务器值的不同文件。
您可以拥有两个单独的配置文件,一个用于本地部署/调试,一个用于应用程序的实际发布或生产版本。调试配置文件可以指向本地主机服务器,而实际发布的配置文件可以指向真实服务器。然后,您可以配置构建配置,以便根据活动构建配置选择适当的配置文件。
要将两个不同的 app.config 文件添加到项目中,您可以在项目文件中更新对 app.config 的引用。 app.config 在项目文件(vbproj 或 csproj)中使用以下 xml 定义:
<ItemGroup>
…
<None Include=”app.config” />
</ItemGroup>
ItemGroup 中可能还有其他节点以及 app.config 节点。从此ItemGroup节点中删除刚才的app.config,并在该节点下新建一个ItemGroup,xml如下:
<ItemGroup Condition=” ‘$(Configuration)|$(Platform)’ == ‘Debug|AnyCPU’ “>
<None Include=”app.config” />
</ItemGroup>
<ItemGroup Condition=” ‘$(Configuration)|$(Platform)’ == ‘Release|AnyCPU’ “>
<None Include=”publishedapp.config” />
</ItemGroup>
这基本上意味着,当 Active 配置设置为 Debug 时,将使用常规 app.config 文件,而当 Active 配置设置为 Debug 时,将使用经过修改的 app.config 以及存储在项目“published”子文件夹中的真实生产变量配置设置为“发布”。
您可以更改 ItemGroup 条件以匹配您可能已定义的其他构建配置。一种可能性是根据“发布”配置定义单独的“发布”配置,但仅在您实际要发布应用程序时使用。
此过程的另一个免责声明是 VS 项目系统本身和设计者不知道附加的 app.config 文件; Visual Studio 只知道原始文件。修改后的带有生产环境值的 app.config 仅由 msbuild 进程使用。所以如果你通过设置设计器更新主app.config,修改后的app.config不会更新,你必须手动更新文件。
适当配置项目后,您只需在不同的构建配置之间切换即可更改配置文件并从 Visual Studio 发布应用程序,而无需执行更新和重新签名过程。