防止配置文件通过单击一次部署发布

Prevent Config File From Publishing With Click-Once Deployment

我正在尝试使用 Click-Once 发布,问题是,它还发布了配置文件,其中包含我在开发计算机上使用的连接字符串,而不是我在生产环境中使用的正确连接字符串。如何防止Config文件多次发布?我尝试在属性中不将其包含在发布列表中,但没有这样做的选项。

配置文件是部署的一部分,因为它们存储了在插件中使用的所有必要设置。

如果我理解正确的话,你想使用一些设置,当 Addin 在生产环境中时说 HOSTURL=http://example.com 和当你开发插件时说 HOSTURL=http://localhost 并且你期待所有这些无需人工干预即可自动完成。

那么,您可以尝试其中之一:

[1] 尝试找到 ClickOnceLocation 并根据 ClickOnceLocation 的值使用设置。 假设 ClickOnceLocation 包含 "Debug" 而你是 developing/debugging 插件。

//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

您可以使用一些技巧,以便在发布期间选择具有生产服务器值的不同文件。

您可以有两个单独的配置文件,一个用于本地 deployment/debugging,另一个用于应用程序的实际发布或生产版本。调试配置文件可以指向本地服务器,而真正发布的配置文件可以指向真实服务器。然后,您可以配置构建配置,以便根据活动构建配置选择适当的配置文件。

要将两个不同的 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>

这基本上意味着当活动配置设置为调试时将使用常规 app.config 文件,修改后的 app.config 具有存储在“已发布”子文件夹中的实际生产变量当活动配置设置为“发布”时使用项目。

您可以更改 ItemGroup 条件以匹配您可能已定义的其他构建配置。一种可能性是根据“发布”配置定义单独的“发布”配置,但仅在您实际要发布应用程序时使用。

此过程的另一个免责声明是 VS 项目系统本身和设计人员不知道额外的 app.config 文件; Visual Studio 只知道原始文件。具有生产环境值的修改后的 app.config 仅供 msbuild 进程使用。因此,如果您通过设置设计器更新主 app.config,修改后的 app.config 将不会更新,您必须手动更新文件。

一旦您正确配置了您的项目,您可以简单地在不同的构建配置之间切换以更改配置文件并从 Visual Studio 发布应用程序,而无需经历更新和重新签名过程。