2016-03-30 6 views
1

Ich habe die BundleTranslator in meinem MVC 5 Projekt über NuGet (BundleTransformer.SassAndScss v1.9.96 mit dem Kern und LibSassHost Komponenten) aufgebaut. Als nächstes habe ich das Bündel Bezug auf meine View.cshtml hinzugefügtSass SCSS von BundleTranslator

@Styles.Render("~/Content/sass") 

und neu definiert die BundleConfig.cs:

var nullOrderer = new NullOrderer(); 
var commonStylesBundle = new CustomStyleBundle("~/Content/sass"); 
commonStylesBundle.Include("~/Content/Custom/the-style.scss"); 
commonStylesBundle.Orderer = nullOrderer; 
bundles.Add(commonStylesBundle); 

Nach bauen, hat die Website eine .scss Referenz:

<link href="/Content/Custom/the-style.scss" rel="stylesheet"> 

und alles funktioniert lokal wahrscheinlich nur, weil ich SassAndCoffee packag installiert habe e mit SassyStudio. Das Problem tritt auf, wenn ich auf einem externen IIS-Server bereitstellen. Die Datei existiert im Verzeichnis "Content/Custom", aber die Website ist beschädigt. Der HTML-Code auch die Dateireferenz hat (es verbindet Datei .scss, nicht .css- kompiliert), aber wenn ich versuche, es zu navigieren, erhalte ich Fehler 500.

ich die Sass Datei Build Action geändert haben zu Inhalt (von keine) und links Kopieren in Ausgabeverzeichnis als Kopieren Sie nicht. Ich habe auch httpHandlers zu Web.config hinzugefügt (aber ich weiß eigentlich whichfor), aber immer noch nichts hilft.

<httpHandlers> 
    <add path="*.sass" verb="GET" type="BundleTransformer.SassAndScss.HttpHandlers.SassAndScssAssetHandler, BundleTransformer.SassAndScss" /> 
    <add path="*.scss" verb="GET" type="BundleTransformer.SassAndScss.HttpHandlers.SassAndScssAssetHandler, BundleTransformer.SassAndScss" /> 
</httpHandlers> 

Ich habe nicht alle Einstellungen in Web.config überprüfen wegen der NuGet Installation, die (wie ich sehe), diese Art von Daten für die BundleTransformer zur Verfügung stellt.

Wie konfiguriere ich die BundleTransformer auf IIS korrekt zu arbeiten? Muss ich den BundleResolver als in example code überschreiben?

BundleResolver.Current = new CustomBundleResolver(); 

Antwort

2

Es gibt ein paar Dinge zu versuchen, das Problem zu diagnostizieren. Erstens funktioniert es lokal! :)

1.
Es lohnt sich, zu testen, dass Ihre Bündelung richtig funktioniert. Sie können dies tun, indem Sie vorübergehend Folgendes festlegen (nehmen Sie dies heraus, sobald Sie fertig sind).

public class BundleConfig 
{ 
    public static void RegisterBundles(BundleCollection bundles) 
    { 
     BundleTable.EnableOptimizations = true; 

     // Bundles and stuff... 
    } 
} 

Führen Sie die Website und dann in Ihrem Browser Entwickler-Tools sollten Sie etwas wie diese:

/Bündel/commonStyles v = BzJZwKfP1XV8a6CotGRsHhbxraPDst9zDL2X4r36Y301

Wenn das funktioniert, dann können wir? Sei glücklich Bündelung wird in der Produktion arbeiten.

2.
Berechtigungen. Wenn Sie einen 500 internen Serverfehler erhalten, überprüfen Sie die Berechtigungen für den Ordner, der die scss Dateien enthält. Überprüfen Sie auch, dass sie da sind :)

3.
Mime-Typ. Es kann eine geringe Chance geben, dass IIS einen Mime-Typ benötigt, der für .scss hinzugefügt wurde, aber ich bin nicht davon überzeugt, dass es wird.

+0

Es scheint, dass es der Fehler von Schritt 1 war. Ohne 'BundleTable.EnableOptimizations = true;' es funktioniert einfach nicht. Danke für Ihre Hilfe! :) Ich habe auch etwas Ähnliches entdeckt [Delegate Sass Builder] (https://www.nuget.org/packages/Delegate.SassBuilder), das keine externen Abhängigkeiten/Referenzen benötigt und .ass/scp für .css mit jedem kompiliert Build, aber die CSS-Dateien werden nicht zur Projektstruktur hinzugefügt, daher sind sie nach der Bereitstellung nicht vorhanden (falls verbessert, würde ich diesen Builder dem Bundler vorziehen). Auch wenn EnableOptimizations auf "true" gesetzt wurde, musste jede CSS-Datei im Bundle enthalten sein – mikes