Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类型是在未引用的程序集中定义的,如何查找原因?_C#_Asp.net_.net_Asp.net 4.0 - Fatal编程技术网

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

C# 类型是在未引用的程序集中定义的,如何查找原因?,c#,asp.net,.net,asp.net-4.0,C#,Asp.net,.net,Asp.net 4.0,我知道这个错误信息很常见,关于这个错误有很多问题,但是到目前为止,没有解决方案可以帮助我,所以我决定问这个问题。和大多数类似问题不同的是,我使用的是App_代码目录 错误消息: CS0012:类型“Project.Rights.OperationsProvider”在 未引用的程序集。必须添加对程序集的引用 'Project.Rights,版本=1.0.0.0,区域性=中立,PublicKeyToken=null'。 源文件: c:\inetpub\wwwroot\Test\Website\A

我知道这个错误信息很常见,关于这个错误有很多问题,但是到目前为止,没有解决方案可以帮助我,所以我决定问这个问题。和大多数类似问题不同的是,我使用的是App_代码目录

错误消息:

CS0012:类型“Project.Rights.OperationsProvider”在
未引用的程序集。必须添加对程序集的引用
'Project.Rights,版本=1.0.0.0,区域性=中立,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_代码目录


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

当您收到此错误时,这意味着您正在使用的代码引用了程序集中的类型,但该程序集不是项目的一部分,因此无法使用它

删除Project.Rights.dll与您想要的相反。您需要确保项目可以引用程序集。因此,它必须放在全局程序集缓存或web应用程序的~/Bin目录中


如果不想使用程序集,则编辑,然后删除它也不是正确的解决方案。相反,您必须在代码中删除对它的所有引用。由于您编写的代码并不直接需要该程序集,而是引用的其他程序集,因此您必须将引用的程序集替换为不依赖于Project.Rights.dll的程序集。

当您遇到此错误时,并不总是很清楚发生了什么,但正如错误所说,您缺少了一个引用。以以下代码行为例:

MyObjectType a = new MyObjectType("parameter");
它看起来很简单,而且您可能已经正确引用了“MyObjectType”。但是假设“MyObjectType”构造函数的一个重载采用了您没有引用的类型。例如,有一个重载定义为:

public MyObjectType(TypeFromOtherAssembly parameter) {
    // ... normal constructor code ...
}
至少在一种情况下,您会出现此错误。因此,寻找这种类型的模式,在这种模式中,您引用了类型,但没有引用对该类型调用的函数可能使用的所有类型的属性或方法参数


希望这至少能让你走上正确的方向

主要原因之一可能是DLL的属性 在执行任何操作之前,必须检查
特定版本属性
,如果为true,则将其设置为false

原因:
可能是源代码在您构建时与其他(旧)版本合并,但此库升级为新版本,现在程序集中的版本不同,并且您的应用程序禁止获取新的DLL,禁用特定版本属性后,您的应用程序将可以免费获取新版本的DLL引用

可能您正在使用的库(DLL文件)需要另一个库。在我的例子中,我引用了一个包含数据库实体模型的库,但我忘记了引用实体框架库。

在我的例子中,这是因为在我的解决方案中,执行NuGet包更新只更新了对某些项目中dll依赖项的引用,而不是对所有项目的引用,从而导致版本冲突。在我的解决方案中,使用搜索*.csproj文件中的文本可以很容易地看到仍然需要更新的项目。

这也可能意味着您使用一个库,它公开库中定义的(公共)类型。即使您没有在您的库(未构建的库)中专门使用它们


这可能会阻止您编写使用无法使用的类(其签名中包含未引用库中的类型)的代码。

我碰巧看到不同的项目引用了同一dll的不同副本。
我确保所有人都引用了磁盘上的同一个文件,错误如我所料消失了。

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

初始状态:
原始文件路径:/Folder1/Subfolder1/MyWebForm.aspx.cs
原始代码文件类名:
Folder1\u子文件夹1\u MyWebForm

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

解决方案:
重命名您的代码文件类
Folder1\u子文件夹1\u MyWebForm

一个对应的新路径:
Folder1\u MyWebForm

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

检查项目中的目标框架。 在我的例子中,“您必须添加对程序集的引用”实际上意味着调用方和引用项目没有相同的目标框架。调用方项目具有.NET4.5,但引用的库具有目标4.6.1


我确信,MS编译器可以更智能,并记录更有意义的错误消息。我给

添加了一个建议,在我的例子中,引用的dll版本实际上比我以前的版本更新


我只需要回滚到以前的版本,这就解决了它

清理您的解决方案并重建对我很有用(在Visual Studio中,这些是右键单击解决方案浏览器时获得的选项
**Solved:**
 Add reference of my domain library layer to my web app libary layer