Запустите преобразование web.config из командной строки - PullRequest
28 голосов
/ 31 января 2011

Добрый день!

Я хочу иметь возможность создавать проект ASP.NET MVC 2, используя диалог публикации VS2010 и из командной строки.

Для командной строки я получаю следующее:

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 ]

23 голосов
/ 23 мая 2011

Вы также можете попробовать использовать XDT Transformation Tool:

http://ctt.codeplex.com

Я использую это вместо того, чтобы связываться с неясными целями msbuild.

17 голосов
/ 27 июля 2015

Вот еще один подход, который использует 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: Demo

Где trans.proj - имя файла проекта, а Demo - имя цели задачи.

5 голосов
/ 08 августа 2017

Я думаю, стоит упомянуть, что вы также можете использовать с PowerShell DLL, которую использует Visual Studio: Microsoft.Web.XmlTransform.dll

Сценарий PowerShell, см .: Преобразование Web.Config вне 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."
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...