从 .Net 4.6.1 单元测试引用 .Net 标准项目时缺少方法异常
Missing Method Exception When Referencing .Net Standard Project From .Net 4.6.1 Unit Test
当 运行 使用 System.IO.Compression.ZipFile.Open
的 .Net 4.6.1 单元测试时,如果单元测试项目引用 .Net Standard 2.0 程序集,我会收到以下异常:
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
和我的标准 class 库:
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 标准 class 库只是一个 class 没有方法:
namespace StandardClassLib
{
public static class Zipper
{ // Class is empty.
}
}
我在 Visual Studio 中使用 Test Explorer 并在命令行中使用 vstest.console.exe
.
时遇到同样的错误
请注意,此行为仅在单元测试项目中出现,控制台应用程序工作正常。
任何人都可以帮助我理解为什么这不起作用以及解决此问题的方法(如果可能)吗?
发生这种情况是因为测试项目需要一些额外的绑定重定向,这些重定向需要在构建过程中生成。虽然项目属性对话框有一个自动生成绑定重定向的选项,但这对库(经典单元测试项目)没有影响,因此您需要手动编辑 .csproj 文件以包括:
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
有关更多详细信息和解释,请参阅公告 GitHub 问题 Issues with .NET Standard 2.0 with .NET Framework & NuGet 及其链接的讨论问题。
当 运行 使用 System.IO.Compression.ZipFile.Open
的 .Net 4.6.1 单元测试时,如果单元测试项目引用 .Net Standard 2.0 程序集,我会收到以下异常:
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
和我的标准 class 库:
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 标准 class 库只是一个 class 没有方法:
namespace StandardClassLib
{
public static class Zipper
{ // Class is empty.
}
}
我在 Visual Studio 中使用 Test Explorer 并在命令行中使用 vstest.console.exe
.
请注意,此行为仅在单元测试项目中出现,控制台应用程序工作正常。
任何人都可以帮助我理解为什么这不起作用以及解决此问题的方法(如果可能)吗?
发生这种情况是因为测试项目需要一些额外的绑定重定向,这些重定向需要在构建过程中生成。虽然项目属性对话框有一个自动生成绑定重定向的选项,但这对库(经典单元测试项目)没有影响,因此您需要手动编辑 .csproj 文件以包括:
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
有关更多详细信息和解释,请参阅公告 GitHub 问题 Issues with .NET Standard 2.0 with .NET Framework & NuGet 及其链接的讨论问题。