为什么我不能引用我的班级图书馆?


86

我有一个解决方案,其中包含一个网站和Visual Studio 2008中的类库。

然后,在解决方案之外,我还有一个网站项目需要引用类库。我右键单击Bin文件夹或Project,然后选择Add Reference,然后选择我的Class Library Project,它将类库需要的15个左右的DLL添加到网站bin文件夹中,但是没有任何.cs文件可以识别using语句。

using MyLibrary.MyFolder;

它说它无法解决,ReSharper只是说可以将其安全删除,因为它未被使用。

ReSharper可以识别出它需要引用,并建议它“引用MyLibrary并使用MyFolder”。我不确定为什么会提示我添加已有的参考。当我接受建议时,我得到了错误

“未能引用模块。引用可能会在项目之间产生循环依赖关系。”

我尝试过进入网站属性页并删除所有引用并重新添加它们,但是它给出了相同的错误。任何想法为什么这不起作用?


检查类库中的.net框架版本以及您所引用的项目
Manideep Innamuri

Answers:


164

另外,请检查新解决方案的项目是否与您要包含的项目的兼容框架兼容。我试图在3.5项目中包含对4.0项目的引用。


3
荣誉!我将解决方案构建为4.5,并将其链接到4.0。由于当前的4.0要求,我将新解决方案降级到4.0,现在我的其他项目在针对该解决方案的构建上都没有问题。+1帮助我保持理智!
大卫·彼得森

1
我在这个项目中克服了很多以前的障碍,当我遇到这个错误时,我将一头雾水。您保存了它,谢谢!
Tony D

1
没想到这样会解决问题!Cool
enuf

1
然后,Microsoft应该这样说,并包括将它们全部置于相同版本的选项。
PRMan

1
拯救了我的一天!VisualStudio甚至不会发出警报提醒我::
Reuel Ribeiro

86

我找到了解决此问题的方法(至少对我来说)。我不确定为什么会起作用,但确实如此。(我只是针对另一个存在相同问题的网站进行了尝试,以下解决方案也可以解决该问题)。

我尝试正常清理项目并重建,关闭所有Visual Studio实例并重新启动它们,甚至尝试重新启动计算机。

实际起作用的是在Visual Studio中打开项目,关闭所有打开的选项卡,然后将其关闭。

在我打开选项卡之前,是因为我认为这并不重要(而且我几乎从未关闭过使用的选项卡)。


只是重新启动VS对我有用。该问题的原因是项目/名称空间重命名重构触发了R#中的错误。
mbx 2012年

那也对我有用。正如您所说,我关闭了所有选项卡,然后重新启动IDE和voila,现在可以引用我的类库了。谢谢。
尤瓦

31

一种可能性是类库的目标.NET Framework版本高于项目的版本。


8

我有一个类似的问题,我的所有引用都会被Resharper修改吗?-对我有用的解决方案是清除Resharper缓存,然后重新启动VS

工具->选项-> harharper->选项->常规->单击清除缓存按钮并重新启动VS


4

我有一个类似的问题,VS有时会建立,有时却不会。经过一些搜索和尝试,我发现我对不同库(“ FileManager”)中具有相同名称的类有一个含糊的引用。不会构建的项目是我的单元测试,它引用了解决方案中的所有模块。强制执行对特定模块的引用对我来说很合理。

我的意思是:与其责怪ReSharper或VS,不如以某种方式确实没有某种循环参考可能是一个好主意。在不同模块中具有相同名称的类通常会引起混乱,并且通常是不良设计的征兆(例如我的情况)。


在我的案例中,+ 1将具有不同名称空间的两个项目编译为一个具有相同名称(在Visual Studio中“应用程序”选项卡中的程序集名称)的.exe。命令行上的MSBuild给了我们一个不太有用的线索,这使我们想了一段时间The type or namespace name 'A' does not exist in the namespace 'B'。请注意,对此没有警告...
Jonno 2012年

3

这听起来与ReSharper类似:

http://www.jetbrains.net/devnet/thread/275827

根据线程中的一个用户的说法,强制构建在第一次构建后解决了该问题(CTRL + Shift + B)。

听起来像是ReSharper的问题,特别是在他们的情况下。您是否尝试过构建而不考虑警告和可能的错误错误的信息?


我之前遇到过。而且我不确定构建它是否“解决”了问题。它确实可以编译,但仍使用语句,类等将类显示为无法识别。但是,如果我有意中断某些方法调用,即使没有显示参数列表,Visual Studio似乎也可以识别该错误。我想这是ReSharpers的错。
布兰登2010年

3

因为它们都在同一解决方案中,所以不必添加对DLL的引用,而要添加对类库项目本身的引用(“添加引用”对话框将为此提供一个选项卡)。

嗯,这是另一种解决方案。错过了。您如何尝试而不是添加对项目的引用,而是添加对类库的已编译DLL的引用。“添加引用”对话框具有“浏览”选项卡。


1
这对我有用,其他解决方案建议添加参考,但由于某种原因,直到我右键单击解决方案资源管理器中的主项目,我才找到它。
Ralpharama

3

确认使用了相同版本的asp.net之后。我删除了该项目。清理解决方案并重新添加项目。这就是对我有用的。


我有同样的问题,这似乎有所帮助。很奇怪
inexcitus

2

如果要为相同解决方案中的项目引用程序集,请添加一个项目引用(使用“项目”选项卡),而不要浏览\ bin \ Debug(或\ bin \ Release)文件夹中的dll(使用“浏览”标签)。请参阅下面的屏幕截图。如果被认为是外部程序集,则仅浏览该程序集/ dll文件。

在此处输入图片说明


2

我删除了项目的* .csproj.user(重新共享文件),然后关闭所有选项卡,然后重新打开。在那之后,我能够编译我的项目,并且没有任何急速的警告。


我这样做了,然后智能感知再次显示了程序集信息,但是,当我尝试重新编译时,该组件的智能感知信息就被擦除了,并且构建失败了。这是一个奇怪的错误!
大卫·彼得森

我还必须从头开始重新创建我的项目...认为我在相对较新的项目中用NuGet进行了多次卸载/安装。
亚当·诺夫辛格

删除和重新创建引用对我有用,删除完整的项目文件可能会过分。
丹格勒

2

我有这个问题。我花了很长时间才弄清楚。我有很多人在帮助我。我们重建,清理并重新启动了Visual Studio,但这并没有解决。我们删除并重新添加了引用...

一切都无济于事。...直到!

我的问题的解决方案是我的类声明拼写错误。

在开始对我进行严厉的评判之前,请允许我解释一下为什么它并不愚蠢,以及为什么即使是最聪明的程序员也可能犯此错误。

由于名称中的错误是很早就出现的,所以当我开始键入时,它并没有出现在智能感知类列表中。

例如

班级名称: Message.cs

宣言:

public class Massage
{
    //code here

}

乍一看,小字体看起来与Message相同。

键入M列出了太多的类,所以我键入了e,但在错误键入的版本中没有出现,这给人的印象是该类未被编译器接受。


因此,基本上您有错字。这对其他人真的没有用。
TylerH '18

0

在为MVC 2应用程序创建测试项目时,在VS 2010中遇到了类似的问题。症状是相同的。

ReSharper发出的消息有些误导。一会儿,我完全忽略了ReSharper,并以“手动VS方式”进行了操作:

  1. 我清洗了溶液。
  2. 我手动将引用添加到MVC项目。
  3. 我手动添加了using指令。
  4. Ctrl-Shift-B

在此阶段,我遇到了编译错误:我应该System.Web.Mvc在测试项目中引用该程序集(叹气)。添加此引用将导致项目编译。ReSharper问题仍然存在,但是ReSharper测试运行程序仍然有效。

当我重新启动VS时,ReSharper错误也消失了。我不确定是否需要重新启动-仅关闭.cs文件可能就足够了。

从现在开始,当我看到ReSharper消息时

引用模块失败。引用可能会在项目之间产生循环依赖关系。

我会读

引用模块失败。引用可能会在项目之间产生循环依赖关系,或者您会丢失一些对引用依赖关系的引用。


0

另一个可能对我有用的修复程序:

如果您具有引用了程序集B的程序集A,而这两个程序集都引用了一个非项目(外部)程序集X,并且程序集B的代码将无法识别您已经引用了X,请按顺序尝试以下步骤:

  • 从A和B都删除对X的引用
  • 在B中重新创建对X的引用
  • 重新创建对X的引用

显然,VS无法识别对项目中外部组件的引用,该引用是另一个已经引用了外部项目的项目的依赖项。通过从头开始重新设置参考,您可以克服这一点。这很奇怪。


有趣,但在VS2015上是正确的。谢谢!
Scott Nimrod

0

我遇到了这个问题,并通过关闭Visual Studio,重新打开Visual Studio,清理和重建解决方案来解决了这个问题。这对我有用。


0

如果使用TFS,执行“获取最新(递归)”操作并不总是有效。相反,我通过单击源代码管理=>获取特定版本,然后单击两个框来强制获取最新消息。这倾向于工作。

在此处输入图片说明

如果仍然不起作用,则删除suo文件(通常在解决方案的同一位置)会强制Visual Studio从源中获取所有文件(并随后重建suo文件)。

如果这样不起作用,请尝试关闭所有打开的文件并关闭Visual Studio。下次打开Visual Studio时,应将其修复。有一个解决这种错误的方法。


0

我最近偶然发现了一个类似的问题。我正在使用Resharper Ultimate 2016.1.2在Visual Studio 2015中工作。我试图在我的代码库中添加一个新类,同时尝试从另一个程序集中引用一个类,但是Resharper会对该包抛出错误。

在同事的帮助下,我发现引用的类存在于全局名称空间中,并且无法从新类访问,因为新的类已将其隐藏在当前名称空间中,该名称已被另一个相同名称的实体隐藏。

在所需名称空间之前添加“ global ::”关键字可帮助我引用我实际上正在寻找的类。可以在下面列出的页面上找到关于此的更多详细信息:

https://msdn.microsoft.com/zh-CN/library/c3ay4x3d.aspx



-1

不幸的是,对我唯一有效的方法是在将类文件临时复制到其他地方之后,完全删除并重新创建类库项目。只有这样,ASP.Net Web项目才能识别using引用类库项目的语句。这是在Visual Studio 2010中,而不是在使用ReSharper。


-1

我有类似的问题。对我有用的是我从Visual Studio添加了错误的类库。我是使用Visual Studio的搜索功能添加的。

我需要做的是添加新项目> Visual C#>类库。这个新添加的类库就是正确的类库,现在可以将其添加为对任何项目的引用。


-4

您可能会忘记添加引用,以导入需要导入的类库。

右键单击要导入的类库(包含多个导入的类库),->添加->引用(选择项目->解决方案->选择要从中导入的类库->确定)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.