我仍然试图了解MSBuild的事情。 目前,我正在摆弄使用PackageWeb-Nuget-Package(video demo)生成的脚本部署via powershell脚本。我已经尝试了几天了,它似乎工作。但是“突然”生成的web.config中的连接字符串被标记化,而不是我所看到的连接字符串
connectionString="$(ReplacableToken_DefaultConnection-Web.config Connection String_0)
我“突然”写道,因为我无法将这个(对我来说是新的)行为与我前几个小时所做的任何事情联系起来。
总而言之:从包的部署工作正常,也正在应用正确的配置转换,但我最终得到了这个标记化的连接字符串。
我意识到如果我插入
,我可以解决这个问题<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>
进入PropertyGroup(我只是将它放入Nuget-Package创建的生成的目标文件中)
但是我真的不喜欢这个,不得不将这个附加值插入到可能需要它的每个项目中;特别是因为我不知道我首先需要这个调整。昨天它工作,我没有将这个额外的行插入任何项目或目标文件。
所以我希望也许有人知道额外的开关,技巧或设置,这可能会对它的工作方式产生额外的影响。
答案 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>
希望能帮助别人!
克里斯