Ответ 1
Вы также можете попробовать использовать инструмент преобразования XDT:
Я использую это вместо того, чтобы возиться с неясными целями msbuild.
Добрый день!
Я хочу иметь возможность создавать проект 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?
Спасибо!
Вы также можете попробовать использовать инструмент преобразования XDT:
Я использую это вместо того, чтобы возиться с неясными целями msbuild.
Вот еще один подход, который использует 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>
Я думаю, стоит упомянуть, что вы также можете использовать PowerShell DLL, используемую Visual Studio: Microsoft.Web.XmlTransform.dll
PowerShell script, см.: 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."
}