【问题标题】:Importing NuGet references through a local project reference通过本地项目引用导入 NuGet 引用
【发布时间】:2017-06-22 18:04:42
【问题描述】:

假设我有一个“主”C# 项目,它使用 NuGet 来管理其第三方依赖项。

现在假设我在主项目旁边创建了一个单元测试项目,其中包括作为参考的主项目。

不幸的是,我似乎需要在主项目中重新添加通过 nuget 包含的依赖项,以便使用它们为单元测试项目中的单元测试编写代码。

我的问题是:有没有办法在测试项目中自动包含“主要”nuget 引用?

【问题讨论】:

  • 您可以将主项目作为 nuget 包及其依赖项包含在单元测试中,当然,如果您愿意并且可以将主项目打包为 nuget 包。
  • @GeorgeAlexandria 这似乎是一个低效的解决方案——除非有某种方法可以在每次迭代更改时简洁地自动化该过程?单元测试过程往往涉及大量小修复(或至少是 IME)。
  • 是的,这是一个低效的解决方案,但您可以通过持续集成(例如 TeamCity 或 Jenkins)、在每次构建时使用自定义 msbuild 任务或使用一些 VCS 功能(git 挂钩)来自动化它

标签: c# visual-studio nuget projects-and-solutions


【解决方案1】:

似乎我需要在主项目中重新添加通过 nuget 包含的依赖项,以便使用它们为单元测试项目中的单元测试编写代码。

那是因为 Visual Studio / MSBuild 试图变得聪明并且只将引用引入项目单元测试中,它检测到项目“main”需要它。这样做是为了避免项目单元测试中的间接引用污染。您可以参考accepted answer了解更多详情。

我的问题是:有没有办法在测试项目中自动包含“主要”nuget 引用?

简单的答案是肯定的,但不确定这种方法对你是否有效。贴在这里,希望对你有所帮助。

您可以将要添加到 UI-testing 的包列表从“主”项目中的 package.config复制到 UI-testing 项目中的 package.config /strong>,例如:

  <package id="EntityFramework" version="6.1.3" targetFramework="net452" />
  <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net452" />
  <package id="NUnit" version="3.7.1" targetFramework="net452" />

然后 nuget 会在你构建 UI 测试时恢复这些包,你需要做的是使用包管理器控制台中的 NuGet 命令行:

Update-Package -Reinstall -ProjectName [name of your target project]

强制将包引用重新安装到 UI 测试项目中。

【讨论】:

  • 这不是一个超级简洁的解决方案,但它可以作为一个相当不错的解决方法,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 2017-09-16
  • 1970-01-01
相关资源
最近更新 更多