【问题标题】:Dependencies not flowing between dependent projects, causing System.IO.FileNotFoundException依赖项目之间不流动的依赖关系,导致 System.IO.FileNotFoundException
【发布时间】:2017-09-13 19:49:57
【问题描述】:

假设我的解决方案有 2 个项目:

  • 第一个名为“MainProject”(一个 .NETStandard 2.0 项目)。
  • 第二个称为“MainProjectTests”(一个 NUnit 测试项目),将每个类的一些单元测试放到“MainProject”中。

第一个项目 (MainProject) 有一个名为“dependencyX”的 NuGet 依赖项。显然,“MainProjectTests”项目有对“MainProject”的引用。

因此,当测试运行程序运行“MainProjectTests”测试,该测试使用“dependencyX”从“MainProject”调用方法时,我得到了System.IO.FileNotFoundException 异常:

System.IO.FileNotFoundException:无法加载文件或程序集 'dependencyX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 或一 它的依赖项。

为什么我会收到此异常?当我将“dependencyX”添加到“MainProjectTests”时一切正常,但在我看来这不是一个好习惯......如何解决它?

我正在使用 Visual Studio for Mac Community 7.2 预览版(7.2 build 583)

感谢您的帮助。

编辑:

尝试放置选项:

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>

在 NUnit 项目中,但得到相同的结果。

【问题讨论】:

  • 为什么在使用它们的地方提供依赖项似乎不是一个好习惯?运行时应该从哪里获取它们?
  • @CodeCaster 感谢您的评论。我的测试项目没有直接使用dependencyX。相反,它从使用dependencyX 的项目中的类调用方法。我错了?所以我相信测试项目应该不知道dependencyX的存在...
  • MainProject 是否设置为将dependencyX 二进制文件放在构建输出目录中?如果不是,您为什么希望它可以运行?
  • 复制测试箱中的 dll 是可行的,但这是一个奇怪的解决方法。

标签: c# .net visual-studio nunit visual-studio-mac


【解决方案1】:

这似乎是一个关于 .NET Standard 库的已知错误(可能尤其是与 NUnit 结合使用)。我已经提交了bug report here,这似乎证实这不是预期的行为。虽然半年多没有进展。

在确认仅在使用 NUnit 时才会发生这种情况后,也许应该在 NUnit 存储库中提交一个错误。

目前,您需要引用 .NET 标准项目中使用的所有库,以及所有引用 .NET 标准的项目,就像您现在所做的那样。

【讨论】:

    【解决方案2】:

    这是一个向微软报告过几次的错误,他们似乎并没有做太多,看看这个Visual Studio does not copy referenced assemblies through the reference hierarchy

    另一方面,至少对于 Nuget 包,您有一种简单的方法(将相同的包添加到同一解决方案中的多个项目),使用解决方案的包管理器,您可以在此处看到 Nuget Package Manager

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 2015-04-14
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多