MSBuild Script e VS2010 publicar aplicar Web.config Transform

Então, eu tenho o VS 2010 instalado e estou no processo de modificar meu script MSBuild para a nossa integração de compilation do TeamCity. Tudo está funcionando bem com uma exceção.

Como posso dizer ao MSBuild que eu quero aplicar os arquivos de conversão Web.conifg que eu criei quando eu publicar a compilation …

Eu tenho o seguinte que produz o site compilado, mas, gera um Web.config, Web.Debug.config e arquivos Web.Release.config (todos os 3) para o diretório de saída compilado. No estúdio, quando eu executo uma publicação no sistema de arquivos, ele faz a transformação e só gera o Web.config com as alterações apropriadas …

      

Qualquer ajuda seria ótimo..!

Eu sei que isso pode ser feito por outros meios, mas eu gostaria de fazer isso usando o novo VS 2010, se possível

Eu estava procurando por informações semelhantes e não o encontrei, então fiz algumas pesquisas nos arquivos .targets que vêm com o Visual Studio 2010 e o MSBuild 4.0. Eu percebi que era o melhor lugar para procurar a tarefa do MSBuild que realizaria a transformação.

Tanto quanto eu tenho sido capaz de dizer, a seguinte tarefa do MSBuild é usada:

    C:\Path to Project\Here C:\Path to Deploy\There $(ProjectPath)\Web.config $(ProjectPath)\Web.$(Configuration).config $(DeployPath)\Web.config False      

Eu testei o acima e posso confirmar que funciona. Você pode precisar ajustar a estrutura um pouco para se adequar melhor ao seu script de construção.

Você deve conseguir isso usando o destino Package e especificando o diretório 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/

Como alternativa, tente usar a Ferramenta de Transformação XDT :

http://ctt.codeplex.com

Eu estou usando isso em vez de mexer com alvos de msbuild obscuros. Funciona com app.config não apenas web.config .

Funcionou para mim com a seguinte mudança

  

Do arquivo Microsoft.WebApplication.targets na pasta 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. 

Este é um excelente writeup sobre transformações personalizadas:

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

Precisávamos personalizar as implantações da web um pouco mais do que o normal devido a toneladas de ASP clássico e outras imperfeições pelas quais precisávamos nos acomodar. Este artigo economizou horas de escavação através dos alvos MS.

Não sou especialista em MSBuild, mas consegui usar as informações deste link para realizar a mesma tarefa:

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

Há uma seção relacionada ao MSBuild na parte inferior do artigo. Espero que isto ajude.