ASP.NET资源:检测何时在编译时调用ResourceProvider与运行时

时间:2010-03-04 22:46:29

标签: asp.net compile-time

我的ASP.NET Web应用程序使用由SQL Server数据存储支持的自定义资源提供程序。据我了解,隐式资源在编译时调用资源提供程序来确定是否需要为给定的resourcekey生成资源表达式。因此,我的构建过程现在依赖于拥有包含必要资源键的实时,最新数据库。

这本身并不一定是个问题。问题是应用程序连接到许多数据库中的一个,这是由查询字符串参数决定的(可怕的设计,但不幸的是我暂时坚持使用它)。显然在编译时没有查询字符串,因此资源提供程序无法访问数据库。是否可以确定在编译期间是否已调用资源提供程序(或更具体地说是资源提供程序下游的代码),因此我可以指向预定的数据库?

现在我只是默认为特定数据库,如果HttpContext.Current == null。这工作正常,但这个逻辑必须存在于数据访问层中,我绝对讨厌引用System.Web的数据访问层的想法。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

        object IResourceProvider.GetObject(string resourceKey, CultureInfo culture)
        {
            if (AspHelpers.ASPNetCompilerExecutionContext)
                return "ASPNetCompilerDesignTimeExecutionContext";

其中

public static bool ASPNetCompilerExecutionContext
{
    get
    {
        string entryMethod = (new StackTrace()).GetFrame((new StackTrace()).FrameCount - 1).GetMethod().Name;
        if (entryMethod == "PrecompileApp")
            return true;
        else
            return false;
    }
}