Domanda

Così, ho VS 2010 installato e sono in procinto di modificare il mio script MSBuild per la nostra integrazione TeamCity build. Tutto è bello lavorare con una sola eccezione.

Come faccio a sapere MSBuild che voglio applicare la Web.conifg trasformare file che ho creato quando pubblico l'accumulo ...

Ho il seguente che produce il sito web compilato ma, viene emesso un web.config, Web.Debug.config e, file Web.Release.config (Tutti 3) nella directory di output compilato. In studio quando eseguo un pubblicano di file system si farà il ...

trasformare e solo l'uscita del web.config con le opportune modifiche
<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>

Qualsiasi aiuto sarebbe grande ..!

So che questo può essere fatto con altri mezzi, ma vorrei farlo usando il nuovo modo VS 2010, se possibile,

È stato utile?

Soluzione

Ero alla ricerca di informazioni simili e non ho ben trovo, così ho fatto qualche scavare intorno nei file .targets forniti con Visual Studio 2010 e MSBuild 4.0. Ho pensato che era il posto migliore per cercare il compito MSBuild che eseguire la trasformazione.

Per quanto sono stato in grado di dire, viene utilizzato il seguente compito 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>

Ho testato il sopra e può confermare che funziona. Potrebbe essere necessario modificare la struttura un po 'per adattarsi con il vostro script di build migliore.

Altri suggerimenti

Si dovrebbe essere in grado di ottenere questo risultato utilizzando il bersaglio pacchetto e specificando la directory 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/

In alternativa, si tenta con il XDT Trasformazione strumento :

http://ctt.codeplex.com

sto usando questo invece di fare scherzi con obiettivi MSBuild oscuri. Funziona con app.config non solo web.config .

Ha funzionato per me con la seguente modifica

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

Da file Microsoft.WebApplication.targets sotto MsBuild cartella

_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.

Non sono un esperto con MSBuild, ma sono stato in grado di utilizzare le informazioni da questo link per eseguire la stessa operazione:

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

C'è una sezione relativa a MSBuild vicino al fondo di questo articolo. Spero che questo aiuti.

Un'altra risposta a questo argomento dopo che ho cercato per giorni prima ho affrontato questo problema:

Le tue pubblicare nomi di profilo e di configurazione deve corrispondere.

Nel mio caso la mia non ha fatto. la pubblicazione manualmente attraverso il profilo editrice mi ha dato il risultato che volevo, perché la mia configurazione è stata impostata nel profilo di pubblicazione. MSBuild tuttavia cerca di essere intelligente e magicamente collega il profilo e la configurazione pubblicare in base al nome. (L'aggiunta del / p: Configurazione nel comando ha provocato altri errori strani sulla OutputPath di un progetto di riferimento).

Giusto per essere esattamente chiaro in quello che voglio dire:

MSBuild dichiarazione da riga di comando

msbuild myproject.csproj -t: Clean -t: Rebuild / p: DeployOnBuild = true / p: PublishProfile = "Sviluppo"

Opere

  • Pubblica Nome profilo : lo sviluppo
  • nome Configurazione soluzione : lo sviluppo

non funziona

  • Pubblica Nome profilo : lo sviluppo
  • nome Configurazione soluzione : Dev

Spero che questo aiuti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top