2011-01-31 22 views
24

Dzień dobry!Uruchom transformację web.config z wiersza poleceń

Chcę mieć możliwość budowania projektu ASP.NET MVC 2 przy użyciu okna dialogowego Opublikuj VS2010 i z wiersza polecenia.

Dla linii poleceń pojawia się następujący pracować:

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

Jedyny problem mam, że transformacja Web.config nie stosuje się (ale dodaje do pakietu WebDeploy). Nie używam WebDeploy. Czy istnieje sposób na zastosowanie transformacji Web.config?

Dzięki!

+0

Możliwy duplikat [MSBuild Script i VS2010 publikowania zastosować Web.config Transform] (http://stackoverflow.com/questions/2905151/msbuild- script-and-vs2010-publish-apply-web-config-transform) –

Odpowiedz

22

Można również spróbować użyć narzędzia XDT Transformacja:

http://ctt.codeplex.com

Używam tego zamiast bawić z niejasnych celów MSBuild.

+0

Wydaje się być najlepszym rozwiązaniem do tej pory. – artvolk

+0

Wszystkie linki do dokumentacji już nie występują na tej stronie. – Luke

9

Oto inne podejście, które wykorzystuje msbuild przekształcić plik Web.config:

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

W moich testach wyniki były lepsze. Zasadniczo, można utworzyć plik projektu, aby wykonać tylko zadanie 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> 

+0

To jest niesamowicie prosty sposób na zrobienie tego. Zastąp 'v10.0' opcją' v15.0' dla Visual Studio 2017, aby umożliwić jej znalezienie biblioteki dll. – Luke

4

myślę, że warto wspomnieć, że można również skorzystać z PowerShell DLL, że Visual Studio przy użyciu: Microsoft.Web.XmlTransform.dll

skrypt PowerShell, zobacz: Web.Config transforms outside of Microsoft MSBuild?

aby załadować DLL zamiast kopiowania dookoła, zrobić tak (więc można zobaczyć, gdzie znaleźć ten DLL, przynajmniej w mój scenariusz w pracy mieliśmy do look-up te lokalizacje):

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." 
} 
Powiązane problemy