首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自VirtualPathProvider的神秘错误消息

来自VirtualPathProvider的神秘错误消息
EN

Stack Overflow用户
提问于 2014-02-17 13:21:44
回答 1查看 300关注 0票数 2

我有几个ASCX文件分散在ASP.NET遗留项目中。我想要显示我的ascx文件,它有不同的标记,但仍然引用旧的代码隐藏类型。

现在我收到了一个讨厌的错误消息:

代码语言:javascript
复制
Line 10: <%@ Register src="~/CMS/Header.ascx" tagname="Header" tagprefix="uc2" %>  Line 11: <div id="Content" runat="server"> class="widget">


The VirtualPathProvider returned a VirtualFile object with VirtualPath set to '/MyLib/BootstrapHeader.ascx' instead of the expected '/CMS/Header.ascx'.

此错误的原因可能是什么?我的Open方法也没有被调用。怎么回事。

代码语言:javascript
复制
  public class CMSContentVirtualPathProvider : VirtualPathProvider
{

    private const string CMSContentPath = "CMS/";
    private const string CMSControlFolderName = "MyLib/";
    private const string CMSPageFolderName = "Pages/";
    private const string CMSMasterPagesFolderName = "Master/";

    private const string CMSPrefix = "Bootstrap";

    public static void AppInitialize()
    {
        HostingEnvironment.RegisterVirtualPathProvider(new CMSContentVirtualPathProvider());
    }

    public override VirtualFile GetFile(string virtualPath)
    {
        // We've encountered my url
        if (IsVirtualPath(virtualPath))
        {
            return base.GetFile(virtualPath);
        }

        var translatedPath = TranslatePath(virtualPath);

        if (base.FileExists(translatedPath))
            return new CMSContentVirualFile(translatedPath);

        return Previous.GetFile(virtualPath);
    }

    private static string TranslatePath(string virtualPath)
    {
        // We've encountered a regular url
        // translate the URL based on the file type and return it if it exists
        var translatedPath = "~/" + CMSContentPath;

        var fileName = CMSPrefix + VirtualPathUtility.GetFileName(virtualPath);

        if (fileName.EndsWith("ascx", StringComparison.OrdinalIgnoreCase))
        {
            translatedPath = VirtualPathUtility.Combine(translatedPath + CMSControlFolderName, fileName);
        }
        else if (fileName.EndsWith("aspx", StringComparison.OrdinalIgnoreCase))
        {
            translatedPath = VirtualPathUtility.Combine(translatedPath + CMSPageFolderName, fileName);
        }
        else if (fileName.EndsWith("master", StringComparison.OrdinalIgnoreCase))
        {
            translatedPath = VirtualPathUtility.Combine(translatedPath + CMSMasterPagesFolderName, fileName);
        }
        return translatedPath;
    }

    public override bool FileExists(string virtualPath)
    {
        if (IsVirtualPath(virtualPath))
            return true;

        return Previous.FileExists(virtualPath);
    }

    public static bool IsVirtualPath(string virtualPath)
    {
        return virtualPath.Contains(CMSContentPath);
    }
}

public class CMSContentVirualFile : VirtualFile
{
    private string CMSPath = "Testing the test and seeing if it works....";
    public CMSContentVirualFile(string virtualPath)
        : base(virtualPath)
    {
        CMSPath = VirtualPathUtility.ToAppRelative(virtualPath);
    }// open is never called

    public override Stream Open()
    {
        ASCIIEncoding encoding = new ASCIIEncoding();
        return new MemoryStream(encoding.GetBytes(this.CMSPath), false);
    }
}

}

EN

回答 1

Stack Overflow用户

发布于 2015-01-28 16:27:05

因为我偶然发现了这一点,并且为了完整:

这是一个已知的错误,由加载文件的编译错误引起。此错误以某种方式被一条隐秘的消息替代,因此在大多数情况下,虚拟路径提供程序似乎没有任何问题。

参考:https://freedrum99.wordpress.com/2007/11/28/the-virtualpathprovider-returned-a-virtualfile-object-with-virtualpath-set-to/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21821354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档