缺少方法异常时引用的.Net标准项目从.net 4.6.1单元测试
问题描述:
运行使用System.IO.Compression.ZipFile.Open
一个.net 4.6.1单元测试时,我收到以下异常,如果单元测试项目引用.NET标准2.0装配:缺少方法异常时引用的.Net标准项目从.net 4.6.1单元测试
System.MissingMethodException: Method not found: 'System.IO.Compression.ZipArchive System.IO.Compression.ZipFile.Open(System.String, System.IO.Compression.ZipArchiveMode)'.
at UnitTestProject.UnitTest1.TestMethod1()
单元测试项目使用VS 2017年单元测试项目(而不是.NET的核心之一)创建并引用添加到System.IO.Compression.FileSystem
和我的标准类库:
using System.IO.Compression;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestProject
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
string zipfilename = "C:\\temp\\out.zip";
using (ZipArchive zipArchive = ZipFile.Open(zipfilename, ZipArchiveMode.Read)) { }
}
}
.net标准类图书馆是一个简单的单类的没有方法:
namespace StandardClassLib
{
public static class Zipper
{ // Class is empty.
}
}
我获得Visual Studio和命令行使用vstest.console.exe
使用测试资源管理器相同的错误。
请注意,此行为仅表现出自身的单元测试项目,控制台应用程序正常工作。
谁能帮我明白这是为什么不工作和解决方法对这个问题(如果可能的话)?
答
这是因为测试项目需要需要在构建过程中产生一些额外的绑定重定向。虽然项目属性对话框中有一个选项来自动生成绑定重定向,这对图书馆没有影响(其经典的单元测试项目),所以你需要手动编辑.csproj的文件,包括:
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
对于更多的细节和说明,请参阅相关公告GitHub的问题Issues with .NET Standard 2.0 with .NET Framework & NuGet及其联讨论的问题。