【发布时间】:2016-05-02 19:42:06
【问题描述】:
对我正在开发的旧版 ASP.Net Web 表单应用程序进行一些更改后,每当我尝试访问该应用程序的页面时,都会收到以下异常。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\MyApplication\bdb24adf\eb592999\App_Web_mypage.aspx.cdcab7d2.dc1wid-d.0.cs(148):错误 CS0012: “MyDataModelClass”类型是在未引用的程序集中定义的。您必须添加对程序集 'MyDataModelAssembly, Version=40.0.0.30, Culture=neutral, PublicKeyToken=7ca3fb5049101832'的引用
经过数小时的故障排除后,我终于将问题缩小到我添加到基础页面类的方法,应用程序中的所有页面都从该类派生。叫它MyBasePageClass。
protected T CreatePlaceholder<T>(T item) where T : MyDataModelClass, new()
{
return new T { TemporaryIdentifier = item.TemporaryIdentifier };
}
当我注释掉那个方法时,异常消失了,一切都按我的预期工作。如果我在 web.config 文件中添加程序集引用,此异常也会消失。奇怪的是,当我更改对 Copy Local = true 的引用时,这也会使异常消失。
这不是第一次将 MyDataModelClass 合并到应用程序中。它几乎在每个代码隐藏文件中的许多地方使用。但是由于某种原因,将其用作类型约束是 .Net 无法处理的。
我只能想象它与泛型的性质有关,但我不知道那可能是什么。我不是第一个尝试过这个的人,但我在 SO 或其他任何地方都找不到任何关于它的信息。会不会和 IIS 的配置方式有关?
更新:
MyDataModelAssembly 确实安装在 GAC 中。这是 gacutil /l 的输出:
全局程序集缓存包含以下程序集: MyDataModelAssembly,版本=40.0.0.30,文化=中性,PublicKeyToken=7ca3fb5049101832,处理器架构=MSIL
【问题讨论】:
-
为什么投反对票?
-
我很想知道谁一直拒绝投票这个问题。对问题进行上下投票的整个目的是使经过充分研究的困难问题可以上升到顶部,而质量差的问题可以下降到底部。考虑到这个问题似乎没有人有好的答案,所以它需要上升到顶部。
标签: c# asp.net .net generics iis