2017-06-22 23 views
1

假设我有一个使用NuGet管理其第三方依赖项的“主”C#项目。通过本地项目引用导入NuGet引用

现在我们假设我在包含主项目作为参考的主项目旁边创建一个单元测试项目。

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

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

+0

您可以将您的主要项目包含在单元测试中作为Nuget包及其依赖项,当然,如果您想要并可以将主项目作为nuget包打包。 –

+0

@GeorgeAlexandria这似乎是一个低效率的解决方案 - 除非有一些方法可以在每次迭代更改时简洁地自动执行该过程?单元测试过程往往涉及很多小的修复(或至少IME)。 – Xenoprimate

+0

是的,这是一个效率低下的解决方案,但您可以使用持续集成(例如TeamCity或Jenkins)自动化,使用每个构建的自定义msbuild任务或使用某些VCS功能(git钩子) –

回答

0

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

这是因为Visual Studio/MSBuild试图变得聪明,只能将引用转换为项目单元测试,它会检测为项目“main”需要的项目。它是这样做的,以项目单元测试避免间接参考污染。你可以参考accepted answer了解更多细节。

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

简单的回答是是的,但不知道这种方法是否对你有效。我张贴在这里,希望它能给你一些帮助。

可以副本要从package.config在“主”项目添加到UI测试的package.config在UI测试项目软件包列表,如:

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

然后,当你建立UI测试的NuGet将恢复这些软件包,你需要做的就是使用程序包管理器控制台的NuGet命令行是什么:

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

到FO rce将软件包引用重新安装到UI测试项目中。

+0

这不是一个超级整洁的解决方案但它会作为一个相当体面的解决方法,谢谢。 – Xenoprimate