小编典典

类型是在未引用的程序集中定义的,如何查找原因?

c#

我知道错误消息很普遍,因此对此错误有很多疑问,但是到目前为止,还没有解决方案对我有所帮助,所以我决定提出这个问题。与大多数类似问题的不同之处在于我使用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

以下的建议在这里这里,我已经删除了C内Project.Rights.dll的所有实例:\ WINDOWS \ Microsoft.NET
/.根据这个,我检查,如果有问题的.cs文件具有生成操作设置为“编译” 。他们是这样。我还仔细检查了包含“
Project.Rights.OperationsProvider”类型的.cs文件是否已部署到App_Code目录。

由于某种原因,应用程序不在App_Code目录中寻找类型。由于我已经删除了Project.Rights.dll的所有实例(据我所知),因此我不知道错误消息提到的程序集。


阅读 1001

收藏
2020-05-19

共1个答案

小编典典

当您收到此错误时,发生的情况并不总是很明显,但是正如错误所言-您缺少参考。以下面的代码行为例:

MyObjectType a = new MyObjectType("parameter");

它看起来很简单,您可能已经正确引用了“ MyObjectType”。但是,可以说“
MyObjectType”构造函数的重载之一采用了您未引用的类型。例如,有一个过载定义为:

public MyObjectType(TypeFromOtherAssembly parameter) {
    // ... normal constructor code ...
}

至少有一种情况会出现此错误。因此,寻找这种类型的模式,在该模式中您已引用了该类型,但并非所有类型的属性或方法参数都可以引用该类型的函数。

希望这至少可以使您朝正确的方向前进!

2020-05-19