Le regroupement ne travaillant pas dans MVC5 quand je me tourne sur le mode de libération
J'ai le texte suivant bundle configuré dans BundleConfig.cs:
bundles.Add(new StyleBundle("~/bundles/css").Include(
"~/assets/bootstrap/css/bootstrap.css",
"~/assets/css/global/all.css"));
et je de référence en utilisant les suivantes:
@Styles.Render("~/bundles/css")
Quand je suis en mode debug (web.config compilation debug="true"
), il fonctionne comme prévu en ce qu'elle rend à la fois des fichiers css comme normale, c'est à dire:
<link href="/assets/bootstrap/css/bootstrap.css" rel="stylesheet"/>
<link href="/assets/css/global/all.css" rel="stylesheet"/>
Cependant lorsque j'ai mis debug="false"
ci-dessus comportement se produit toujours en qui il reconnaît les fichiers, mais il est juste de rendre à la normale.
Pour confirmer le groupement peut certainement le travail que j'ai permis à des optimisations dans BundleConfig ie BundleTable.EnableOptimizations = true;
Chaque fois que je fais ci-dessus, il regroupe les css et s'affiche comme prévu c'est à dire:
<link href="/bundles/css?v=WBKHkZAJly7jUzHrVDT8SwfaQE-CA9dbOUQUlLKadNE1" rel="stylesheet"/>
EDIT:
Quelques personnes ont mentionné qu'en ajoutant le code suivant à mon BundleConfig.cs fichier de réaliser ce que je suis après:
#if DEBUG
BundleTable.EnableOptimizations = false;
#else
BundleTable.EnableOptimizations = true;
#endif
Je comprends et j'apprécie cette réponse, mais d'après la documentation, le comportement par défaut de la MVC regroupement est de regrouper en mode release, mais pas en mode debug. Je ne vois pas pourquoi j'en aurais besoin d'ajouter un code supplémentaire pour le faire le faire quand il faut le faire déjà.
EDIT 2
J'ai une confession à faire. Il s'avère que j'avais sur le web.config dans le dossier Vues ouvert et pas web principal.config. J'ai changé le réglage du web principal.config et cela fonctionne bien pour moi. Je blâme ReSharper
- Êtes-vous de la compilation avec
RELEASE
ouDEBUG
? - J'ai essayé avec les deux, j'ai aussi supprimé tous les déboguer les fichiers binaires et de relever un live d'extrémité à mon projet à l'aide de mon fichier hosts
- n'est-ce pas un double de cette question stackoverflow.com/questions/15155344 ?
- double possible de l'Exécution d'une ASP.NET MVC 4 app en mode release n'a pas de bundle et minifiy les fichiers js
- non, ce n'est pas le cas, je ne suis pas en utilisant transforme via le web.la libération.config ou web.cdebug.config
- Réglage manuel de la
<compilation debug="true" targetFramework="4.5.1" />
à<compilation debug="false" targetFramework="4.5.1" />
. Peut-être cela peut être une solution de contournement. - merci, voir mon dernier edit
Vous devez vous connecter pour publier un commentaire.
C'est le comportement par défaut.
http://www.asp.net/mvc/overview/performance/bundling-and-minification
web.config
à<compilation debug="false">
et dansBundleConfig.cs
ajoutéBundleTable.EnableOptimizations = true;
La façon que je reçois, c'est à la force dans le
BundleConfig
à faire exactement ce que je veux faire. Je ne pense pas que MVC4 avait les mêmes options avec le fichier de config (ou je n'ai jamais eu à travailler).C'est donc ce que j'ai à la fin de mon RegisterBundles méthode:
Cette façon, il est toujours là, de la plaine à voir. Cependant, vous ne devez pas oublier de mettre ce qu'il y à quand vous êtes le démarrage du projet, mais ce n'est pas une affaire énorme.
Si vous n'êtes pas familier avec ces, la
#if DEBUG
est un les directives de préprocesseur que dit le CLR de faire ce qui est dans ce bloc lorsque la version DEBUG paramètre est présent (elle ne doit être présente dans le mode de DÉBOGAGE, mais qui peut être modifié dans les Propriétés du Projet). Si cette variable n'est pas présente (mode de diffusion, ou tout autre mode), puis il va faire l'autre bloc.La Version par défaut du Web.config transformer supprime l'attribut de débogage comme suit:
Toutefois, cela n'entraîne pas l'attendre regroupement comportement de se produire. Au lieu de cela, vous devez créer une transformation qui, littéralement, définit l'attribut de débogage pour "faux", comme suit:
Un autre problème possible est que l'intérieur de votre
Global.asax.cs
fichier dans leApplication_Start()
méthode, vous êtes absent à l'appel de votreBundleConfig
.Par exemple, en supposant que votre méthode est d'utiliser le nom par défaut
RegisterBundles(BundleCollection bundles)
puis à l'intérieur de votreGlobal.asax.cs
fichier, vous pouvez ajouterBundleConfig.RegisterBundles(BundleTable.Bundles);
dans leApplication_Start()
méthode.De sorte que votre
Global.asax.cs
fichier devrait ressembler à quelque chose comme ceci:J'ai eu ce problème quand j'ai changé le répertoire css. Mon problème est que j'ai changé le BundleConfig de fichier pour les fichiers css:
BundleConfig.cs:
Vues inclus:
Pour une raison quelconque, cela n'a pas fonctionné. "séries" semble être un mot-clé ou quelque chose (pas sûr). Vous devez à gauche de cette façon:
Vues:
Je n'ai pas besoin de modifier 'BundleTable.EnableOptimizations", ni le web.config ni rien d'autre.
Espère que cela aide quelqu'un.
Après la lutte contre ce problème pendant plusieurs heures, je recommande que vous essayez ceci:
Ajouter ceci au tout début de l'affichage que vous utilisez votre bundle:
@{
BundleTable.EnableOptimizations = true;
}
Réinitialiser IIS
Dans mon cas, quelque part dans ma solution a été de changer "BundleTable.EnableOptimizations" de true à false. Quand j'ai de la force que de la VRAIE droite avant le bundle est utilisé, j'ai eu ce travail.
Après j'ai remarqué qu'il fonctionne, j'ai déménagé dans une méthode statique à mon BundleConfig classe:
Si je peux l'appeler à partir de la vue et de l'avoir rapetisser désactivé pour les développeurs
résoudre mon problème.
debug=true
manquait dans ma configuration web lors de la publication.