从命令行运行web.config转换

时间:2011-01-31 11:13:30

标签: visual-studio-2010 asp.net-mvc-2 msbuild

美好的一天!

我希望能够使用VS2010发布对话框从命令行构建ASP.NET MVC 2项目。

对于命令行,我可以使用以下代码:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe .\SolutionFolder\MyProject.csproj /p:Configuration=Release;DeployOnBuild=True;PackageAsSingleFile=False;outdir=c:\_OutputFolder\

我唯一没有应用Web.config转换的问题(但是已添加到WebDeploy包中)。我不使用WebDeploy。有没有办法应用Web.config转换?

谢谢!

3 个答案:

答案 0 :(得分:23)

您也可以尝试使用XDT转换工具:

http://ctt.codeplex.com

我正在使用它而不是弄乱晦涩的msbuild目标。

答案 1 :(得分:16)

这是另一种方法,它使用msbuild转换Web.config文件:

http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx

在我的测试中,结果更好。基本上,您创建一个项目文件只执行TransformXML任务:

<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml"
         AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

<Target Name="Demo">
    <TransformXml Source="app.config"
                  Transform="Transform.xml"
                  Destination="app.prod.config"/>
</Target>
</Project>

保存项目文件,然后应用转换,运行以下命令:

  

msbuild trans.proj / t:演示

trans.proj 是项目文件的名称,演示是任务目标的名称。

答案 2 :(得分:5)

我认为值得一提的是,您还可以使用Visual Studio正在使用的 PowerShell Microsoft.Web.XmlTransform.dll

PowerShell脚本,请参阅:Web.Config transforms outside of Microsoft MSBuild?

要加载DLL而不是复制,我喜欢这样(所以你看到在哪里可以找到这个DLL,至少在我工作的场景中我们必须查找这些位置):

if (Test-Path "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.XmlTransform.dll") {
    Add-Type -LiteralPath "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.XmlTransform.dll"
} elseif (Test-Path "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.XmlTransform.dll") {
    Add-Type -LiteralPath "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.XmlTransform.dll"
} else {
    throw [System.IO.FileNotFoundException] "Microsoft.Web.XmlTransform.dll not found."
}