2011-03-25 28 views
11

hice un web.config (full file, que no muestra los errores XML)¿Publicar no está transformando web.config?

<?xml version="1.0"?> 
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 
    <configSections> 
     ... 
     <location path="." inheritInChildApplications="false"> 
     <connectionStrings> 
      <add name="ElmahLog" connectionString="data source=~/App_Data/Error.db" /> 
      <add name="database" connectionString="w" providerName="System.Data.EntityClient"/> 
     </connectionStrings> 
     </location> 
    ... 

con un archivo de transformación (web.Staging.config)

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <connectionStrings> 
    <add name="database" 
     connectionString="c" 
     providerName="System.Data.EntityClient" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> 
    </connectionStrings> 
    <system.web> 
    <compilation xdt:Transform="RemoveAttributes(debug)" /> 
    <customErrors defaultRedirect="error.aspx" 
     mode="RemoteOnly" xdt:Transform="Replace"> 
    </customErrors> 
    </system.web> 
</configuration> 

estoy publicando en Staging modo (página web del botón derecho > Publicar> Método: Sistema de archivos ...)

------ Build started: Project: Drawing, Configuration: Staging Any CPU ------ 
    Drawing -> D:\Project\bin\Staging\Drawing.dll 
------ Build started: Project: MySystem, Configuration: Staging Any CPU ------ 
    MySystem -> D:\Project\bin\Staging\MySystem.dll 
... 

Pero cuando miro el web.config en la carpeta de salida no se cambia.

encontré la siguiente en el registro de generación:

D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration' 
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration' 
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration' 
Transformed web.config using Web.Staging.config into obj\Staging\TransformWebConfig\transformed\web.config. 

Cuál podría ser el problema? ¿Lo estoy haciendo bien?

+0

cuando publica ¿está construyendo para 'staging' o' release'? – Jimmy

+0

@Jimmy como dice el registro de compilación, se está compilando en 'Puesta en escena'. Hay un archivo de transformación para 'Release', pero tampoco funciona. – BrunoLM

+0

¿Ve un mensaje que indica que está realizando la transformación? Como dice la mía: "Transformado Web.config usando Web.Beta.config en obj \ Beta \ TransformWebConfig \ transformed \ Web.config." – CodingGorilla

Respuesta

16

descubrí dos cosas:

  • No se puede establecer un espacio de nombres en el <configuration> etiqueta (por ejemplo: para <location path="." inheritInChildApplications="false">)
  • Tienes que tener cuidado para la jerarquía correcta en el archivo de transformación.

Como

<configuration> 
    <location> 
    <connectionStrings> 

En lugar de

<configuration> 
    <connectionStrings> 
+0

En cuanto a xmlns: en realidad puede usarlo, pero también debe agregarlo a la etiqueta raíz de transformación. Sin xmlns, funciona, pero VS no reconoce el atributo 'inheritInChildApplications'. – amartynov

0

No se olvide de copiar todos los demás atributos de "configuración" de la original "web.config", ya que parece que VS2012 no lo hace automáticamente y, por supuesto, no habrá ninguna coincidencia ...

+3

Eso no es verdad. Puede especificar solo los atributos que están cambiando e indicar a la transformación que solo actualice los atributos (no reemplace el elemento): '' –

14

Respondiendo tarde pero quizás pueda salvar a alguien con un dolor de cabeza. En Visual Studio 2013, hay dos lugares para seleccionar la configuración para su compilación e implementación. El Administrador de Configuración y luego otra vez con Publicar Web, donde el tercer paso en el Asistente titulado Configuraciones le permite seleccionar la Configuración que desea usar. Si no selecciona su nueva configuración, usará la transformación para la configuración seleccionada en lugar de la suya.

+3

De hecho, me salvó un dolor de cabeza. – izb

+1

Esta es la verdadera respuesta. –

0

Contestar tarde también, pero esto puede ayudar a alguien.

Me di cuenta de que si tiene dos sitios web en la misma solución, cuando intente publicar uno de ellos, la transformación podría no funcionar si tiene una configuración única para ambos proyectos.

Uno de mis sitios web siempre se estaba transformando, pero el otro a veces lo era y otras veces no.

Por ejemplo, tenía la configuración "Auto" en la solución, y tenía web.Auto.config para ambos sitios web.

Resolví que al crear una nueva configuración con un nombre diferente - "AutoAdmin" - creando también su archivo web.AutoAdmin.config para el segundo proyecto, y cuando lo publiqué nuevamente, la transformación finalmente ocurrió.

2

Asegúrese de que en las propiedades de la Web.El archivo de configuración Build Action se establece en Content.

Si la acción de compilación está configurada en None, no se transformará, incluso si se está copiando en el directorio de salida.

Cuestiones relacionadas