Skrypt MSBuild i VS2010 publish stosuje Web.Config Transform

Więc, mam VS 2010 zainstalowany i jestem w trakcie modyfikowania mojego skryptu MSBuild dla naszej integracji TeamCity build. Wszystko działa świetnie z jednym wyjątkiem.

Jak mogę powiedzieć MSBuild, że chcę zastosować sieć.pliki transformacji conifg, które utworzyłem podczas publikowania kompilacji...

Mam następujący, który tworzy skompilowaną stronę internetową, ale wyświetla sieć.config, Web.Debugowanie.config i, Web.Uwolnij.pliki konfiguracyjne (wszystkie 3) do skompilowanego katalogu wyjściowego. W studio kiedy wykonam publikowanie do systemu plików, zrobi transformację i wypuści Tylko sieć.config z odpowiednimi zmianami...

<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>
Każda pomoc byłaby świetna..!

Wiem, że można to zrobić innymi środkami, ale chciałbym to zrobić za pomocą nowego VS 2010 sposób, jeśli to możliwe

Author: abatishchev, 2010-05-25

6 answers

Szukałem podobnych informacji i nie do końca je znalazłem, więc trochę poszperałem w .pliki docelowe dostarczane z Visual Studio 2010 i MSBuild 4.0. Uznałem, że to najlepsze miejsce do szukania zadania MSBuild, które wykonałoby transformację.

Z tego co mi wiadomo, używane jest następujące zadanie 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>

Przetestowałem powyższe i mogę potwierdzić, że działa. Być może będziesz musiał nieco dostosować strukturę, aby dopasować ją do swojej konstrukcji scenariusz lepszy.

 63
Author: Umar Farooq Khawaja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-04 01:29:56

Powinieneś być w stanie to osiągnąć, używając celu pakietu i podając katalog temp.

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
Author: pattersonc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-15 19:47:31

Alternatywnie spróbuj użyć narzędzia XDT Transformation Tool :

Http://ctt.codeplex.com

Używam tego zamiast mieszać z niejasnymi celami msbuild. Współpracuje z app.config nie tylko www.config .

 8
Author: Brian Chavez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-23 08:33:47

Zadziałało dla mnie z następującą zmianą

<MSBuild Projects="$(ProjectFile)"
         Targets="ResolveReferences;_WPPCopyWebApplication"
     Properties="WebProjectOutputDir=TempOutputFolder;OutDir=$(WebProjectOutputDir);Configuration=$(Configuration);" />

Od Microsoftu.Webaplikacja.plik docelowy w folderze MsBuild

_CopyWebApplication

This target will copy the build outputs along with the 
content files into a _PublishedWebsites folder.

This Task is only necessary when $(OutDir) has been redirected
to a folder other than ~\bin such as is the case with Team Build.

The original _CopyWebApplication is now a Legacy, you can still use it by 
 setting $(UseWPP_CopyWebApplication) to true.
By default, it now change to use _WPPCopyWebApplication target in
 Microsoft.Web.Publish.targets.   
It allow to leverage the web.config trsnaformation.
 5
Author: Syam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-24 03:43:08

Jest to doskonały writeup o niestandardowych transformacjach:

Http://www.diaryofaninja.com/blog/2011/09/14/using-custom-webconfig-transformations-in-msbuild

Musieliśmy dostosować wdrożenia internetowe nieco bardziej niż normalnie ze względu na tony klasycznej ASP i inne nieprzyjemności, do których musieliśmy się dostosować. Ten artykuł oszczędził wiele godzin przekopywania się przez cele MS.

 1
Author: kenchilada,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-14 20:06:52

Nie jestem ekspertem od MSBuild, ale udało mi się wykorzystać informacje z tego linku do wykonania tego samego zadania:

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

Na dole artykułu znajduje się sekcja związana z MSBuild. Mam nadzieję, że to pomoże.

 0
Author: Jonathan S.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-25 13:43:43