MSBuild Guión y VS2010 publican aplica Web.config Transform
-
04-10-2019 - |
Pregunta
Por lo tanto, tengo instalado VS 2010 y estoy en el proceso de modificar mi script de MSBuild para nuestra integración TeamCity acumulación. Todo está funcionando muy bien, con una excepción.
¿Cómo puedo saber MSBuild que quiero aplicar el Web.conifg archivos de transformación que he creado cuando publico la acumulación ...
Tengo los siguientes elementos que produce la página web compilado pero, se da salida a una Web.config, y Web.Debug.config, archivos Web.Release.config (los 3) en el directorio de salida compilada. En el estudio cuando realizo una publican al sistema de archivos que va a hacer la transformación y sólo la salida de Web.config con los cambios apropiados ...
<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>
Cualquier ayuda sería grande ..!
Sé que esto puede hacerse por otros medios, pero me gustaría hacer esto utilizando el nuevo VS 2010 camino si es posible
Solución
Yo estaba buscando información similar y no acababa de encontrar, así que hice un poco de escarbar en los archivos .targets que vienen con Visual Studio 2010 y MSBuild 4.0. Me imaginé que era el mejor lugar para buscar la tarea de MSBuild que realizar la transformación.
Por lo que yo he sido capaz de decir, se utiliza la siguiente tarea 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>
He probado la anterior y puede confirmar que funciona. Es posible que tenga que modificar la estructura un poco para encajar con su escritura de la estructura mejor.
Otros consejos
debe ser capaz de lograr esto mediante el uso de la meta del paquete y especificando el directorio temporal.
msbuild solution.sln /p:Configuration=Release;DeployOnBuild=true;DeployTarget=Package;_PackageTempDir=..\publish
Por otra parte, se intenta utilizar el TXD Transformación de herramientas
Estoy usando esto en vez de jugar con los objetivos msbuild oscuros. Funciona con app.config no sólo web.config .
Se trabajó para mí con el siguiente cambio
<MSBuild Projects="$(ProjectFile)"
Targets="ResolveReferences;_WPPCopyWebApplication"
Properties="WebProjectOutputDir=TempOutputFolder;OutDir=$(WebProjectOutputDir);Configuration=$(Configuration);" />
A partir de archivo Microsoft.WebApplication.targets bajo MSBUILD carpeta ??p>
_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.
No soy un experto con MSBuild, pero yo era capaz de utilizar la información de este enlace para realizar la misma tarea:
http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
Hay una sección relacionada con MSBuild cerca de la parte inferior del artículo. Espero que esto ayude.
Otra respuesta a este tema después de que he estado buscando durante días antes de Abordé este tema:
Sus perfil de publicación y configuración debe coincidir con los nombres.
En mi caso la mía no. la publicación de forma manual a través del perfil editorial me dio el resultado que quería, porque mi configuración se encuentra en el perfil de publicación. Sin embargo MSBuild trata de ser inteligente y mágicamente conecta el perfil y la configuración publican en función del nombre. (Adición de la / t: Configuración en el comando dio lugar a otros errores extraños acerca de la OutputPath de un proyecto de referencia).
Sólo para estar muy claro en lo que quiero decir:
MSBuild comunicado desde la línea de comandos
msbuild myproject.csproj -t: -t Limpio: Reconstruir / p: DeployOnBuild = true / p: PublishProfile = "Desarrollo"
Trabajos
- publicar el nombre del perfil : Desarrollo
- nombre de Configuración de soluciones : Desarrollo
no funciona
- publicar el nombre del perfil : Desarrollo
- nombre de Configuración de soluciones : Dev
Espero que esto ayude!