11

Ho fatto un web.config (full file, non mostra errori XML)Pubblica non sta trasformando 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 file di trasformazione (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> 

sto pubblicando in modalità Staging (sito web del tasto destro > Pubblica> Metodo: File System ...)

------ 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 
... 

Ma quando guardo il web.config nella cartella di output non viene modificato.

ho trovato il seguente sul log di compilazione:

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. 

quello che potrebbe essere il problema? Lo sto facendo bene?

+0

quando pubblichi sta costruendo per 'staging' o' release'? – Jimmy

+0

@Jimmy come dice il log di compilazione, si sta compilando in 'Staging'. C'è un file di trasformazione per 'Release', ma non funziona. – BrunoLM

+0

Viene visualizzato un messaggio che indica che sta eseguendo la trasformazione? Come dice il mio: "Trasformato Web.config usando Web.Beta.config in obj \ Beta \ TransformWebConfig \ transform \ Web.config." – CodingGorilla

risposta

16

ho scoperto due cose:

  • Non è possibile impostare uno spazio dei nomi sul <configuration> tag (es: <location path="." inheritInChildApplications="false">)
  • Dovete guardare per la corretta gerarchia nella file di trasformazione.

Come

<configuration> 
    <location> 
    <connectionStrings> 

Invece di

<configuration> 
    <connectionStrings> 
+0

Per quanto riguarda xmlns: in realtà puoi usarlo, ma poi devi aggiungerlo anche al tag della trasformazione. Senza xmlns funziona, ma VS non riconosce l'attributo 'inheritInChildApplications'. – amartynov

0

Non dimenticare di copiare tutti gli altri attributi di "configurazione" dal "web.config" originale, in quanto sembra che VS2012 non lo fa automaticamente e naturalmente non ci sarà nessuna corrispondenza ...

+3

Non è vero. Puoi specificare solo gli attributi che stanno cambiando e indicare alla trasformazione di aggiornare solo gli attributi (non sostituire l'elemento): '' –

14

Rispondere in ritardo ma forse posso salvare qualcuno un mal di testa. In Visual Studio 2013 sono disponibili due posizioni per la selezione della configurazione e della distribuzione. Il Configuration Manager e poi ancora con Publish Web, dove il terzo passo della procedura guidata intitolato Impostazioni consente di selezionare Config che si desidera utilizzare. Se non selezioni la tua nuova configurazione, utilizzerà la trasformazione per la configurazione selezionata anziché per la tua.

+3

Mi hai davvero salvato mal di testa. – izb

+1

Questa è la vera risposta. –

0

Rispondere in ritardo, ma questo può aiutare qualcuno.

Mi sono reso conto che se si dispone di due siti Web nella stessa soluzione, quando si tenta di pubblicare uno di questi la trasformazione potrebbe non funzionare se si dispone di una sola configurazione per entrambi i progetti.

Uno dei miei siti web si è sempre trasformato, ma l'altro a volte lo era ea volte no.

Ad esempio, avevo la configurazione "Auto" nella soluzione e avevo web.Auto.config per entrambi i siti web.

Ho risolto ciò creando una nuova configurazione con un nome diverso - "AutoAdmin" - creando anche il suo file web.AutoAdmin.config per il secondo progetto, e quando l'ho pubblicato di nuovo la trasformazione si è finalmente verificata.

2

Verificare che nelle proprietà del Web.Il file di configurazione Build Action è impostato su Content.

Se l'azione di creazione è impostata su None, non verrà trasformata, anche se è stata copiata nella directory di output.