【问题标题】:Visual Studio refuses to build project due to missing assembly reference that isn't missing由于缺少未丢失的程序集引用,Visual Studio 拒绝构建项目
【发布时间】:2015-04-30 08:12:59
【问题描述】:

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

我在构建时收到以下错误:

“错误 25 找不到类型或命名空间名称 'TestClass'(您是否缺少 using 指令或程序集引用?”

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

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

目前的尝试:

更新 当我在参考列表中选择“缺失”参考之一并转到属性时,没有定义路径。然而,相对路径在 csproj 文件中是正确的。令人困惑。

更新 2 删除所有引用,重新加载项目,然后为我进行清理修复。显然,问题是由于构建堆栈中没有更新所有 dll。

【问题讨论】:

  • 您是否尝试过删除和阅读参考资料?
  • 参考和你的项目的目标框架是什么?项目目标必须等于或高于参考的目标
  • 添加后更改了 dll 然后尝试删除并再次添加后是否发生了这种情况?这似乎发生在这种情况下。
  • 您是否已经将 .csproj 中的引用与“好”项目的 .csproj 进行了比较?
  • 框架版本相同。我试过删除和阅读参考资料。我比较了“健康”项目中的参考资料。文字实际上是相同的。

标签: c# .net visual-studio windows-services assembly-references


【解决方案1】:

就我而言,程序集项目的目标框架和我要使用此程序集的项目的目标框架是不同的。 组装项目的目标框架是4.5,我的项目的目标框架是4.0。

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

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

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

此目标框架为下拉列表,从该列表中选择您需要的框架。

【讨论】:

    【解决方案2】:

    1.删除所有引用

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

    3. 使用 project 清理您的项目,因为有时 Visual Studio 无法整齐地清理所有内容。

    【讨论】:

    • 我尝试删除每个引用,然后进行清理。它似乎已经成功了。谢谢!
    • 我必须等待几分钟才能接受。我会的。
    • 如果您收到来自第 3 方的解决方案,请检查您的解决方案和第 3 方解决方案是否为相同的 .net 框架版本。是我的问题吗,一个简单的版本更改就可以了
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      update-package -reinstall

      您可以使用以下命令定位单个包:

      update-package PACKAGE_NAME -reinstall

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          原因显然是 Windows 10 没有将网络驱动器视为足够受信任的位置。在我设法以某种方式破坏我的解决方案之前,它工作得很好。 Visual Studio 显然没有执行所需的修复操作所需的权限。

          【讨论】:

            【解决方案7】:

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

            没有参考的错误:

            错误 CS0246:找不到类型或命名空间名称“IMyService”(您是否缺少 using 指令或程序集引用?)

            所以我添加了参考:

            <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>
            

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

            错误 CS0012:“IMyService”类型在未引用的程序集中定义。您必须添加对程序集“My.Library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”的引用。

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

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

            • A.dll - 未签名的程序集
            • B.dll - 签名程序集;引用 A.dll;编译OK
            • C - 引用 A.dll 和 B.dll;个人参考OK;在 B 中调用从 A 返回类型的方法时出现上述错误

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-19
              • 2017-06-14
              相关资源
              最近更新 更多