使用Click-Once部署防止发布配置文件

时间:2016-12-08 05:15:05

标签: c# clickonce

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

1 个答案:

答案 0 :(得分:0)

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

如果我正确理解了问题,那么你想要使用一些设置,当Addin在生产环境中时说HOSTURL=http://example.com,在开发Addin时说HOSTURL=http://localhost并且你希望这一切都是自动的没有人为参与。

然后,您可以尝试其中一种:

[1]尝试查找ClickOnceLocation并根据值ClickOnceLocation使用设置。 在开发/调试Addin时假设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

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

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

要将两个不同的app.config文件添加到项目中,您可以更新项目文件中对app.config的引用。 app.config在项目文件(vbproj或csproj)中使用以下xml定义:

<ItemGroup>

…

<None Include=”app.config” />

</ItemGroup>

ItemGroup中可能还有其他节点以及app.config节点。从此ItemGroup节点中删除just app.config,并在具有以下xml的节点下创建一个新的ItemGroup:

<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文件,并且当活动时使用存储在项目的“已发布”子文件夹中的实际生产变量的已修改app.config配置设置为“发布”。

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

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

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

相关问题