Asp.net mvc 4 是否可以在捆绑包中包含虚拟资源?

Asp.net mvc 4 是否可以在捆绑包中包含虚拟资源?,asp.net-mvc-4,bundle,Asp.net Mvc 4,Bundle,使用MVC4,我为css文件创建了一个控制器,这样我就可以向它们传递一个模型,并在css中使用razor语法 为了不破坏现有的css文件,这些特殊的css文件在请求它们的路径上不存在 我试图将这些文件包含在一个包中,但它们不会出现在页面输出中 bundles.Add(New StyleBundle("~/Content/site/css").Include("~/Styles/site.css")) 请注意~/Styles/site.css在磁盘上不存在。但是,StylesController

使用MVC4,我为css文件创建了一个控制器,这样我就可以向它们传递一个模型,并在css中使用razor语法

为了不破坏现有的css文件,这些特殊的css文件在请求它们的路径上不存在

我试图将这些文件包含在一个包中,但它们不会出现在页面输出中

bundles.Add(New StyleBundle("~/Content/site/css").Include("~/Styles/site.css"))
请注意~/Styles/site.css在磁盘上不存在。但是,StylesController会正确处理此问题,并在您要求时返回预期内容

我的猜测是绑定器发现磁盘上没有文件,并将该路径从输出中排除。但我不知道如何让它不在乎那件事

关于如何让这些文件更好地与捆绑包配合使用,您有什么想法吗?

试试这样做

bundles.Add(New StyleBundle("~/Content/site/css")
.Include("~/Styles/site.css",new CssRewriteUrlTransform()))

我知道这个问题由来已久,但我遇到了一个障碍,那就是试图在每个页面中包含客户端验证包,而不手动包含每个文件。由于CSSRWriteUrlTransform似乎对我没有任何帮助,我使用了下一个类

public class CustomScriptBundle : ScriptBundle
{
    public CustomScriptBundle(string virtualPath, IBundleOrderer orderer)
        : base(virtualPath)
    {
        Orderer = orderer;
    }
    public CustomScriptBundle(string virtualPath)
        : this(virtualPath, new NonOrderingBundleOrderer())
    {

    }
    public CustomScriptBundle IncludeVirtual(string virtualPath)
    {
        this.Include(new BundleResolver().GetBundleContents(virtualPath).ToArray());
        return this;
    }
}

p、 美国:NonOrderingBundleOrderer是一个不按字母顺序排列包中包含的文件的类

您的虚拟资源是通过VirtualPathProvider实现的吗?不是。它们作为视图访问。请求
/Styles/site.css
将访问
StylesController
站点
操作。此操作将返回
/Views/Styles/site.css.vbhtml
视图。在这种情况下,过期将如何工作,因为捆绑包是自动跟踪的,ASP.NET使用上次修改的日期时间创建哈希来标识唯一的捆绑包版本,并且它有很长的缓存。我没有考虑过期。我不是捆绑专家。您有什么建议吗?捆绑包的过期时间很长,如果您将资源打包到捆绑包中,并且如果您的资源将发生变化,捆绑包仍将发送旧资源。如果您的资源是虚拟的,您可以使用OutputCache轻松地缓存资源,而不需要捆绑包。然而,bundle提供了最小化功能,并将多个文本资源合并为一个,但其主要优点仍然是caching.MVC 4、.NET 4.5似乎没有CSSRWriteUrlTransform类。但谷歌似乎认为这是一个可以解决的问题。谢谢分享。我期待着尝试这个解决方案。