對於命令行和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