Так, мне установили VS 2010, и нахожусь в процессе изменения моего сценария MSBuild для нашей интеграции сборки TeamCity. Все работает отлично за одним исключением.
Как я могу сказать MSBuild, что хочу подать заявку, Web.conifg преобразовывают файлы, которые я создал, когда я публикую сборку...
У меня есть следующее, которое производит скомпилированный веб-сайт, но, он производит Web.config, сеть. Debug.config и, сеть. Файлы Release.config (Все 3) к скомпилированному выходному каталогу. В студии, когда я выполню публикование к файловой системе, она сделает преобразование и только произведет Web.config с соответствующими изменениями...
<Target Name="CompileWeb">
<MSBuild Projects="myproj.csproj" Properties="Configuration=Release;" />
</Target>
<Target Name="PublishWeb" DependsOnTargets="CompileWeb">
<MSBuild Projects="myproj.csproj"
Targets="ResolveReferences;_CopyWebApplication"
Properties="WebProjectOutputDir=$(OutputFolder)$(WebOutputFolder);
OutDir=$(TempOutputFolder)$(WebOutputFolder)\;Configuration=Release;" />
</Target>
Любая справка была бы большой..!
Я знаю, что это может быть сделано другими средствами, но я хотел бы сделать это использование нового VS 2010 путь, если это возможно,
Я искал похожую информацию и не нашел ее, поэтому я немного покопался в файлах .targets, которые поставляются с Visual Studio 2010 и MSBuild 4.0. Я решил, что это лучшее место для поиска задачи MSBuild, которая выполнит преобразование.
Насколько я могу судить, используется следующая задача MSBuild:
<Project ToolsVersion="4.0"
DefaultTargets="Deploy"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<PropertyGroup>
<ProjectPath>C:\Path to Project\Here</ProjectPath>
<DeployPath>C:\Path to Deploy\There</DeployPath>
<TransformInputFile>$(ProjectPath)\Web.config</TransformInputFile>
<TransformFile>$(ProjectPath)\Web.$(Configuration).config</TransformFile>
<TransformOutputFile>$(DeployPath)\Web.config</TransformOutputFile>
<StackTraceEnabled>False</StackTraceEnabled>
</PropertyGroup>
<Target Name="Transform">
<TransformXml Source="$(TransformInputFile)"
Transform="$(TransformFile)"
Destination="$(TransformOutputFile)"
Condition="some condition here"
StackTrace="$(StackTraceEnabled)" />
</Target>
</Project>
Я протестировал вышеуказанное и могу подтвердить, что это работает. Возможно, вам придется немного изменить структуру, чтобы она лучше соответствовала вашему сценарию сборки.
Я не эксперт по MSBuild, но я смог использовать информацию из этой ссылки, чтобы выполнить ту же задачу:
http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
В нижней части статьи есть раздел, связанный с MSBuild. Надеюсь, это поможет.
Вы сможете сделать это, используя цель Package и указав временный каталог.
msbuild solution.sln /p:Configuration=Release;DeployOnBuild=true;DeployTarget=Package;_PackageTempDir=..\publish