ASP.NET Optimisation - Groupement
J'ai essayé la nouvelle minification et le groupement de fonctionnalité ASP.NET MVC 4, et il fonctionne très bien aussi longtemps que vous utilisez le dossier par défaut de conventions pour les fichiers css et js.
/Content
/Scripts
J'ai l'habitude de mettre les css et les scripts dans un dossier appelé Statique comme ce
/Static/Css
/Static/Js
J'ai essayé d'enregistrer mon propre faisceaux comme ceci:
public static class BundleCollectionExtensions
{
public static void RegisterScriptsAndCss(this BundleCollection bundles)
{
var bootstrapCss = new Bundle("~/Static/Css", new CssMinify());
bootstrapCss.AddDirectory("~/Static/Css", "*.css");
bootstrapCss.AddFile("~/Static/Css/MvcValidation.css");
bootstrapCss.AddFile("~/Static/Css/bootstrap-responsive.min.css");
bootstrapCss.AddFile("~/Static/Css/bootstrap.min.css");
bundles.Add(bootstrapCss);
var bootstrapJs = new Bundle("~/Static/Js", new JsMinify());
bootstrapJs.AddDirectory("~/Static/Js", "*.js");
bootstrapJs.AddFile("~/Static/Js/jquery-1.7.1.min.js");
bootstrapJs.AddFile("~/Static/Js/jquery.validate.min.js");
bootstrapJs.AddFile("~/Static/Js/jquery.validate.unobtrusive.min.js");
bootstrapJs.AddFile("~/Static/Js/bootstrap.min.js");
bootstrapJs.AddFile("~/Static/Js/gunsforhire.js");
bundles.Add(bootstrapJs);
}
}
Et dans
Global.ascx.cs
Je l'ai fait:
BundleTable.Bundles.RegisterScriptsAndCss();
Générés balisage ressemble à ceci:
<link href="/Static/Css?v=D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41" rel="stylesheet" type="text/css" />
<script src="/Static/Js?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1" type="text/javascript"></script>
Toutefois, Il ne fonctionne pas, la requête ressemble à ceci:
Request URL:http://localhost:49603/Static/Js?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1
Request Method:GET
Status Code:301 Moved Permanently (from cache)
Query String Parametersview URL encoded
v:mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1
Request URL:http://localhost:49603/Static/Js/?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1
Request Method:GET
Status Code:404 Not Found
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Host:localhost:49603
Referer:http://localhost:49603/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11
Query String Parametersview URL encoded
v:mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1
Response Headersview source
Cache-Control:private
Content-Length:4757
Content-Type:text/html; charset=utf-8
Date:Thu, 01 Mar 2012 19:05:44 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:ASP.NET
X-SourceFiles:=?UTF-8?B? QzpcQENvZGVccGVsbGVccGVsbGVoZW5yaWtzc29uLnNlXHNyY1xXZWJcU3RhdGljXEpzXA==?=
Ce que je fais mal?
Mise à jour
Je pense que j'ai enfin réussi à résoudre ce problème en procédant comme suit:
- Retrait de la AddDirectory appels
bootstrapCss.AddDirectory("~/Static/Css", "*.css");
- Donner les faisceaux des chemins qui ne reflètent pas la vraie structure de répertoire
Qu'entendez-vous par le n ° 2 "de Donner les faisceaux des chemins qui ne reflètent pas la vraie structure de répertoire"?
Si vous avez une structure de répertoire /scripts/app vous ne devriez pas utiliser ce chemin d'accès dans le bundle ("~/scripts/app"). Ou, au moins, j'ai eu quelques problèmes à faire que dans le mvc 4 rc. Peut-être que ce n'est plus un problème.
Salut, avez-vous une idée d'espace de noms qui me manque ? je ne suis pas arriver Addfile ou AddDirectory dans bootstrapcss. ?
Si vous avez une structure de répertoire /scripts/app vous ne devriez pas utiliser ce chemin d'accès dans le bundle ("~/scripts/app"). Ou, au moins, j'ai eu quelques problèmes à faire que dans le mvc 4 rc. Peut-être que ce n'est plus un problème.
Salut, avez-vous une idée d'espace de noms qui me manque ? je ne suis pas arriver Addfile ou AddDirectory dans bootstrapcss. ?
OriginalL'auteur Pelle | 2012-03-01
Vous devez vous connecter pour publier un commentaire.
Ce que vous faites "mal", c'est que votre bundle chemin correspond à une VÉRITABLE chemin. Si je comprends bien, lorsque la demande d' "/Static/Css?v=D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41", le routage moteur de recherche d'abord un chemin d'accès physique. Il trouve une correspondance avec votre dossier "statique" et il essaie de trouver un fichier qui correspond à "Css?v=D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41". Quand il ne peut pas en trouver un, car il n'existe pas, il donne une erreur 404. (J'ai aussi vu un accès refusé.) Lorsque le moteur de routage ne peut pas trouver un fichier physique chemin, il ressemble alors à d'autres gestionnaires comme le regroupement et la minification pour servir la demande.
De toute façon je pense que vous avez compris de vos commentaires mais je ne suis pas sûr que cela soit très clair pour quelqu'un qui trouve votre question. Simplement modifier votre inscription à partir de:
:
Si vous faites ce changement, votre problème va disparaître, (certes il n'y a pas de chemin physique qui correspond à des "paquets".
OriginalL'auteur Robb Vandaveer
si fait cela il y a quelques jours et ça a bien fonctionné. j'ai créé un dossier nommé
Helper
et puis j'ai créé une nouvelle classe appeléeCssJsBuilder
.ma classe ressemble à ceci:
Après. Aller à
Global.asax
:BundleTable.Bundles.RegisterTemplateBundles()
CssJsBuilder.Initializing()
à laApplication_Start()
Méthode.Espérons que cela fonctionne pour vous, trop.
OriginalL'auteur varg
Mondiale.asax.cs remplacer
avec
OriginalL'auteur Todd Smith