2017-09-21 12 views
3

단위 테스트 프로젝트가 .Net 표준을 참조하는 경우 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 코어 하나)를 사용하여 생성 된 참고 문헌은 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)) { } 
     } 
    } 

닷넷 표준 클래스 내가 vstest.console.exe를 사용하여 비주얼 스튜디오와 명령 줄에서 테스트 탐색기를 사용하여 동일한 오류가 발생

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 발표 및 링크 된 토론 문제를 참조하십시오.