“AutoParameterizationWebConfigConnectionStrings” - 选项是防止连接字符串标记化的唯一方法吗?

时间:2013-05-22 13:47:06

标签: msbuild msdeploy webdeploy msbuild-propertygroup

我仍然试图了解MSBuild的事情。 目前,我正在摆弄使用PackageWeb-Nuget-Packagevideo demo)生成的脚本部署via powershell脚本。我已经尝试了几天了,它似乎工作。但是“突然”生成的web.config中的连接字符串被标记化,而不是我所看到的连接字符串

connectionString="$(ReplacableToken_DefaultConnection-Web.config Connection String_0)

我“突然”写道,因为我无法将这个(对我来说是新的)行为与我前几个小时所做的任何事情联系起来。

总而言之:从包的部署工作正常,也正在应用正确的配置转换,但我最终得到了这个标记化的连接字符串。

我意识到如果我插入

,我可以解决这个问题
<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>

进入PropertyGroup(我只是将它放入Nuget-Package创建的生成的目标文件中)

但是我真的不喜欢这个,不得不将这个附加值插入到可能需要它的每个项目中;特别是因为我不知道我首先需要这个调整。昨天它工作,我没有将这个额外的行插入任何项目或目标文件。

所以我希望也许有人知道额外的开关,技巧或设置,这可能会对它的工作方式产生额外的影响。

3 个答案:

答案 0 :(得分:4)

Microsoft默认使用自动参数化。这包括het连接字符串。您可以通过将其添加到项目文件来禁用它。

<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>

要停用所有转换,您可以按照here所述添加此内容。

<TransformWebConfigEnabled>false</TransformWebConfigEnabled>

禁用部署包的所有参数: <DisableAllVSGeneratedMSDeployParameter>true</DisableAllVSGeneratedMSDeployParameter>

答案 1 :(得分:0)

我注意到像$这样的东西(ReplacableToken_似乎在发布时随机发生,并且能够通过在重建和重新发布之前进行清理来解决问题。 但是,除非您在发布后总是手动检查web.config,否则您无法真正知道,我还添加了

<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>

到相关的网络服务项目。

答案 2 :(得分:0)

现在我的公司一直在使用TFS的“发布管理器”工具,它只使用单一版本,我们不再使用web.config转换,而是使用MS WebDeploy的parameters.xml方法来交换不同的值环境。但是,我遇到了上面提到的'auto-gen'd'conn字符串的问题。下面是一个解决方法。

如果您在项目中使用parameters.xml文件,如果您为参数指定与连接字符串的auto-gen'd参数相同的名称,则它可以正常工作。

所以下面我有一个'DBConnectionNameHere'(在web.config中我的示例是connectionStrings'名称')然后我只是将“-Web.config Connection String”附加到名称中。现在,而不是在parameters.xml文件中覆盖我自己的auto-gen'd conn字符串,它将起作用,只需添加一个额外且无害的'parameterEntry'子标记。

例如:

<parameter name="DbConnectionNameHere-Web.config Connection String" defaultValue="#{TokenHereOrActualValue}#">

  <parameterEntry kind="XmlFile" scope="\\web.config$" 
match="/configuration/connectionStrings/add[@name='DbConnectionNameHere']/@connectionString" />

</parameter>

希望能帮助别人!

克里斯