2017-09-21 30 views
3

ユニットテストプロジェクトが.Net Standardを参照している場合は、System.IO.Compression.ZipFile.Openを使用する.Net 4.6.1ユニットテストを実行するときに次の例外が発生します。 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コア1)を使用して作成されたとの言及が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標準クラス私はvstest.console.exeを使用して、Visual Studioで、コマンドラインからテストエクスプローラを使用して同じエラーが出る

namespace StandardClassLib 
{ 
    public static class Zipper 
    { // Class is empty. 
    } 
} 

:ライブラリは、単になしのメソッドを持つ単一のクラスです。

この動作は、単体テストプロジェクトでのみ表示されることに注意してください。コンソールアプリケーションはうまく動作します。

これがなぜ機能しないのか、この問題の回避策(可能な場合)を理解できる人は誰でも助けてくれますか?

答えて

8

これは、テストプロジェクトでビルドプロセス中に生成する必要がある追加のバインディングリダイレクトが必要なために発生します。プロジェクトのプロパティ]ダイアログボックスが自動生成バインディングリダイレクトするオプションを有しているが、これはライブラリの効果がありません(これは古典的なユニットテストプロジェクトがある)ので、あなたが含まれるように手動で.csprojファイルを編集する必要がありますについては

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

を詳細と説明は、GitHubの問題Issues with .NET Standard 2.0 with .NET Framework & NuGetの発表とそのディスカッションの問題を参照してください。

関連する問題