我正在将NuGet上的小型库移植到.NET Core。
我已经为主要项目和测试创建了.NET Standard 1.6类库,并在代码上进行了复制。我将单元测试更改为使用xUnit属性和断言而不是NUnit。
除此之外,我几乎按照文档中的说明进行操作,因此添加了以下NuGet软件包:
las,(1)测试资源管理器找不到我的单元测试,并且(2)运行时dotnet test
,我得到以下信息:
开始执行测试,请稍候...找不到源'[...]。Tests.dll'的testhost.dll。确保测试项目具有包“ microsoft.testplatform.testhost”的nuget引用。
我实际上已经添加了建议的Microsoft.TestPlatform.TestHost
NuGet程序包,但这并没有改变任何内容。
那么这是什么问题呢?
我正在使用Visual Studio2017。不是我认为这有所作为。
更新:将测试项目从更改Class Library (.NET Standard)
为Class Library (.NET Core)
解决问题。我仍然不明白为什么这应该有所作为。
将测试项目从类库(.NET Standard)更改为类库(.NET Core),可以解决此问题。我仍然不明白为什么这应该有所作为。
单元测试是我们运行的应用程序。要构建这样的应用程序,我们必须指定运行时和应用程序模型。当我们以.NET Standard为目标时,运行时和应用程序模型是模棱两可的。MSBuild不知道是否要针对.NET Framework,.NET Core,Mono / Xamarin或其他兼容.NET Standard的平台进行构建。定向.NET Core可为MSBuild提供所需的输入,MSBuild现在知道如何解析所有引用的程序集/项目并选择适当的框架版本。
但是事实并非如此。过去,您总是将类库用于单元测试;它从未被视为可以运行的应用程序,而是可以输入到测试运行程序中的类和方法的集合。
过去,我们没有.NET标准,这是一个模棱两可的目标。当MSBuild看到.NET Standard时,它需要更多信息。“好吧,您想使用哪个.NET Standard兼容运行时生成可运行输出?” 例如netstandard1.2
,如果我们确定了目标,则MSBuild将不知道是否要针对.NET Core 1.0,.NET Framework 4.5.1,Windows 8.1或其他几个netstandard1.2
兼容平台进行构建。
开始执行测试,请稍候...找不到源'[...]。Tests.dll'的testhost.dll。确保测试项目具有包“ microsoft.testplatform.testhost”的nuget引用。
如果未指定netcoreapp
,则MSBuild将假定我们使用的是完整框架。在这种情况下,它期望目标程序集(包括)testhost.dll
在中bin
。如果不是(如果我们不是根据.NET Standard构建的,则不是),那么我们将收到上述错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句