ASP.NET Bundling / Minification и встроенные ресурсы

Я пытаюсь использовать технику, описанную вэтот блог добавить встроенные ресурсы DLL в мои пакеты.

Я создал кастомVirtualPathProvider ниже.

public class EmbeddedVirtualPathProvider : VirtualPathProvider {

    private Type _rootType;

    public EmbeddedVirtualPathProvider(Type rootType) {
        _rootType = rootType;
    }

    public override bool FileExists(string virtualPath) {
        if (IsEmbeddedPath(virtualPath))
            return true;
        else
            return Previous.FileExists(virtualPath);
    }

    public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart) {
        if (IsEmbeddedPath(virtualPath)) {
            return null;
        }
        else {
            return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
        }
    }

    public override VirtualDirectory GetDirectory(string virtualDir) {
        return Previous.GetDirectory(virtualDir);
    }

    public override bool DirectoryExists(string virtualDir) {
        return Previous.DirectoryExists(virtualDir);
    }

    public override VirtualFile GetFile(string virtualPath) {
        if (IsEmbeddedPath(virtualPath)) {
            string fileNameWithExtension = virtualPath.Substring(virtualPath.LastIndexOf("/") + 1);

            string nameSpace = _rootType.Namespace;
            string manifestResourceName = String.Format("{0}.{1}", nameSpace, fileNameWithExtension);
            var stream = _rootType.Assembly.GetManifestResourceStream(manifestResourceName);
            return new EmbeddedVirtualFile(virtualPath, stream);
        }
        else
            return Previous.GetFile(virtualPath);
    }

    private bool IsEmbeddedPath(string path) {
        return path.Contains("~/Embedded");
    }
}

public class EmbeddedVirtualFile : VirtualFile {
    private Stream _stream;
    public EmbeddedVirtualFile(string virtualPath, Stream stream)
        : base(virtualPath) {
        _stream = stream;
    }

    public override Stream Open() {
        return _stream;
    }
} 

Я тогда регистрирую это и устанавливаю связки;

public static void RegisterBundles(BundleCollection bundles) {

    HostingEnvironment.RegisterVirtualPathProvider(new EmbeddedVirtualPathProvider(typeof(My.Custom.Type)));

    bundles.Add(new StyleBundle("~/Embedded/css").Include(
        "~/Embedded/files/styles/etc/styles.css")
    );
}

Я также реализовал кастомEmbeddedResourceHttpHandler как описано в статье, которая работает при запросе файла в качестве прямого http-запроса.

Проблема: Встроенные файлы не включены в комплект,они просто игнорируются, При отладкеFileExists метод вызывается несколько раз, но никогда ~/Embedded/files/styles/etc/styles.css

Что мне не хватает?

Вторичная проблема

При использовании последней версии Microsoft ASP.NET Web Optimization Framework.VirtualPathProvider работает как положено, однако предотвращаетIRouteHandler от выполнения. ЕслиFileExists метод изменяется так, чтобы он возвращал значение false, что позволяет выполнять RouteHandler, но, очевидно, нарушаетVirtualPathProvider.

Я предполагаю, что он не использует настроенный маршрут, потому что он ищет физический файл, когдаFileExists возвращает истину? Это проблема конфигурации или реализации?

Ответы на вопрос(1)

Ваш ответ на вопрос