2010-04-14 8 views
8

Ich bin mit MVC 2.0 auf VS2010 rum und habe ein Problem mit der sauberen Web-Config-Funktion arbeiten.VS2010 Clean Web.configs - nicht aktualisieren

Grundsätzlich in meinem Web.debug.config Ich habe

<connectionStrings xdt:Transform="Replace"> 
    <add name="ApplicationServices" 
    connectionString="Server=localhost;Database=SITE_DB;User ID=dbuser;[email protected];Trusted_Connection=False;" /> 
</connectionStrings> 

and in my `Web.config` I have 

     <connectionStrings> 
     <add name="ApplicationServices" 
      connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" 
      providerName="System.Data.SqlClient" /> 
     </connectionStrings> 

Wenn ich die Seite im Debug-Modus laufen, würde ich das xdt erwarten: Transform = „Ersetzen“ würde den gesamten Abschnitt connection mit ersetzen, was im Web ist .debug.config.

Bin ich falsch angenommen? Oder mache ich etwas anderes falsch. Es gibt nicht viele Infos, die hier gepostet werden und ich würde denken, dass ich euch fragen würde.

Antwort

0

Ich glaube, Sie müssen setzen xdt: Locator = "Match (Name)" in

<connectionStrings xdt:Transform="Replace" xdt:Locator="Match(name)"> 
    <add name="ApplicationServices" 
     connectionString="Server=localhost;Database=SITE_DB; 
     User ID=dbuser;[email protected];Trusted_Connection=False;" 
    /> 
</connectionStrings> 
+0

, was passiert, wenn er will, das Everthing in connection Elemente ersetzen? Im Moment würde das Match (Name) nicht funktionieren, oder? weil es versucht, nach einem _attribute_ auf dem connectionStrings_element_ namens "name" zu suchen .. welches nicht existiert. Dieses Attribut existiert in den _child_ elements. ??? (denke nur a-laut, hier ...) –

+0

Pure.Krome ist korrekt. Sie müssen entweder die Locator-Transformation entfernen oder beide Transformationen anstelle des connectionStrings XNode in den add-XNode verschieben. –

11

Die .config-Transformationen nur auftreten, wenn Sie die Anwendung in irgendeiner Weise veröffentlichen oder bereitstellen. Wenn Sie gerade debuggen, passieren die Transformationen nicht.

Das klingt verrückt, aber es ist gerade aus dem Mund eines MS-rep: http://forums.asp.net/p/1532038/3711423.aspx

+1

Dieses verrückte Verhalten kostete mich heute ziemlich viel Zeit :(Danke für die Hinweise auf die Erklärung! – Daan

+1

Was ist der Sinn daran, eine Web.Debug.config zu haben, wenn sie nie benutzt wird? Sie ist nur dazu da, Leute zu verwirren? –

1

Sie dieses Verhalten aktivieren können, aber Sie werden eine „Vorlage“ Datei vornehmen müssen Ihr speichern Pre-Transformation Zustand in eine Datei, die nicht den Namen Web.config trägt, andernfalls würden Sie Ihre Vorlage einfach mit Ihren transformierten Änderungen überschreiben. Sie müssen Ihrer Projektdatei auch eine Transformationsaufgabe hinzufügen, damit sie beim Debuggen ausgeführt werden kann.

<PropertyGroup> 
    <BuildDependsOn> 
     CustomWebConfigTransform; 
     $(BuildDependsOn); 
    </BuildDependsOn> 
</PropertyGroup> 
<Target Name="CustomWebConfigTransform"> 
    <TransformXml source="Web.template.config" 
     transform="Web.$(Configuration).config" 
     destination="Web.config" /> 
</Target> 

Das obige Beispiel vorausgesetzt, dass Sie eine Vorlage web.config Datei mit dem Namen Web.template.config haben und die Transformation anwenden und eine Web.config-Datei erstellen, wenn Sie das Projekt ausführen.

Referenz: http://www.kongsli.net/nblog/2012/01/13/enabling-web-transforms-when-debugging-asp-net-apps/