使用自定义ResourceProvider避免asp.net网站上的编译时错误

时间:2012-03-19 10:52:53

标签: asp.net localization

我有一个带有我们自己的DbResourceProvider的asp.net网站。该计划是使用常规的资源标记本地化页面:Text="<%$ Resources: Someword %>"

如果数据库中缺少资源,则提供程序返回resourceKey,因此在运行时缺少资源。但是在compile-time missing resources causes build-errors

有没有人有解决方法?

(如果需要,我会添加有关我的尝试的更多详细信息。)

1 个答案:

答案 0 :(得分:0)

一位同事在问题的the blog-post linked中的最后一条评论中指出了一个解决方案。我无权尝试,但这个类应该解决问题:

public class MyResources : System.Web.Compilation.IResourceProvider
{
private static string _entryMethod;

System.Resources.IResourceReader System.Web.Compilation.IResourceProvider.ResourceReader { get { throw new NotImplementedException(); } }

object System.Web.Compilation.IResourceProvider.GetObject(string resourceKey, System.Globalization.CultureInfo culture)
{
    if (ASPNetCompilerExecutionContext)
        return "ASPNetCompilerDesignTimeExecutionContext";

    return "TODO: return actual resource";      
}

static bool ASPNetCompilerExecutionContext
{
    get
    {
        if (_entryMethod == null) 
            _entryMethod = (new StackTrace()).GetFrame((new StackTrace()).FrameCount - 1).GetMethod().Name;

        if (_entryMethod == "PrecompileApp")
            return true;
        else
            return false;
    }
}
}

我想更简单的方法是假装所有资源都存在并返回"missing"以查找缺失的资源。