2011-01-31 70 views
24

美好的一天!从命令行运行web.config转换

我希望能够使用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转换吗?

谢谢!

+0

的[MSBuild的脚本和VS2010发布应用的Web.config变换](可能的复制http://stackoverflow.com/questions/2905151/msbuild- script-vs-vs2010-publish-apply-web-config-transform) – 2011-01-31 11:37:26

回答

22

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

http://ctt.codeplex.com

我使用这个,而不是用晦涩的MSBuild目标搞乱。

+0

似乎是迄今为止最好的解决方案。 – artvolk 2011-05-23 10:55:49

+0

现在所有的文档链接都已经死在这个页面上。 – Luke 2018-01-04 11:40:31

9

这里是另一种方法,它使用的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> 

4

我认为这是值得一提的是,你还可以用PowerShell的的DLL是Visual Studio的使用用途: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." 
}