Pourquoi est-MVC4 @Styles.Render() ne marche pas comme prévu en mode debug

Je suis en œuvre le regroupement et la minification du soutien dans MVC4 et de la configurer de sorte qu'il peut compiler mon fichier d'Amorçage .moins de fichiers automatiquement pour moi. J'ai le code suivant dans mon BundleConfig.cs fichier

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        //base bundles that come with MVC 4

        var bootstrapBundle = new Bundle("~/bundles/bootstrap").Include("~/Content/less/bootstrap.less");
        bootstrapBundle.Transforms.Add(new TwitterBootstrapLessTransform());
        bootstrapBundle.Transforms.Add(new CssMinify());
        bundles.Add(bootstrapBundle);
    }
}

La TwitterBootsrapLessTransform est comme suit (c'est plus compliqué que je ne le voudrais à cause de la nécessité d'importer de la sous .moins de fichiers en sans point)

public class TwitterBootstrapLessTransform : IBundleTransform
{
public static string BundlePath { get; private set; }
public void Process(BundleContext context, BundleResponse response)
{
setBasePath(context);
var config = new DotlessConfiguration(DotlessConfiguration.GetDefault());
config.LessSource = typeof(TwitterBootstrapLessMinifyBundleFileReader);
response.Content = Less.Parse(response.Content, config);
response.ContentType = "text/css";
}
private void setBasePath(BundleContext context)
{
BundlePath = context.HttpContext.Server.MapPath("~/Content/less" + "/imports" + "/");
}
}
public class TwitterBootstrapLessMinifyBundleFileReader : IFileReader
{
public IPathResolver PathResolver { get; set; }
private string basePath;
public TwitterBootstrapLessMinifyBundleFileReader(): this(new RelativePathResolver())
{
}
public TwitterBootstrapLessMinifyBundleFileReader(IPathResolver pathResolver)
{
PathResolver = pathResolver;
basePath = TwitterBootstrapLessTransform.BundlePath;
}
public bool DoesFileExist(string fileName)
{
fileName = PathResolver.GetFullPath(basePath + fileName);
return File.Exists(fileName);
}
public byte[] GetBinaryFileContents(string fileName)
{
throw new System.NotImplementedException();
}
public string GetFileContents(string fileName)
{
fileName = PathResolver.GetFullPath(basePath + fileName);
return File.ReadAllText(fileName);
}
}

Sur ma base _Layout.cshtml page, j'ai essayé de rendre les fichiers css en faisant cela,

@Styles.Render("~/bundles/bootstrap");

que ce qui est suggéré par le mvc tutoriel mais le fichier, le navigateur client finit par demander est

http://localhost:53729/Content/less/bootstrap.less

ce qui provoque une erreur. Si j'ai mis le lien suivant dans la base de mise en page qu'il fonctionne comme prévu.

<link href="~/bundles/bootstrap" rel="stylesheet" type="text/css" />

Pourquoi n'est-ce pas @Styles.Render() de se comporter de la même manière en mode debug? Il fonctionne en mode release. Je peux comprendre ce que vous ne voulez pas qu'il le regroupement et les minifying en debug mais comment puis-je la force de ce groupe de travail de la même façon toujours?

  • J'ai trouvé ce bout de code très utile. Vous devriez envisager de faire un billet de blog à propos de la manière dont vous avez Twitter Bootstrap et sans point de travailler ensemble.
  • Merci, peut-être que lorsque j'arrive à prendre plus de temps pour moi, je vais commencer à bloguer.
  • De l'intérêt voyez-vous les types d'erreur suivants dans le css de sortie: Minification a échoué. De retour unminified contenu. (1381,2): erreur d'exécution CSS1019: Unexpected token, trouvé '{'...
  • J'ai eu un problème avec le kendo min fichier css. Le greasemonkey minifier semble être un peu sensible.
InformationsquelleAutor PlTaylor | 2012-06-25