visual tutorial studio para ordenar mejores las instalar extensiones español codigo code autocompletar visual-studio visual-studio-2010 web-config

visual-studio - tutorial - ordenar codigo visual studio code



¿Cómo realizo las transformaciones de Web.config con los proyectos del sitio web de Visual Studio? (5)

Como se menciona en el comentario anterior de Andriy, los eventos de construcción de amplia solución definitivamente parecen una forma más limpia de hacer esto.

Estoy agregando esto como una respuesta separada, ya que se pierde un poco en el comentario, pero en mi humilde opinión es la mejor respuesta. Apoyos a Andriy K y Sayed Ibrahim.

No parece posible cambiar la configuración de compilación de los proyectos del sitio web de Visual Studio 2010 (a diferencia de las aplicaciones web de Visual Studio), y cambiar la configuración de compilación es una parte clave para habilitar las transformaciones de Web.config (no es posible cambiarla). la configuración a todo menos a Debug).

¿Cómo puedo hacer que las transformaciones de Web.config funcionen con los proyectos del sitio web de Visual Studio 2010 si no es posible cambiar la configuración de compilación?


Encontré una publicación de blog bastante buena que describe una solución para esto aquí: http://andrewtwest.com/2010/02/25/using-web-config-transformations-in-web-site-projects/

En resumen: cree un proyecto vacío (siempre que no sea otro proyecto de sitio web) en su solución que contenga el sitio web. El proyecto vacío le dará acceso a msbuild a través de su archivo de proyecto, lo que le permitirá realizar transformaciones en su sitio web web.config.


Preferiría no utilizar toda una solución de proyecto de aplicación web al instante. Mi solución es usar la tarea XmlTransform definida en Microsoft.Web.Publishing.Tasks.dll directamente (esta tarea es el núcleo de WebConfigTransformation) De esta manera es lo suficientemente flexible y hace exactamente lo que espera que haga. Por ejemplo, aquí está el WebSiteTransformator.csproj que estoy usando para transformar web.config.

Aquí también hay un ejemplo de flexibilidad que es imposible de alcanzar con la WebConfigTransformation original: lleva a web.Template.config, aplica web. $ (Configuration) .config sobre él y escribe web.config. Esto nos permite agregar web.config en la lista de ignorar en control de fuente. Todavía es válido csproj para ser referenciado por el sitio web:

<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Platform Condition=" ''$(Platform)'' == '''' ">AnyCPU</Platform> <SchemaVersion>2.0</SchemaVersion> <OutputType>Library</OutputType> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <OutputPath>$(TEMP)/TransformWebConfig/bin</OutputPath> <BaseIntermediateOutputPath>$(TEMP)/TransformWebConfig/obj/</BaseIntermediateOutputPath> <IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)/</IntermediateOutputPath> <WebFolderName>$(SolutionDir)/MyWebSite/</WebFolderName> </PropertyGroup> <ItemGroup> <Compile Include="Dummy.cs" /> </ItemGroup> <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)/Microsoft/VisualStudio/v10.0/Web/Microsoft.Web.Publishing.Tasks.dll"/> <Import Project="$(MSBuildToolsPath)/Microsoft.CSharp.targets" /> <Target Name="BeforeBuild"> <TransformXml Source="$(WebFolderName)Web.Template.config" Transform="$(WebFolderName)Web.$(Configuration).config" Destination="$(WebFolderName)Web.config" /> </Target> </Project>


Si prefiere no necesitar un Web.Template.config, utilicé esto:

<PropertyGroup> <_tempSourceFile>$([System.IO.Path]::GetTempFileName())</_tempSourceFile> <_tempTransformFile>$([System.IO.Path]::GetTempFileName())</_tempTransformFile> </PropertyGroup> <Copy SourceFiles="$(ProjectDir)Web.config" DestinationFiles="$(_tempSourceFile)"/> <Copy SourceFiles="$(ProjectDir)Web.$(Configuration).config" DestinationFiles="$(_tempTransformFile)"/> <TransformXml Source="$(_tempSourceFile)" Transform="$(_tempTransformFile)" Destination="$(ProjectDir)Web.config" StackTrace="false" />

Adaptado de una respuesta here .


Usé un enfoque ligeramente alternativo. Todavía un poco complicado, pero creo que es mucho más sencillo. Esto funcionó para mí, pero obviamente hay muchas configuraciones diferentes disponibles, así que no puedo garantizar que funcione para todos. Esto gira en torno a la forma en que un sitio web se empaqueta primero en su carpeta AppData antes de publicarse ...

  1. Agregue manualmente un archivo Web.Release.config al sitio web y agregue las transformaciones necesarias; obviamente, no existe la opción ''Agregar configuración de configuración'' para los sitios web, por lo tanto, tiene que hacer esto manualmente. Ejemplo Web.Release.config:

    <?xml version="1.0" encoding="utf-8"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <appSettings> <add key="MySetting" value="NewValue" xdt:Transform="Replace" xdt:Locator="Match(key)" /> </appSettings> <system.web> <compilation xdt:Transform="RemoveAttributes(debug)" /> </system.web> </configuration>

  2. Dentro del archivo website.publishproj , asegúrese de que la configuración esté configurada en Liberar:

    <Configuration Condition=" ''$(Configuration)'' == '''' ">Release</Configuration>

  3. Agregue lo siguiente a la parte inferior de website.publishproj (justo antes de </Project> ):

    <Target Name="AfterBuild"> <MakeDir Directories="$(PackageArchiveRootDir)/../CSAutoParameterize/original" /> <TransformXml Source="Web.config" Transform="Web.$(ConfigurationName).config" Destination="$(PackageArchiveRootDir)/../CSAutoParameterize/original/Web.config" StackTrace="false" /> </Target>