powershell - argumentos - Cómo modificar el csdef definido en un cspkg
msbuild reduce verbosity (3)
He hecho algo similar a lo que buscas para diferenciar entre entornos de prueba y en vivo. Antes que nada, necesitas crear un nuevo archivo .csdef que quieras usar para tus configuraciones alternativas. Este debe ser el archivo completo, ya que vamos a cambiarlo por el original. Ahora tenemos que agregar esto al proyecto de la nube. Haga clic con el botón derecho en el proyecto de la nube y seleccione Descargar proyecto. Haga clic derecho sobre él de nuevo y seleccione Editar [Nombre del proyecto]. Hay una sección que se parece un poco a esto:
<ItemGroup>
<ServiceConfiguration Include="ServiceConfiguration.Test.cscfg" />
<ServiceDefinition Include="ServiceDefinition.csdef" />
<ServiceConfiguration Include="ServiceConfiguration.cscfg" />
</ItemGroup>
Agregue un nuevo elemento ServiceDefinition que apunte a su archivo recién creado. Ahora encuentra la siguiente línea:
<Import Project="$(CloudExtensionsDir)Microsoft.WindowsAzure.targets" />
A continuación, agregue este bloque de código, edite la verificación TargeProfile para que sea la configuración de compilación que desea usar para su alternativa y asegúrese de que apunte a su nuevo archivo .csdef
<Target Name="AfterResolveServiceModel">
<!-- This should be run after it has figured out which definition file to use
but before it''s done anything with it. This is all a bit hard coded, but
basically it should remove everything from the SourceServiceDefinition
item and replace it with the one we want if this is a build for test-->
<ItemGroup>
<!-- This is an interesting way of saying remove everything that is in me from me-->
<SourceServiceDefinition Remove="@(SourceServiceDefinition)" />
<TargetServiceDefinition Remove="@(TargetServiceDefinition)" />
</ItemGroup>
<ItemGroup Condition="''$(TargetProfile)'' == ''Test''">
<SourceServiceDefinition Include="ServiceDefinition.Test.csdef" />
</ItemGroup>
<ItemGroup Condition="''$(TargetProfile)'' != ''Test''">
<SourceServiceDefinition Include="ServiceDefinition.csdef" />
</ItemGroup>
<ItemGroup>
<TargetServiceDefinition Include="@(SourceServiceDefinition->''%(RecursiveDirectory)%(Filename).build%(Extension)'')" />
</ItemGroup>
<Message Text="Source Service Definition Changed To Be: @(SourceServiceDefinition)" />
</Target>
Para volver a la normalidad, haga clic derecho en el proyecto y seleccione Recargar proyecto. Ahora cuando construya su proyecto, dependiendo de la configuración que use, usará diferentes archivos .csdef. Vale la pena señalar que el editor de configuraciones no tiene conocimiento de su segundo archivo .csdef, por lo que si agrega alguna configuración nueva a través de la GUI, deberá agregarlas manualmente a esta versión alternativa.
Para implementar en diferentes entornos azules, modifico el csdef como parte del paso de compilación para cambiar los encabezados del host. Hacerlo requiere construir el cspkg una vez para cada entorno en lugar de poder reutilizar el cspkg y especificar diferentes configuraciones para la implementación.
En su lugar, me gustaría modificar el archivo csdef de un cspkg después de que se haya creado, sin volver a compilar. Es posible, y si es así, ¿cómo?
Por lo que yo sé, no se puede modificar fácilmente .cspkg después de haber sido creado. Supongo que probablemente técnicamente podrías como el .cspkg es un archivo zip que sigue una cierta estructura.
La pregunta que haría sería ¿por qué? Si se trata de modificar configuraciones como el tamaño de la función VM (ya que está definido en el archivo .csdef), entonces creo que tiene un par de enfoques alternativos:
- Cree un proyecto de implementación de Windows Azure separado (.csproj) para cada variación. Sí, me doy cuenta de que esto puede ser un problema, pero permite que las herramientas de Visual Studio funcionen bien. El dolor menor puede valer la pena tener el soporte de herramienta más fácil de usar.
- Ejecute una transformación de archivo de configuración como parte del proceso de compilación. Similar a una transformación web.config.
Personalmente, voy con el enfoque diferente .csproj. Principalmente porque no soy un ninja de transformación de archivos de configuración. . . todavía. ;) Este fue el camino de menor resistencia y funcionó bastante bien hasta ahora.
Si desea tener un CSDEF diferente, puede hacerlo fácilmente usando el símbolo del sistema CSPACK directamente como se indica a continuación:
- Abra las ventanas de comandos y ubique la carpeta donde tiene su carpeta CSDEF / CSCFG y CSX relacionada con su Proyecto Windows Azure
- Crear múltiples CSDEF depende de tus pequeños cambios
- Asegúrese de tener Windows Azure SDK en la ruta para ejecutar los comandos CS *
- USE el comando CSPACK y pase los parámetros para usar diferentes archivos CSDEF y CSPKG de salida, algo similar a la siguiente:
cspack <ProjectName>/ServiceDefinitionOne.csdef /out:ProjectNameSame.csx /out:ProjectOne.cspkg /_AddMoreParams
cspack <ProjectName>/ServiceDefinitionTwo.csdef /out:ProjectNameSame.csx /out:ProjectTwo.cspkg /_AddMoreParams
Más sobre CSPACK: http://msdn.microsoft.com/en-us/library/windowsazure/gg432988.aspx