MS Deploy可以执行包和转换,但不能部署吗?

Rya*_*anW 13 msbuild web-config msdeploy

在.NET 4.0中使用msbuild,我可以使用"Package"目标构建Web项目,并且可以将包放在zip文件中.但是,当我查看那里的web.config时,它没有被转换,它有"$(ReplacableToken_Web_SiteConnection-Web.config Connection String_0)"

我可以运行"TransformWebConfig"目标,它将进行正确的转换,但只是在自己的孤岛中.

我还可以运行"Build"目标并传递"DeployOnBuild = True; DeployTarget = MSDeployPublish"属性,它将在我的服务器上部署包,并完成正确的web.config转换.

但是,如果我想手动将软件包部署到服务器,如何使用"TransformWebConfig"执行"Package",以便zip文件中包含最终的web.config?

Say*_*imi 12

如果要跳过此操作,则需要在构建中设置属性.你可以用两种方式做到这一点

  1. 编辑项目文件
  2. 创建.wpp.targets文件

我建议#2.对于这种情况,请在与项目文件相同的目录中创建一个名为{ProjectName} .wpp.targets的新文件,其中{ProjectName}是项目的名称.然后在这个文件里面你应该放置以下内容.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
         ToolsVersion="4.0">
  <PropertyGroup>
    <AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您设置的属性AutoParameterizationWebConfigConnectionStrings告诉Web Publishing Pipeline不要在web.config中为连接字符串插入这些{}占位符.


Tay*_*ird 10

我们这样做的方法是修改项目构建以在打包之前进行转换.

Target是调用TransformXml并且是Microsoft.Web.Publishing.Tasks.dll的一部分

在你自己的目标中

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"  /> 
Run Code Online (Sandbox Code Playgroud)

但它将包含在默认的VS C#build中.

所以

<TransformXml Source="web.config" Transform="web.release.config" Destination="$(DeployPath)\web.config" />
Run Code Online (Sandbox Code Playgroud)

对我们来说是诀窍.

使用正确的ItemGroup(最有可能是"内容")设置这些路径,并确保在.csproj中调用Package之前触发目标,并且构建输出将包含一个像正常的"Web.config",正确的转化价值观

或者(我们已经将它用于需要每个人的所有内容的包),您可以使用该技巧来完成所有转换并将其中的每一个包含在最终包中.

然后手动调用Msdeploy并使用其skip和replace指令(忘记技术术语)仅在部署时输出正确的指令

假设你的包中有web.usethisone.config,看起来像

-skip:objectname=filepath,absolutepath=web\..*\.config 

-replace:objectName=filepath,match=.*web\.usethisone\.config,replace=web.config
Run Code Online (Sandbox Code Playgroud)