我不想使用整個Web應用程序項目解決方案。 我的解決方案是直接使用Microsoft.Web.Publishing.Tasks.dll中定義的XmlTransform任務(此任務是WebConfigTransformation的核心) 這種方式非常靈活,並且完全符合您的期望。 例如,這裏是我用於轉換web.config的WebSiteTransformator.csproj。
這裏還有一個原始WebConfigTransformation無法實現的靈活性示例:它需要web.Template.config,在其上應用web. $(Configuration).config並寫入web.config。這使我們可以將web.config本身添加到源代碼管理中的忽略列表中。它仍然是有效的csproj通過網站引用:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<SchemaVersion>2.0</SchemaVersion>
<OutputType>Library</OutputType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<OutputPath>$(TEMP)\TransformWebConfig\bin</OutputPath>
<BaseIntermediateOutputPath>$(TEMP)\TransformWebConfig\obj\</BaseIntermediateOutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
<WebFolderName>$(SolutionDir)\MyWebSite\</WebFolderName>
</PropertyGroup>
<ItemGroup>
<Compile Include="Dummy.cs" />
</ItemGroup>
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="BeforeBuild">
<TransformXml Source="$(WebFolderName)Web.Template.config"
Transform="$(WebFolderName)Web.$(Configuration).config"
Destination="$(WebFolderName)Web.config" />
</Target>
</Project>
這是一個很好的黑客,但我懷疑我會執行它... 不管怎麼說,還是要謝謝你! – 2011-02-23 13:39:46
是的,它非常糟糕,你必須訴諸這樣一個hacky的方法來整合msbuild,甚至使用web.config轉換功能,與網站項目。我正在避免網站項目,並儘可能在將來使用網絡應用程序項目。 – porusan 2011-02-23 17:43:12
同樣在這裏....... – 2011-02-24 13:06:27