对于命令行和TFS构建,添加到Visual Studio 2010网站项目中的web.config转换功能默认是禁用的。
有两个相对简单的解决方案:
选项1:编辑构建定义,并添加以下的“的MSBuild参数”字段:
/p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=false
UseWPP_CopyWebApplication将导致新的Web发布管道(WPP)将被激活用于构建。 WPP执行web.config转换,也可用于阻止诸如.PDB文件之类的内容被复制到bin文件夹。
选项2:MSBuild和WPP都是完全可扩展的。在与项目相同的目录中创建一个新的XML文件,并使用“.targets”扩展名 - 例如ProjectName.custom.targets。将以下MSBuild代码放入目标文件中:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<UseWPP_CopyWebApplication>True</UseWPP_CopyWebApplication>
<PipelineDependsOnBuild>False</PipelineDependsOnBuild>
</PropertyGroup>
</Project>
右键单击您的网站并选择“卸载项目”。右键单击卸载的项目并选择编辑。滚动到项目文件的底部并查找以下行:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
这些行是C#和Web项目构建过程连接起来的地方。插入一个进口到您的自定义生成扩展(目标文件)的进口CSHARP立即前:
<Import Project="ProjectName.custom.targets"/>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
这就是它 - 你是好去。 MSBuild定制方法需要更多的工作来设置,但好处是您可以使用新的目标文件“挂钩”到构建过程中,并更好地控制在服务器上的构建方式。例如,你可以挂钩任务来执行CSS和JS压缩。
我还建议看看“wpp目标” - 如果你用特定名称“ProjectName.wpp.targets”命名另一个MSBuild文件,你可以控制整个网站的发布过程。我们用它来去除的JavaScript文档文件的发布网站输出复制-vsdoc:
<ItemGroup>
<ExcludeFromPackageFiles Include="Scripts\**\*-vsdoc.js;Resources\Scripts\**\-vsdoc.js">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
说的一切,你可能会更好过离开从你的构建完全生产web.configs。我们将转换直接放置到生产部署机器上,并在部署应用程序时使用powershell进行转换。
另请注意,web.config转换仅在部署过程中调用,而不是在标准构建过程中调用。 – 2010-05-13 13:44:41
我有一个发布配置(AnyCpu | Release),但构建中的Web.config不会更改。 – 2011-01-08 00:23:29
这是错误的,那些“配置”是构建配置,而不是配置文件。 – Alex 2012-02-06 09:17:46