我知道这个错误信息很常见,关于这个错误有很多关于 SO 的问题,但到目前为止没有任何解决方案对我有帮助,所以我决定提出这个问题。与大多数类似问题的不同之处在于我使用的是 App_Code 目录。
错误信息:
CS0012: The type 'Project.Rights.OperationsProvider' is defined in an
assembly that is not referenced. You must add a reference to assembly
'Project.Rights, version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
源文件:
c:\inetpub\wwwroot\Test\Website\App_Code\Company\Project\BusinessLogic\Manager.cs
以下建议here和 here ,我已经删除了 C:\Windows\Microsoft.NET/*.* 中的所有 Project.Rights.dll 实例 根据this ,我检查了有问题的 .cs 文件是否将构建操作设置为“编译”。他们是这样。 我还仔细检查了包含“Project.Rights.OperationsProvider”类型的 .cs 文件是否已部署到 App_Code 目录。
出于某种原因,应用程序未在 App_Code 目录中查找类型。因为我已经删除了 Project.Rights.dll 的所有实例(据我所知),所以我不知道错误消息提到的是哪个程序集。
最佳答案
当您收到此错误时,并不总是很明显发生了什么,但正如错误所说 - 您缺少引用。以下面一行代码为例:
MyObjectType a = new MyObjectType("parameter");
它看起来很简单,您可能已经正确引用了“MyObjectType”。但是假设“MyObjectType”构造函数的重载之一采用您未引用的类型。例如,有一个重载定义为:
public MyObjectType(TypeFromOtherAssembly parameter) {
// ... normal constructor code ...
}
这至少是您会遇到此错误的一种情况。因此,寻找这种类型的模式,在这种模式中,您引用了类型,但不是引用了在该类型上调用的函数可能的所有类型的属性或方法参数。
希望这至少能让您朝着正确的方向前进!
关于c# - 该类型定义在一个未被引用的程序集中,如何查找原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20660999/