Msbuild MS Deploy是否可以进行打包和转换,但不能进行部署?

Msbuild MS Deploy是否可以进行打包和转换,但不能进行部署?,msbuild,web-config,msdeploy,Msbuild,Web Config,Msdeploy,使用.NET4.0中的msbuild,我可以构建具有“Package”目标的web项目,并且它可以很好地将包放入zip文件中。但是,当我查看其中的web.config时,它没有被转换,它有“$(ReplacableToken\u web\u SiteConnection-web.config连接字符串\u 0)” 我可以运行“TransformWebConfig”目标,它将执行正确的转换,但只是在它自己的思洛存储器中 我还可以运行“Build”目标并传递“DeployOnBuild=True;D

使用.NET4.0中的msbuild,我可以构建具有“Package”目标的web项目,并且它可以很好地将包放入zip文件中。但是,当我查看其中的web.config时,它没有被转换,它有“$(ReplacableToken\u web\u SiteConnection-web.config连接字符串\u 0)”

我可以运行“TransformWebConfig”目标,它将执行正确的转换,但只是在它自己的思洛存储器中

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


但是,如果我想手动将包部署到服务器上,如何使用“TransformWebConfig”创建一个“包”,以便zip文件中包含最终的web.config?

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

目标是call TransformXml,是Microsoft.Web.Publishing.Tasks.dll的一部分

在你自己的目标中

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

如果要避免发生这种情况,则需要在生成中设置属性。你可以用两种方法来做

  • 编辑项目文件
  • 创建一个.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>
    
    
    假的
    

    在本例中,您正在设置属性
    AutoParameterizationWebConfigConnectionStrings
    ,该属性告诉Web发布管道不要在Web.config中为连接字符串插入那些{}占位符。

    谢谢,它工作起来很有魅力,为我节省了很多时间。我确实花了很多时间为不同的部署环境转换多个Web.config文件。我将其添加到web应用程序的.csproj文件中,但我不太明白该将该部分放在何处。如何在我的.csproj文件中找到“最合适的项目组(“内容”最有可能)”以及如何“确保在调用包之前触发目标”?这涉及占位符,但没有解释如何在打包时应用转换。
    -skip:objectname=filepath,absolutepath=web\..*\.config 
    
    -replace:objectName=filepath,match=.*web\.usethisone\.config,replace=web.config
    
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
             ToolsVersion="4.0">
      <PropertyGroup>
        <AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>
      </PropertyGroup>
    </Project>