19

ich diese Datei web.config mit der Übersetzungsoption haben wie untenWie debug setzen false für Release-Modus

Web.config

<configuration> 
... 
<system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    ... 
</system.web> 
</configuration> 

Und hier ist das, was für die Freigabe von Visual Studio legt Modus standardmäßig.

Web.Release.config

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
<system.web> 
    <compilation xdt:Transform="RemoveAttributes(debug)" /> 
</system.web> 
</configuration> 

ich dies für MVC4 Projekt verwenden. Basierend auf this tutorial, erwartete ich, dass verkleinerte Versionen von js und css geliefert werden, wenn die Anwendung unter Release-Modus ausgeführt wird. Aber das scheint nicht zu funktionieren und nichtminimierte Versionen von js und css werden bedient. Wenn ich debug in der Datei web.config explizit auf false gesetzt habe, werden die min-Versionen korrekt bedient.

Es scheint wie Kompilation Tag Ausgabe Transformation, wenn die Anwendung unter Release Mode ausgeführt wird, aber ich verstehe nicht, was in Web.Release.config mit derselben falsch ist.

Kurz gesagt, ich bin nicht in der Lage, Bündelung und Minification arbeiten, indem Sie Anwendung unter Release-Modus ausführen.

+0

Ich wette, dies geschieht, weil Ihr App läuft unter einem virtuellen Verzeichnis einer übergeordneten App in IIS und vererbt seine Konfiguration für diese, wenn sie nicht vorhanden ist, weshalb sie es behebt, wenn sie vorhanden ist, überschreiben die Elternkonfiguration! – Bon

Antwort

14

Web.config-Transformationen, wie sie in Web.Release.config definiert sind, werden nur ausgeführt, wenn das Projekt für die entsprechende Konfiguration bereitgestellt/veröffentlicht wird.

Durch einfaches Ändern der aktiven Konfiguration in Visual Studio in Release und Ausführen der Anwendung werden die Transformationen nicht ausgeführt. Daher bleibt die Datei web.config unverändert. Dieses Verhalten ist übrigens sinnvoll, wenn eine Webanwendung aus dem Projektverzeichnis ausgeführt wird, das die ursprüngliche web.config enthält. Wenn Visual Studio das web.consign transformiert, wird Ihre ursprüngliche web.config geändert.

Wenn Sie noch kein Bereitstellungsprofil erstellt haben, können Sie Ihre Anwendung im Dateisystem veröffentlichen, um das Verhalten zu überprüfen. Wählen Sie Freigabe als die Konfiguration, für die die Bereitstellung ausgeführt werden soll. Die Transformationen sollten wie erwartet ausgeführt werden.

+1

Ich kratzte mich seit einiger Zeit am Kopf. Übrigens, wo das Visual Studio Localhost die Site temporär ablaufen lässt. Ich meine aus welchem ​​Verzeichnis. Sagen wir, wenn ich die Website mit Visual Studio debugge, möchte ich prüfen, was in web.config endet. – Jatin

+0

@Nirvan: AFAIK wenn die App von VS ausgeführt wird, wird der Entwicklungsordner verwendet. Aus diesem Grund kann VS die Datei web.config nicht umwandeln, da dies den Startpunkt der Umwandlung ändern würde. – Markus

+0

Oh ja, das hast du in deiner Antwort schon angedeutet. – Jatin

15

Wenn Sie möchten, dass Ihre .NET-Bündelung und minification testen, die Sie bekam in der Datei Global.asax eingerichtet haben, können Sie auch Precompilieren Notation ... zum Beispiel

#if DEBUG 
    BundleTable.EnableOptimizations = false; 
#else 
    BundleTable.EnableOptimizations = true; 
#endif 

Verwendung mit Dies bedeutet, dass Ihre Anwendung die Transformation in der Erstellungsoperation nicht auslösen muss und genau so ausgeführt wird, wie Sie es wünschen.

9

Meine Antwort könnte mit mir das, was spät, aber sein gearbeitet:

<compilation xdt:Transform="RemoveAttributes(debug)" /> 

zu:

<compilation xdt:Transform="Replace" debug="false" targetFramework="4.5" /> 

dies im Grunde der Trick,

ich die Zeile geändert haben wie ich denke, der Optimierer sucht Debug-Wert vorhanden zu sein und == "falsch".

Hoffen, das hilft Menschen, die dies nicht aus Code verwalten möchten.

+1

Nur eine Anmerkung, das Ersetzen wird das gesamte Element entfernen. Als ich das verwendete, wurde meine Liste der enthaltenen Assemblies entfernt und ich bekam den folgenden Fehler. Der Typ 'System.Object' ist in einer Assembly definiert, auf die nicht verwiesen wird. Sie müssen der Assembly 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' einen Verweis hinzufügen. – leemicw

1

Möglicherweise eine Verbesserung Omar.Alani Antwort:

In der Release-Transformation, ersetzen Sie die Zeile:

<compilation xdt:Transform="RemoveAttributes(debug)" /> 

mit den folgenden:

<compilation debug="false" xdt:Transform="SetAttributes" />