运行时System.Web.HttpCompileException;类型&#34; <type>&#34;在未引用的程序集中定义

时间:2016-04-29 19:47:53

标签: c# asp.net iis webforms

有关异常的Stack Overflow有几个问题,但它们似乎都不涉及运行时编译.aspx文件,并且所提出的解决方案都不适用于我。

我有一个网络应用程序,截至昨天下午编译并运行得很好。当我今天早上再次开始处理它时,我突然开始在运行时收到异常,当IIS尝试编译有问题的.aspx页面时。 (类型名称已被更改以保护无辜者。)

  

c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET   Files \ MyWebApp \ bdb24adf \ eb592999 \ App_Web_MyPage.aspx.cdcab7d2.gibiyx2g.0.cs(148):错误CS0012:类型&#39; MyType&#39;在一个程序集中定义   没有引用。您必须添加对assembly&#39; MyAssembly的引用,   版本= 40.0.0.30,文化=中立,PublicKeyToken = 7ca3fb5049101832

我可以通过在web.config中添加程序集引用来消除此异常,但我不应该这样做。根据{{​​3}}堆栈溢出问题,您需要在配置文件中添加程序集引用的唯一时间是在ASP.Net应用程序中部署未编译的.cs代码文件。

由于昨天一切正常,因此.aspx文件和此页面的代码隐藏文件都没有改变。自昨天下午以来,Web.config文件中的任何内容都没有变化。

如果没有在设计时更改引用属性或修改web.config,我该怎么做才能让这个虚假的例外消失呢?

更新

在GAC中安装了定义MyType 的程序集,自从我第一次尝试找出问题以来,我已多次确认。

更新

我终于磨练了导致异常的确切更改。我试图查看的.aspx页面和抛出异常的页面有一个代码隐藏类,它继承自定义基页类。

public class MyPageClass : MyBasePageClass

我向MyBasePageClass添加了以下方法,当注释掉时,该异常消失:

protected T CreatePartyPlaceholder<T>(T owner) where T : Party, new()
{
    return new T { TemporaryId = owner.TemporaryId };
}

有几个其他现有方法引用Party类,但这个新方法是唯一一个使用该类作为泛型类型约束的方法。

0 个答案:

没有答案