为啥我不能引用我的类库?
Posted
技术标签:
【中文标题】为啥我不能引用我的类库?【英文标题】:Why can't I reference my class library?为什么我不能引用我的类库? 【发布时间】:2011-01-14 23:03:56 【问题描述】:我有一个在 Visual Studio 2008 中包含网站和类库的解决方案。
然后我有另一个需要引用类库的解决方案之外的网站项目。我右键单击 Bin 文件夹或项目并选择添加引用,然后选择我的类库项目,它将类库需要的 15 个左右的 DLL 添加到网站的 bin 文件夹中,但没有一个 .cs 文件识别 using 语句。
using MyLibrary.MyFolder;
它说它无法解决它,而 ReSharper 只是说它可以安全地删除,因为它没有被使用。
ReSharper 可以识别出它需要引用并建议它“引用 MyLibrary 并使用 MyFolder”。我不确定为什么它建议我添加我已经拥有的参考。当我接受建议时,我收到错误
“引用模块失败。可能引用会产生项目之间的循环依赖。”
我尝试访问网站属性页并删除所有引用并重新添加它们,但它给出了相同的错误。任何想法为什么这不起作用?
【问题讨论】:
检查类库中的.net框架版本和你引用的项目 【参考方案1】:此外,请检查新解决方案的项目是否针对您尝试包含的项目的兼容框架运行。我试图在 3.5 项目中包含对 4.0 项目的引用。
【讨论】:
赞!我将我的解决方案构建为 4.5,并将其链接到 4.0。由于我们当前的 4.0 要求,我将新解决方案降级为 4.0,现在我的另一个项目在构建它时没有问题。 +1 帮助我保持理智! 我已经克服了这个项目之前的许多障碍,当我遇到这个错误时,我正要认输。你保存了,谢谢! 没想到问题就这样解决了!很酷的enuf 那么微软应该这样说,并包括一个选项,将它们全部放在同一个版本中。 拯救了我的一天! VisualStudio 甚至不会发出警报提醒我:(【参考方案2】:我找到了解决此问题的方法(至少对我而言)。为什么它有效,我不确定,但它确实有效。 (我刚刚尝试了另一个遇到相同问题的网站,以下解决方案也适用于此)。
我尝试正常清理项目并重新构建,关闭所有 Visual Studio 实例并重新启动它们,甚至尝试重新启动我的计算机。
实际工作是在 Visual Studio 中打开项目,关闭所有打开的选项卡,然后将其关闭。
在我打开标签之前,因为我认为这无关紧要(而且我几乎从不关闭我正在使用的标签)。
【讨论】:
只需重新启动 VS 对我有用。该问题的原因是项目/命名空间重命名重构触发了 R# 中的错误。 这对我也有用。正如你所说,我关闭了所有选项卡,然后重新启动了我的 IDE,瞧,我现在可以引用我的类库了。谢谢。【参考方案3】:一种可能是类库的目标 .NET Framework 版本高于项目的版本。
【讨论】:
【参考方案4】:我遇到了类似的问题,我的所有引用都会被 Resharper 搞砸吗?对我有用的解决方案是清除 Resharper 缓存,然后重新启动 VS
tools->options->resharper->options->general->点击清除缓存按钮并重启VS
【讨论】:
【参考方案5】:我遇到了类似的问题,VS 有时会构建,有时不会。经过一番搜索和尝试,我发现我对不同库('FileManager')中具有相同名称的类的引用不明确。无法构建的项目是我的单元测试,它引用了我的解决方案中的所有模块。强制对特定模块的引用为我解决了问题。
我的观点是:与其责怪 ReSharper 或 VS,不如仔细检查是否真的不存在某种循环引用。通常,不同模块中具有相同名称的类可能会导致混淆,并且通常是设计不良的症状(就像我的例子一样)。
【讨论】:
+1 在我的情况下,两个具有不同命名空间的项目被编译为具有相同名称的 .exe(Visual Studio 中的“应用程序”选项卡中的程序集名称) - 因为这使得(一些)迁移项目感觉;命令行中的 MSBuild 给了我们一个不太有用的线索,这让我们想了一会儿:The type or namespace name 'A' does not exist in the namespace 'B'
。请注意,不会出现任何警告...【参考方案6】:
这听起来像是 ReSharper 的类似问题:
http://www.jetbrains.net/devnet/thread/275827
根据线程中的一个用户,强制构建修复了第一次构建后的问题(CTRL+Shift+B)..
在他们的情况下,这听起来像是 ReSharper 的一个问题。你是否尝试过构建而不考虑警告和可能的错误错误?
【讨论】:
我之前遇到过。而且我不确定构建它是否“解决”了问题。它确实可以编译,但它仍然显示类、使用语句、类等未被识别。但是,如果我故意中断某些方法调用,Visual Studio 似乎会识别错误,即使它不会向我显示参数列表。我猜这是 ReSharpers 的错。【参考方案7】:因为它们都在同一个解决方案中,所以不要添加对 DLL 的引用,而是添加对类库项目本身的引用(添加引用对话框将为此提供一个选项卡)。
啊,这是一个不同的解决方案。错过了。您如何尝试而不是添加对项目的引用添加对您的类库的已编译 DLL 的引用。 “添加参考”对话框有一个“浏览”选项卡可以执行此操作。
【讨论】:
这对我有用,其他解决方案建议添加参考,但由于某种原因,直到我在解决方案资源管理器中右键单击主项目时才找到它。【参考方案8】:在确认使用了相同版本的 asp.net 之后。我删除了该项目。清理解决方案并重新添加项目。这对我有用。
【讨论】:
我遇到了同样的问题,这似乎有帮助。很奇怪。【参考方案9】:如果您要为同一解决方案中的项目引用程序集,请添加项目引用(使用“项目”选项卡),而不是在 \bin\Debug(或 \bin\Release)文件夹中浏览 dll (使用“浏览”选项卡)。请参阅下面的屏幕截图。如果它被认为是外部程序集,则仅浏览程序集/dll 文件。
【讨论】:
【参考方案10】:我删除了项目的 *.csproj.user(resharper 文件),然后关闭所有选项卡并重新打开它。之后,我就可以编译我的项目,并且没有任何更清晰的警告。
【讨论】:
我这样做并让我的智能感知再次显示程序集信息,但是当我尝试重新编译时,我的该程序集的智能感知信息被擦除并且构建失败。这是一个奇怪的错误! 我还必须从头开始重新创建我的项目......我想我在一个相对较新的项目上在 NuGet 中进行了几次卸载/安装。 删除和重新创建引用对我有用,完整的项目文件删除可能是矫枉过正。【参考方案11】:我遇到了这个问题。我花了很长时间才弄清楚。我有人在我的肩膀上提供帮助。我们重建、清理并重新启动了 Visual Studio,但这并没有解决它。我们删除并重新添加了引用...
一切都无济于事......直到!
我的问题的解决方案是我的类声明拼写错误。
在你开始严厉地评判我之前,请允许我解释一下为什么它并不愚蠢,以及为什么即使是最聪明的程序员也会犯这个错误。
由于错误出现在名称的早期,所以当我开始输入时,它并没有出现在智能感知类列表中。
例如
类名:
Message.cs
声明:
public class Massage
//code here
一目了然,小字体的按摩看起来与消息相同。
输入 M 列出了太多类,所以我输入了 e,它没有出现在输入错误的版本中,给人的印象是该类没有被编译器拾取。
【讨论】:
所以基本上你有一个错字。这对其他人并没有真正的用处。【参考方案12】:在为 MVC 2 应用程序创建测试项目时,我在 VS 2010 中遇到了类似的问题。 症状是一样的。
来自 ReSharper 的消息有些误导。有一段时间我完全忽略了 ReSharper,而是按照“手动 VS 方式”进行操作:
-
我清洗了溶液。
我手动添加了对 MVC 项目的引用。
我手动添加了 using 指令。
ctrl-shift-b
在这个阶段我遇到了一个编译错误:我应该在我的测试项目中引用了System.Web.Mvc
程序集(叹气)。添加此引用会导致项目编译。 ReSharper 问题仍然存在,但 ReSharper 测试运行程序有效。
当我重新启动 VS 时,ReSharper 错误也消失了。我不确定是否需要重新启动 - 只需关闭 .cs 文件就足够了。
从现在开始,当我看到 ReSharper 消息时
引用模块失败。大概, 参考将产生循环 项目之间的依赖关系。
我会读
引用模块失败。大概, 参考将产生循环 项目之间的依赖关系, 或者您缺少一些对引用依赖项的依赖项的引用。
【讨论】:
【参考方案13】:另一个对我有用的可能修复:
如果你有Assembly A,它引用了Assembly B,两者都引用了一个非项目(外部)的Assembly X,并且Assembly B的代码不会识别你引用了X,那么请按顺序尝试以下步骤:
从 A 和 B 中删除对 X 的引用 在 B 中重新创建对 X 的引用 在 A 中重新创建对 X 的引用显然,VS 无法识别项目中对外部程序集的引用,该项目是已引用外部程序集的另一个项目的依赖项。通过从头开始重新设置引用,您可以克服这个问题。这很奇怪。
【讨论】:
有趣但在 VS2015 上是正确的。谢谢!【参考方案14】:我遇到了这个问题,我通过关闭 Visual Studio、重新打开 Visual Studio、清理和重建解决方案来解决它。这对我有用。
【讨论】:
【参考方案15】:如果使用 TFS,执行获取最新(递归)并不总是有效。相反,我通过单击源代码控制 => 获取特定版本然后单击两个框来强制获取最新版本。这往往会奏效。
如果仍然无法正常工作,则删除 suo 文件(通常与解决方案位于同一位置)会强制 Visual Studio 从源中获取所有文件(并随后重建 suo 文件)。
如果这不起作用,请尝试关闭所有打开的文件并关闭 Visual Studio。下次打开 Visual Studio 时,它应该已修复。通过这种方式解决了一个更清晰的错误。
【讨论】:
【参考方案16】:我最近偶然发现了一个类似的问题。我正在使用 Resharper Ultimate 2016.1.2 在 Visual Studio 2015 中工作。我试图在我的代码库中添加一个新类,同时尝试从另一个程序集中引用一个类,但 Resharper 会为该包引发错误。
在同事的帮助下,我发现引用的类存在于全局命名空间中,并且无法从新类访问,因为它被当前命名空间中存在的另一个同名实体隐藏。
在所需的命名空间之前添加一个“global::”关键字有助于我引用我实际寻找的类。可以在下面列出的页面上找到更多详细信息:
https://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx
【讨论】:
【参考方案17】:如果两个项目都包含在同一个解决方案中,如果您为您需要的项目添加引用,而不是其编译的 dll,将更合适。
【讨论】:
【参考方案18】:我遇到了完全相同的问题。
我多次尝试关闭 Visual Studio,我尝试删除并添加一个新的类库。检查我是否有正确的版本,如果我在目标项目中引用了它。没有任何效果。
然后我想也许,也许我不能引用图书馆,因为它是空的......就是这样。
我一添加一个类,问题就解决了。因此,如果您已经尝试了所有方法并且您即将失去理智。只需尝试在类库中添加一些内容。
【讨论】:
【参考方案19】:解决方案只是添加访问修饰符 我的班级没有任何访问修饰符,然后我添加了 public 并且它起作用了! 合约类库:
namespace Contracts
public interface ILoggerManager
void LogInfo(string message);
void LogWarn(string message);
void LogDebug(string message);
void LogError(string message);
Logger服务类库:
using Contracts;
using NLog;
public class LoggerManager : ILoggerManager
private static NLog.ILogger logger = LogManager.GetCurrentClassLogger();
public LoggerManager()
【讨论】:
【参考方案20】:不幸的是,在将类文件临时复制到其他地方之后,唯一对我有用的是完全删除并重新创建类库项目。只有这样 ASP.Net Web 项目才能识别引用类库项目的using
语句。这是使用 Visual Studio 2010,而不是使用 ReSharper。
【讨论】:
【参考方案21】:我有类似的问题。对我有用的是我添加了 Visual Studio 中的错误类库。我使用visual studio的搜索功能添加的。
我需要做的是添加新项目> Visual C# > 类库。而这个新添加的类库是正确的,现在可以作为对任何项目的引用添加。
【讨论】:
【参考方案22】:您可能忘记添加参考您需要导入的类库。
右键要导入的类库(包含多个导入的类库),-->添加->引用(选择项目->解决方案->选择要导入的类库->好的)
【讨论】:
以上是关于为啥我不能引用我的类库?的主要内容,如果未能解决你的问题,请参考以下文章
Razor 页面在 ASP.NET Core RC2 运行时看不到引用的类库