2017-09-21 113 views
3

運行使用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使用測試資源管理器相同的錯誤。

請注意,此行爲僅表現出自身的單元測試項目,控制檯應用程序正常工作。

誰能幫我明白這是爲什麼不工作和解決方法對這個問題(如果可能的話)?

回答

8

這是因爲測試項目需要需要在構建過程中產生一些額外的綁定重定向。雖然項目屬性對話框中有一個選項來自動生成綁定重定向,這對圖書館沒有影響(其經典的單元測試項目),所以你需要手動編輯.csproj的文件,包括:

<PropertyGroup> 
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> 
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> 
</PropertyGroup> 

對於更多的細節和說明,請參閱相關公告GitHub的問題Issues with .NET Standard 2.0 with .NET Framework & NuGet及其聯討論的問題。

相關問題