使用目标框架在.Net Core项目上运行VS测试.Net Framework 4.7无效

时间:2018-02-19 15:59:15

标签: asp.net-core nunit

我有一个.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。 这些都不是一个好的解决方案。

1 个答案:

答案 0 :(得分:0)