5

Sto cercando di ottenere le trasformazioni di web.config che funzionano come descritto here. Abbiamo utilizzato questo metodo su altri progetti e funziona senza problemi, ma non su questo nuovo progetto.web.config transform da web.template.xml non funziona

Ecco che cosa ho provato il test senza successo

  • Cambiare il nome del file wpp.targets nel caso in cui ho ottenuto il nome del progetto sbagliata. So che quello che sto usando funziona perché è l'unico che fa sì che web.config venga ricostruito da web.template.xml questa trasformazione funzioni. Solo i modelli secondari non funzionano.
  • provato con xdt: Locator = "Match (nome)"
  • provato .config estensione vs .xml, i nostri altri progetti in cui questo funziona uso .xml
  • direttore di configurazione è impostato per utilizzare la configurazione "Test" per il progetto su cui sto lavorando.
  • web.template.Test.xml è xdt: Transform = "Sostituisci" per la sezione voglio sostituire
  • web.template.xml ha il segnaposto
  • provato a rimuovere la sezione "CopyWebTemplateConfig" da wpp.targets come suggerito nella domanda dello stack collegata di seguito. Gli altri nostri progetti hanno questa sezione e la sezione "PropertyGroup" commentata e ho provato entrambe le combinazioni.

Ho letto il collegamento sopra più volte e questo stack correlato question, ma non riesco a vedere qual è il problema.

Nota La trasformazione di pubblicazione funziona in un modo. Crea un file web.template.xml che contiene i valori di web.template.Test.xml, ma non crea un web.config.xml come indicato da wpp.targets. Quindi questo è più un problema nel far sì che la trasformazione della build funzioni.

Qualcuno ha un'idea di cosa manca?

wpp.targets

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <!-- Make sure web.config will be there even for package/publish --> 
    <Target Name="CopyWebTemplateConfig" BeforeTargets="Build"> 
    <Copy SourceFiles="web.template.xml" 
      DestinationFiles="web.config"/> 
    </Target> 

    <PropertyGroup> 
    <PrepareForRunDependsOn> 
     $(PrepareForRunDependsOn); 
     UpdateWebConfigBeforeRun; 
    </PrepareForRunDependsOn> 
    </PropertyGroup> 

    <!-- This target will run right before you run your app in Visual Studio --> 
    <Target Name="UpdateWebConfigBeforeRun"> 
    <Message Text="Configuration: $(Configuration): Web.template.$(Configuration).xml"/> 
    <TransformXml Source="web.template.xml" 
       Transform="web.template.$(Configuration).xml" 
       Destination="web.config" /> 
    </Target> 

    <!-- Exclude the config template files from the created package --> 
    <Target Name="ExcludeCustomConfigTransformFiles" BeforeTargets="ExcludeFilesFromPackage"> 
    <ItemGroup> 
     <ExcludeFromPackageFiles Include="web.template.xml;web.template.*.xml"/> 
    </ItemGroup> 
    <Message Text="ExcludeFromPackageFiles: @(ExcludeFromPackageFiles)" Importance="high"/> 
    </Target> 
</Project> 

web.template.xml

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=152368 
    --> 
<configuration> 
    <configSections>   
    <sectionGroup name="TestSettings"></sectionGroup> 
    .... 
    </configSections> 
    .... 
    <TestSettings> 
    </TestSettings> 
    .... 
</configuration> 

web.template.Test.xml

<?xml version="1.0"?> 
<!-- For more information on using transformations 
    see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. --> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <TestSettings xdt:Transform="Replace"> 
    ... 
    </TestSettings> 
</configuration> 

uscita MSBuild

Target "UpdateWebConfigBeforeRun: (TargetId:143)" in file "C:\...\Project.wpp.targets" from project "C:\...\Project.csproj" (target "PrepareForRun" depends on it): 
Task "Message" (TaskId:93) 
    Configuration: Test: Web.template.Test.xml (TaskId:93) 
Done executing task "Message". (TaskId:93) 
Task "TransformXml" (TaskId:94) 
    Transforming Source File: Web.template.xml (TaskId:94) 
    Applying Transform File: Web.template.Test.xml (TaskId:94) 
    Executing Replace (transform line 5, 18) (TaskId:94) 
     on /configuration/TestSettings (TaskId:94) 
     Applying to 'TestSettings' element (source line 121, 4) (TaskId:94) 
     Replaced 'TestSettings' element (TaskId:94) 
    Done executing Replace (TaskId:94) 
    Output File: web.config (TaskId:94) 
    Transformation succeeded (TaskId:94) 
Done executing task "TransformXml". (TaskId:94) 
Done building target "UpdateWebConfigBeforeRun" in project "Project.csproj".: (TargetId:143) 
+0

Potete inviarmi un progetto di esempio che non funziona? La mia email è sayedha [at] {MicrosoftDOTcom}. –

risposta

1

Ho una soluzione al mio problema, ma non so quale sia la causa, quindi non sono sicuro se questo lo risolve in altri casi

Ho rivisto l'output della diagnostica MSBuild e ho notato che verso la fine c'era un'altra sezione che copiava web.template in web.config. Nota che questo è dopo l'UpdateW La destinazione ebConfigBeforeRun era già in esecuzione e ha reso gli aggiornamenti dal modello di trasformazione del sottoprotettore a web.config. Sembrava che questo ultimo passo stava sovrascrivendo il web.config con la trasformazione che volevo.

Non sapevo da dove provenisse l'ultimo set di istruzioni di copia, quindi ho cercato tutti i file sul mio PC alla ricerca di altri file wpp.target. Ne ho trovato un altro nella cartella delle estensioni di Slow Cheetah e ho visto alcune sezioni in alto che stavano impostando una proprietà "transformOnBuild" su false.

Pensando che ci fosse un conflitto con SlowCheetah, l'ho disinstallato e le trasformazioni hanno iniziato a funzionare come previsto. Questo era ancora un po 'strano dato che le altre soluzioni funzionavano con SlowCheetah abilitato. Per un capriccio ho reinstallato SlowCheetah e la trasformazione ha continuato a funzionare come previsto.

Quindi la mia soluzione è stata una reinstallazione di SlowCheetah. Sono ancora confuso su quale sia la causa di questo problema, quindi se qualcun altro ha posto una risposta a questo, darò loro la generosità.

0

Ho avuto un problema simile la settimana scorsa. Si scopre che ogni volta che si aggiunge un progetto a una soluzione in VS 2010, la corretta configurazione del progetto non viene applicata in ogni momento. Quindi pensi di avere una configurazione attiva ma un'altra è effettivamente attiva su quel progetto, quindi la trasformazione che ti aspetti non viene applicata.

controllare i passaggi in ultimo commento di questo numero: Custom solution configuration not showing up in Visual Studio 2010

+0

Tuttavia, un nuovo progetto non è stato aggiunto alla soluzione. Quando ho detto che la trasformazione ha funzionato su altri progetti, intendevo altre soluzioni o altri sistemi che abbiamo costruito. Ho provato i passaggi delineati in quella risposta, ma non ha risolto il problema. – Jerry

0

"So quello attuale che sto usando opere dal momento che è l'unico che provoca web.config da ricostruire da web.template.xml questa trasformazione funziona. Solo i modelli sub non funzionano."

Fa questa media, trasformazione opere ma TestSettings sezione da solo non ottiene trasformato?

Puoi condividere costruire uscita con msbuild con verbosità impostato diagnostico/dettagliato?

+0

Ciò è corretto, trasforma le opere ma la sezione TestSettings non viene trasformata dai sub template. Come abilitare la verbosità sulla compilazione? – Jerry

+0

Ok trovato come abilitare la verbosità diagnostica, ma non credo che potrei condividere l'output pubblicamente. C'è qualche sezione che dovrei guardare in particolare? In VS 2010 Opzioni => Progetti e soluzioni => Build and Run => dropdown per la verbosità dell'output di build del progetto MSBuild. – Jerry

+0

Ho trovato proprietà web.template.xml in quell'output che mostrava "TransformOnBuild" impostato su true, ma tutti gli altri file lo hanno mostrato come falso. – Jerry

3

Avevo installato StyleCop e che stava facendo la sovrascrittura per me.

Così ho disinstallato e il problema è stato risolto.

Divertente è che ho reinstallato il StyleCop e la trasformazione era ancora funzionante!

Anche in alcuni punti ho notato che dovrei rimuovere anche la sezione target CopyWebTemplateConfig.

+1

Suoni molto simili allo scenario che ho delineato, basta sostituire StyleCop con SlowCheetah. – Jerry

+1

Sì. La buona notizia è che stanno prendendo in considerazione il supporto per il web su F5 a SlowCheetah. https://github.com/sayedihashimi/slow-cheetah/issues/39 Si prega di votare a tutti! – user1858286