2013-09-22 22 views
12

Ich habe Probleme mit der Bündelung meiner Stylesheets nach der Bereitstellung in IIS. Ich habe eine einfache Lösung erstellt, um mein Problem zu demonstrieren.Stilbündelung funktioniert nach IIS-Bereitstellung nicht (MVC 4)

Ich habe ein einfaches Testprojekt (VS 2012, MVC 4) mit einem einzigen Controller und einer Ansicht erstellt, die einen "Hello World" String enthält.

Ich habe einen (Test) CSS unter dem Inhaltsordner mit einfacher einfacher Farbe erstellt

Content\helloWorldCss\helloWorldStyle.css 

Dann ändern, ich habe meine BundleConfig.cs Klasse bearbeitet und hinzugefügt, um den Weg zu meinem CSS als ein neues Bündel:

0:

  bundles.Add(new StyleBundle("~/Content/helloWorldCss").Include("~/Content/helloWorldCss/helloWorldStyle.css")); 

Dann habe ich das neue Bündel zu meinem der _Layout.cshtml hinzugefügt

Wenn ich meine Anwendung über VS (oder Seiteninspektor) ausführen, wird mein CSS erfolgreich angewendet und alles scheint in Ordnung zu sein. Wie auch immer, Wenn ich mein Projekt in IIS (über VS) veröffentliche/stelle, kann ich meinen HTML-Code anzeigen, aber mein CSS wird nicht angewendet. Die folgende Datei existiert nach dem Einsatz:

Content\helloWorldCss\helloWorldStyle.css 

Was mir wirklich ein Rätsel ist, dass, wenn ich meine _Layout.cshtml ändern und einen „regulären“ ref auf den gleichen CSS hinzufügen, anstatt das Bündel ref zu verwenden, die CSS angewandt wird nach der Veröffentlichung ohne Probleme.

<link href="@Url.Content("~/Content/helloWorldCss/helloWorldStyle.css")" rel="stylesheet" type="text/css" />* 

Ich werde jede Hilfe und Beratung zu diesem Thema zu schätzen wissen.

Antwort

12

Ich denke, Sie haben hier einen Namen Kollision. ASP.NET MVC erstellt nach der Verkleinerung eine Datei unter http://example.org/Content/helloWorldCss und Sie haben bereits einen Ordner mit demselben Pfad. Können Sie es nach dem Umbenennen Ihres Pakets erneut versuchen?

BundleConfig.cs:

bundles.Add(new StyleBundle("~/Content/helloWorld").Include("~/Content/helloWorldCss/helloWorldStyle.css")); 

_Layout.cshtml:

@Styles.Render("~/Content/helloWorld") 
+0

Sie haben Recht. Das war in der Tat das Problem. Vielen Dank! – Omri

+0

Das '~' Zeichen hier ist die Hauptquelle der Verwirrung. Das Zeichen wird benötigt, um das Bündel zu definieren. Das hat mich glauben lassen, dass es der Ordnerpfad sein muss, der NICHT sein darf. :) Vielen Dank!! Half mir. – mrsrizan

6

Dies ist, was ich tue. IIS Config> Authentication> RightClickOn Anonym Auth> Klicken Sie auf Bearbeiten> Überprüfen Anwendungspoolidentität

IIS Config>Authentication>RightClickOn Anonymous Auth>Click Edit> Check Application pool identity

+0

Dies war die einfachste Lösung und beste Antwort. Vielen Dank! –

+0

Großartig! Warum ist das nicht standardmäßig so eingestellt? Sie sollten immer IIS-Anwendungspools für die Sicherheit verwenden. Danke!! –

0

Wenn Sie VS auf einen Testserver veröffentlichen, verwendet es DefaultAppPool. Für das Styling und SimpleMembership arbeiten Sie brauchen:

  1. ASP.NET 4.0 installieren auf Ihrem Server. cmd - cd C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Typ aspnet_regiis.exe -ir

  2. einen ASP.NET 4.0 app-Pool in IIS hinzufügen.

  3. Legen Sie fest, dass Ihre Website ASP.NET 4.0 als App-Pool verwendet.

  4. Fügen Sie eine ASP.NET 4.0-Sicherheitsanmeldung in SQL Server hinzu und geben Sie ihr die Rolle dbcreate.

Verwandte Themen