我正在将NuGet上的一个小型库移植到.NET Core.
我为主项目和测试创建了.NET Standard 1.6类库,并复制了代码.我更改了单元测试以使用XUnit属性和断言而不是NUnit.
除此之外,我几乎遵循文档中的说明,因此我添加了以下NuGet包:
唉,(1)Test Explorer没有找到我的单元测试,(2)当我运行时dotnet test
,我得到以下内容:
开始测试执行,请稍候...无法找到testhost.dll for source'[...].Tests.dll'.确保测试项目具有包"microsoft.testplatform.testhost"的nuget引用.
我实际上已经添加了建议的Microsoft.TestPlatform.TestHost
NuGet包,但是没有改变任何东西.
那么这里的问题是什么?
我正在使用VS2017.不是说我觉得它有所作为.
更新:更改测试项目Class Library (.NET Standard)
以Class Library (.NET Core)
解决问题.我仍然不明白为什么这应该有所作为.
Sha*_*tin 10
将测试项目从类库(.NET标准)更改为类库(.NET Core)修复了该问题.我仍然不明白为什么这应该有所作为.
单元测试是我们运行的应用程序.要构建这样的应用程序,我们必须指定运行时和应用程序模型.当我们以.NET Standard为目标时,运行时和应用程序模型是模糊的; MSBuild不知道是否针对.NET Framework,.NET Core,Mono/Xamarin或其他符合.NET Standard标准的平台进行构建.定位.NET Core为MSBuild提供了必需的输入,MSBuild现在知道如何解析所有引用的程序集/项目并选择适当的框架版本.
但事实并非如此.在过去,您总是会使用类库进行单元测试; 它从未被认为是您可以运行的应用程序,而是您将提供给测试运行器的类和方法的集合.
过去我们没有.NET Standard,这是一个模棱两可的目标.当MSBuild看到.NET Standard时,它需要更多信息."好的,您希望使用哪种符合.NET标准的运行时来生成可运行的输出?" 例如netstandard1.2
,如果我们有目标,那么MSBuild将无法知道是否针对.NET Core 1.0,.NET Framework 4.5.1,Windows 8.1或其他几个netstandard1.2
兼容平台进行构建.
开始测试执行,请稍候...无法找到testhost.dll for source'[...].Tests.dll'.确保测试项目具有包"microsoft.testplatform.testhost"的nuget引用.
如果我们不指定netcoreapp
,那么MSBuild假定我们正在使用完整框架.在这种情况下,它期望目标组件,包括testhost.dll
,在bin
.如果它们不是(并且如果我们针对.NET Standard构建它们将不会),那么我们将收到上述错误.
归档时间: |
|
查看次数: |
3593 次 |
最近记录: |