我有一个.Net Core API项目。 它必须使用.Net Framework的一些第三方库(与网络核心不兼容)所以我们在.csproj中将TargetFramework属性从“netcoreapp2.0”更改为“net47”:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<!-- <TargetFramework>netcoreapp2.0</TargetFramework> -->
<TargetFramework>net47</TargetFramework>
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
```
除了我无法在此创建测试项目之外,一切都运行正常。
我喜欢使用NUnit
我尝试创建.net核心测试项目(同时使用MS Unit Test和XUnit),但他们都无法运行测试。
简单地忽略“运行测试”。
我还创建了一个.Net Framework测试项目,在这种情况下,当测试尝试使用“假”.Net Core项目中的某些类时,我在运行时出错。
错误是这样的:
消息:System.BadImageFormatException:无法加载文件或程序集“MyCompany.ProjectA.Api,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”或其依赖项之一。试图加载格式不正确的程序。
使用ReSharper的另一位开发人员可以毫无问题地运行使用.Net Core创建的测试 它被发现(使用ReSharper)并且可以调试它。
请不要建议我不要在项目文件中使用“net47”。 这不是一个选择。
其他信息。
测试项目正在加载正确的包:
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.6.0" />
<PackageReference Include="NUnit" Version="3.9.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.9.0" />
同样的问题(在“运行”中发现或忽略测试点)添加这些:
<PackageReference Include="MSTest.TestAdapter" Version="1.2.0" />
<PackageReference Include="MSTest.TestFramework" Version="1.2.0" />
当忽略测试时,控制台中的错误是:
[19/02/2018 16:01:28 Warning] Exception System.InvalidOperationException, Exception thrown executing tests in D:\Data\GIT\MyCompany.ProjectA.UnitTests.API_2\bin\Debug\net47\MyCompany.ProjectA.API.dll
[19/02/2018 16:01:28 Warning] Operation is not valid due to the current state of the object.
[19/02/2018 16:01:28 Warning] at Mono.Cecil.ModuleDefinition.ProcessDebugHeader()
at Mono.Cecil.ModuleDefinition.ReadSymbols(ISymbolReader reader)
at Mono.Cecil.ModuleReader.ReadSymbols(ModuleDefinition module, ReaderParameters parameters)
at Mono.Cecil.ModuleReader.CreateModuleFrom(Image image, ReaderParameters parameters)
at Mono.Cecil.ModuleDefinition.ReadModule(Stream stream, ReaderParameters parameters)
at Mono.Cecil.ModuleDefinition.ReadModule(String fileName, ReaderParameters parameters)
at NUnit.VisualStudio.TestAdapter.NavigationDataProvider.CacheNewTypes(String assemblyPath, IDictionary`2 types) in C:\Users\Terje\Source\Repos\nunit\nunit3-vs-adapter\src\NUnitTestAdapter\NavigationDataProvider.cs:line 103
at NUnit.VisualStudio.TestAdapter.NavigationDataProvider.GetNavigationData(String className, String methodName) in C:\Users\Terje\Source\Repos\nunit\nunit3-vs-adapter\src\NUnitTestAdapter\NavigationDataProvider.cs:line 48
at NUnit.VisualStudio.TestAdapter.TestConverter.MakeTestCaseFromXmlNode(XmlNode testNode) in C:\Users\Terje\Source\Repos\nunit\nunit3-vs-adapter\src\NUnitTestAdapter\TestConverter.cs:line 144
at NUnit.VisualStudio.TestAdapter.TestConverter.ConvertTestCase(XmlNode testNode) in C:\Users\Terje\Source\Repos\nunit\nunit3-vs-adapter\src\NUnitTestAdapter\TestConverter.cs:line 79
at NUnit.VisualStudio.TestAdapter.NUnit3TestExecutor.RunAssembly(String assemblyPath, TestFilter filter) in C:\Users\Terje\Source\Repos\nunit\nunit3-vs-adapter\src\NUnitTestAdapter\NUnit3TestExecutor.cs:line 249
[解决]
我已从API项目中删除RID,然后找到并运行。
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
我尝试将其更改为“win-x86”或将测试项目从非选择(=任何CPU)更改为x86或x64。 这些都不是一个好的解决方案。
答案 0 :(得分:0)