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?


如果你想跳过这一切,那么你需要在你的构建中设置一个属性。 你可以用两种方法来做到这一点

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

    下一篇: CopyWebApplication with web.config transformations