【问题标题】:Prevent Config File From Publishing With Click-Once Deployment使用 Click-Once 部署防止发布配置文件
【发布时间】:2016-12-08 14:33:13
【问题描述】:

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

【问题讨论】:

  • 我不是作者,也不是该项目的任何从属关系,但有一个 Visual Studio 插件(像啤酒一样免费),它应用 app.config 转换,就像内置的 web.config 转换发动机工作。它被称为 SlowCheetah,它允许您根据构建配置文件进行不同的配置设置。 marketplace.visualstudio.com/… 意思是,例如,当您进行发布部署时,您可以发布一个虚拟配置文件。

标签: c# clickonce


【解决方案1】:

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

如果我正确理解了这个问题,那么你想使用一些设置,比如当 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 发布应用程序,而无需执行更新和重新签名过程。

【讨论】:

  • 非常感谢所有回答者,我会研究这些东西并相应地标记它们
猜你喜欢
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多