Visual Studio 由于缺少未丢失的程序集引用而拒绝构建项目

Visual Studio refuses to build project due to missing assembly reference that isn't missing

我正在构建一个 c# windows 服务,并向我的项目添加了几个程序集引用(对我自己的其他项目)。

构建时出现以下错误:

"Error 25 The type or namespace name 'TestClass' could not be found (are you missing a using directive or an assembly reference?"

有趣的是,csproj 文件中的引用路径是正确的,最重要的是,类 和引用项目中的命名空间,根据 Visual Studio 是缺失的,正在由 Intellisense 接收,甚至 "go to definition" 功能也能正常工作。此外,我在与我的新 windows 服务完全相同的文件夹中还有其他项目,它们很好地获取了程序集引用。所有引用的项目都包含在解决方案中。

我使用 Visual Studio 2013 Update 3。我确实没有可以显示的代码可以为您提供更多信息,但如果您想查看一些屏幕截图或其他内容,请告诉我。

到目前为止的尝试次数:

更新 当我 select 引用列表中的 "missing" 引用之一并转到属性时,没有定义路径。然而,相对路径在 csproj 文件中是正确的。令人困惑。

更新 2 删除所有引用,重新加载项目,然后为我做一个干净的修复。显然,问题是由构建堆栈中的所有 dll 未更新引起的。

1.remove 所有引用

2.Build --> 清理解决方案

3.Clean 你的项目使用这个 project 因为有时 visual studio 无法整齐地清理所有东西。

另一个可能的问题可能是 目标版本的 .NET 程序集之间的不匹配。我遇到了同样的症状,设置相同版本的框架对我有用。

在我的例子中,程序集项目的目标框架和我想使用这个程序集的项目的目标框架是不同的。 装配项目的目标框架是 4.5,我项目的目标框架是 4.0。

当我将项目的目标框架更改为汇编项目的目标框架,即从 4.0 到 4.5 时,它工作正常。

为了改变项目的目标框架,

右键单击项目 -> 属性 -> 应用程序 -> 目标框架

此目标框架是下拉列表,select 您需要的框架来自此列表。

我也是同样的问题。或者至少症状是一样的。我的解决方案位于网络驱动器上。 将解决方案移动到我的本地驱动器解决了我的问题。

原因显然是 Windows 10 没有将网络驱动器视为足够可信的位置。它工作正常,直到我设法以某种方式破坏我的解决方案。 Visual studio 显然没有执行所需修复操作所需的权限。

重新安装软件包对我有用。

从包管理器控制台,运行以下命令重新安装所有包。

update-package -reinstall

您可以通过以下方式定位单个包:

update-package PACKAGE_NAME -reinstall

我认为您缺少一个名为:Bogus 的 Nuget 库。您可以从 visual studio 中的 Nuget-Solution 安装程序安装它。只需安装它并在 class 文件中添加 using Bogus.DataSets;。希望这会解决您的问题。

我遇到了类似的问题:编译器抱怨缺少程序集引用,即使它在 csproj 文件中也是如此。

没有引用的错误:

error CS0246: The type or namespace name 'IMyService' could not be found (are you missing a using directive or an assembly reference?)

所以我添加了参考:

<Reference Include="My.Library, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>path/to/lib/My.Library.dll</HintPath>
</Reference>

并得到一个稍微不同的错误:

error CS0012: The type 'IMyService' is defined in an assembly that is not referenced. You must add a reference to assembly 'My.Library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

即使更新引用以匹配错误消息中的确切字符串,我仍然遇到第二个错误。

问题是我混合了签名和未签名的程序集。我的项目架构大致是这样的:

  • A.dll - 未签名的程序集
  • B.dll - 签名程序集;参考文献 A.dll;编译成功
  • C - 引用 A.dll 和 B.dll;个人推荐OK;在 B 中调用 returns 来自 A
  • 的类型的方法时出现上述错误

我通过对程序集签名解决了我的问题(上面示例中的“A”)。我通过引用 StrongNamer NuGet 包来做到这一点。