我已经尝试了许多不同的配置,但我没有达到我的结果。
TL;DR
我正在尝试将配置转换添加到我的构建过程中,并正在寻找从MSBuild进行配置转换的正确方法,以便它通过MSDeploy显示在我的部署中。
背景
目标
我想将Web.Config转换添加到这个过程中。我想我一开始会做一些简单的事情,比如一个名为"PEAppsEnvironmentName“的应用程序设置,我将根据当前的环境进行开发、测试或Prod。
迄今为止的理论
在我看来,当使用MSDeploy打包时,我不会转换配置文件。
当我在选项设置为true的情况下运行MSBuild时,它会创建另一个具有适当转换的配置的包。只是不知怎么的,我没办法让一切都匹配起来。最终的结果是网页显示"None“(初始设置),而不是转换后的"Development”字符串。
我想,如果我能找到如何在打包阶段使用MSDeploy来转换MSConfig,我会很乐意去做的。
代码
我的web.config文件
<appSettings>
<add key ="PEAppsEnvironmentName" value="None"/>
...
</appSettings>我的Web.Dev.config文件
<appSettings>
<add key ="PEAppsEnvironmentName" xdt:Transform="Replace" xdt:Locator="Match(key)" value="Development" />
</appSettings>我的MSBuild目标
显示默认配置的属性组为"Dev"
<PropertyGroup>
<Configuration Condition="'$(Configuration)' == ''">Dev</Configuration>
</PropertyGroup>My MSBuild“编译”目标
<Target Name="Compile" DependsOnTargets="Init">
<MSBuild Projects="@(SolutionFile)" Targets="Rebuild" Properties="OutDir=%(BuildArtifacts.FullPath);DeployOnBuild=True"/>
</Target>My MSBuild "Package“目标
<Target Name="Package" DependsOnTargets="Compile;Test">
<PropertyGroup>
<PackageDir>%(PackageFile.RootDir)%(PackageFile.Directory)</PackageDir>
<Source>%(WebSite.FullPath)</Source>
<Destination>%(PackageFile.FullPath)</Destination>
</PropertyGroup>
<MakeDir Directories="$(PackageDir)"/>
<Exec Command='"@(MSDeploy)" -verb:sync -source:iisApp="$(Source)" -dest:package="$(Destination)" '/>
</Target>我的MSBuild“部署”目标
(为PWs等擦洗)
<Target Name='Deploy' DependsOnTargets='Package'>
<PropertyGroup>
<Source>%(PackageFile.FullPath)</Source>
</PropertyGroup>
<Exec Command ='"@(MsDeploy)" -verb:sync -source:package="$(Source)" -dest:iisApp=PEApps,computerName=$(WebServerName),username=[User],password=[Password]'/>
</Target>发布于 2012-08-09 03:30:54
这个问题有很多,我不确定我是否和你完全一样,但我会总结一下我对你要求的印象。您有一个现有的web项目,它与其他项目一起处于解决方案中。您需要能够打包web项目,以便将其发布到多个目的地。
我已经创建了一个NuGet包,它可以用于此目的。它叫包装-网页。当您将它添加到您的web项目时,它将更新打包过程。创建包时,包中将包含一些附加文件,包括所有web.config转换文件。还将在包旁边创建一个.ps1文件。您可以使用此脚本发布包。它将提示您运行哪个转换和所有的Web部署参数。您还可以保存对文件的响应,然后将它们传递给.ps1文件,以便执行非交互式发布。我在http://nuget.org/packages/PackageWeb软件包web:http://sedodream.com/2012/03/14/PackageWebUpdatedAndVideoBelow.aspx上制作了一个5分钟的视频。FYI,这还不是VS 2012,但我正在进行修复,应该在VS 2012发布时更新它。
如果您不觉得这很有用,那么您可以看到我是如何在https://github.com/sayedihashimi/package-web上实现该解决方案的,并且您应该看到您需要做的所有事情的示例。
如果您需要在包创建上转换除web.config之外的任何文件,那么您应该看看我的VS扩展名SlowCheetah。下面是一个关于如何将它集成到生成服务器中的博客。
https://stackoverflow.com/questions/11195573
复制相似问题