MSBuild Script e VS2010 pubblicano applicare web.config Transform
-
04-10-2019 - |
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,
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
In alternativa, si tenta con il XDT Trasformazione strumento :
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!