C# 从.Net 4.6.1单元测试引用.Net标准项目时缺少方法异常

C# 从.Net 4.6.1单元测试引用.Net标准项目时缺少方法异常,c#,mstest,.net-standard,vstest,.net-standard-2.0,C#,Mstest,.net Standard,Vstest,.net Standard 2.0,如果单元测试项目引用.Net标准2.0程序集,则在运行使用System.IO.Compression.ZipFile.Open的.Net 4.6.1单元测试时,我遇到以下异常: System.MissingMethodException: Method not found: 'System.IO.Compression.ZipArchive System.IO.Compression.ZipFile.Open(System.String, System.IO.Compression.ZipArc

如果单元测试项目引用.Net标准2.0程序集,则在运行使用
System.IO.Compression.ZipFile.Open
的.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 Core项目)创建的,并将引用添加到
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>


这个解决方案对于一个单元测试项目非常有效,我还必须在一个基于.NET Framework 4.7构建的控制台应用程序上使用它。