Сценарий MSBuild и VS2010 публикуют, применяются, Web.config Преобразовывают

Так, мне установили 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 путь, если это возможно,

70
задан abatishchev 18 December 2012 в 05:45
поделиться

3 ответа

Я искал похожую информацию и не нашел ее, поэтому я немного покопался в файлах .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>

Я протестировал вышеуказанное и могу подтвердить, что это работает. Возможно, вам придется немного изменить структуру, чтобы она лучше соответствовала вашему сценарию сборки.

63
ответ дан 24 November 2019 в 13:29
поделиться

Я не эксперт по MSBuild, но я смог использовать информацию из этой ссылки, чтобы выполнить ту же задачу:

http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

В нижней части статьи есть раздел, связанный с MSBuild. Надеюсь, это поможет.

0
ответ дан 24 November 2019 в 13:29
поделиться

Вы сможете сделать это, используя цель Package и указав временный каталог.

msbuild solution.sln /p:Configuration=Release;DeployOnBuild=true;DeployTarget=Package;_PackageTempDir=..\publish

http://pattersonc.com/blog/index.php/2010/07/15/visual-studio-2010-publish-command-from-msbuild-command-line/

13
ответ дан 24 November 2019 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: