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

104

我知道这个错误信息很常见,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

参照这里这里的建议,我已经删除了C:\Windows\Microsoft.NET/*.*内所有Project.Rights.dll的实例。根据这篇文章的内容,我检查了相关.cs文件的生成操作是否设置为“编译”,它们是这样设置的。我还仔细检查了包含“Project.Rights.OperationsProvider”类型的.cs文件是否部署到了App_Code目录中。

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


6
你正在使用一个类(假设为 A),该类公开了类型为 Project.Rights.OperationsProvider 的方法/属性/某个东西。编译器需要知道这是什么,然后会搜索该程序集(Project.Rights)。如果它找不到它(因为你的网站项目中没有对它的引用)...你就会得到这个错误。解决方案:不要从系统中删除该程序集!!! 添加对它的引用。 - Adriano Repetti
3
请尝试前往“工具-选项-项目和解决方案-生成和运行”,将两个详细度级别都设置为“详细”。这将告诉你哪些依赖项存在问题,以及编译器在哪里查找它们。 - danludwig
21个回答

1

我曾尝试从.NET程序集选项卡中添加引用,但它对我无效。 但是,当我使用浏览C:\Windows\Microsoft.NET\Framework\v4.0.30319 添加引用时,它起作用了。


0

这也可以意味着您使用一个库,该库公开定义在库中的类型。 即使您不会在您的库(未构建的库)中特别使用它们。

这可能会防止您编写使用类的代码(其签名具有未引用的库中的类型),而您无法使用该类。


0
也许你正在使用的一个库(DLL文件)需要另一个库的支持。在我的情况下,我引用了一个包含数据库实体模型的库,但是我忘记引用实体框架库了。

0
类型“Domain.tblUser”在一个未被引用的程序集中定义。您必须添加对程序集“Domain,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”的引用。
**Solved:**
 Add reference of my domain library layer to my web app libary layer

注意:请确保您的引用根据您的 DI 容器正确。

0

在我的情况下,这是因为我在 BLLDAL 类之间使用了

隐式运算符

当我想在应用层中使用 BLL 层时,我遇到了这个错误。我将

隐式运算符

改为

显式运算符

就可以了。

谢谢!


0

可能的一个主要原因是DLL的属性。在进行任何操作之前,您必须检查specific version property是否为true,如果是,则将其设置为false。

原因: 可能是在构建时,源代码与其他(旧)版本合并在一起,而此库已经升级到新版本,导致组装缓存中的版本与您的应用程序禁止获取新的DLL不同。禁用specific version property后,您的应用程序将可以自由获取新版本的DLL引用。


0

对我来说,出现错误的原因是报告错误的WebForm已经从另一个文件夹移动,但其代码文件类的名称保持不变,与实际路径不符。

初始状态:
原始文件路径:/Folder1/Subfolder1/MyWebForm.aspx.cs
原始代码文件类名称:Folder1_Subfolder1_MyWebForm

文件移动后:
文件路径:/Folder1/MyWebForm.aspx.cs
代码文件类名称(未更改,显示错误):Folder1_Subfolder1_MyWebForm

解决方案:
重命名您的代码文件类Folder1_Subfolder1_MyWebForm
新路径相应的一个:Folder1_MyWebForm

一次性完成 - 问题解决,无错误报告。


0
在我的情况下,引用的dll版本实际上比我之前拥有的版本更新。
我只需要回滚到以前的版本,问题就解决了。

0

我有一个类似的问题,我删除了RuntimeFrameworkVersion,问题得到了解决。

尝试删除1.1.1或者


0
我的问题是我的一个项目的“Output Type”设置为“Console Application”。为了解决这个问题,我右键单击该项目,选择“属性”,点击“应用程序”选项卡,并将“Output Type”(从“Console Application”)更改为“Class Library”。重新编译后,这个错误就消失了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接