MS Deploy能做一个软件包并进行转换,但不能部署吗?
在.NET 4.0中使用msbuild,我可以使用“Package”目标构建web项目,并且将该包放入一个zip文件中工作得很好。 但是,当我查看其中的web.config时,它没有转换,它具有“$(ReplacableToken_Web_SiteConnection-Web.config连接String_0)”
我可以运行“TransformWebConfig”目标,它会做适当的转换,但只是在自己的筒仓。
我还可以运行“构建”目标并传递“DeployOnBuild = True; DeployTarget = MSDeployPublish”属性,并且它将在我的服务器上部署该包并进行正确的web.config转换。
但是,如果我想手动将软件包部署到服务器,那么如何使用“TransformWebConfig”来执行“Package”,以便zip文件在那里有最终的web.config?
如果你想跳过这一切,那么你需要在你的构建中设置一个属性。 你可以用两种方法来做到这一点
我会推荐#2。 对于这种情况,在名称为{ProjectName} .wpp.targets的项目文件所在的目录中创建一个新文件,其中{ProjectName}是项目的名称。 然后在这个文件里面你应该放置下面的内容。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0">
<PropertyGroup>
<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>
</PropertyGroup>
</Project>
在这种情况下,您需要设置属性AutoParameterizationWebConfigConnectionStrings
,它告诉Web Publishing Pipeline不要在连接字符串的web.config中插入这些{}占位符。
我们这样做的方式是在打包之前修改项目构建以完成转换。
目标是调用TransformXml并且是Microsoft.Web.Publishing.Tasks.dll的一部分
在你自己的目标中
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)MicrosoftVisualStudiov10.0WebMicrosoft.Web.Publishing.Tasks.dll" />
但它将包含在默认的VS C#构建中。
所以
<TransformXml Source="web.config" Transform="web.release.config" Destination="$(DeployPath)web.config" />
对我们来说是诀窍吗?
使用正确的ItemGroup(最有可能的“内容”)设置这些路径,并确保在调用Package之前在.csproj中触发目标,并且构建输出将包含一个类似于“正常”的“Web.config”正确的转换值。
或者 (我们已经使用过这个包,它需要成为所有人的一切),你可以使用这个技巧来完成所有的转换,并将它们包含在最终的包中。
然后您手动调用Msdeploy并使用其跳过和替换指令(忘记技术术语)仅在部署时输出正确的指令
假设你的包中有一个web.usethisone.config,看起来像
-skip:objectname=filepath,absolutepath=web..*.config
-replace:objectName=filepath,match=.*web.usethisone.config,replace=web.config
链接地址: http://www.djcxy.com/p/81633.html
上一篇: Can MS Deploy do a package and transform, but not deploy?