2017-09-21 3 views
3

Beim Ausführen eines .Net 4.6.1-Komponententests, der System.IO.Compression.ZipFile.Open verwendet, erhalte ich die folgende Ausnahme, wenn das Komponententestprojekt auf einen .Net-Standard verweist 2.0 Montag:Fehlende Methodenausnahme beim Referenzieren von .Net-Standardprojekten Von .Net 4.6.1 Komponententest

System.MissingMethodException: Method not found: 'System.IO.Compression.ZipArchive System.IO.Compression.ZipFile.Open(System.String, System.IO.Compression.ZipArchiveMode)'. 
    at UnitTestProject.UnitTest1.TestMethod1() 

das Unit-Test-Projekt wurde mit dem VS 2017 Unit-Test-Projekt erstellt (nicht die .NET-Core-one) und Referenzen wurden System.IO.Compression.FileSystem und meine Standard-Klassenbibliothek hinzugefügt:

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)) { } 
     } 
    } 

Die .net-Standardklasse Bibliothek ist einfach eine einzige Klasse ohne Methoden:

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

ich den gleichen Fehler mit dem Test-Explorer in Visual Studio und von der Kommandozeile mit vstest.console.exe bekommen.

Beachten Sie, dass sich dieses Verhalten nur in einem Komponententestprojekt zeigt, Konsolenanwendungen funktionieren einwandfrei.

Kann mir jemand helfen zu verstehen, warum dies nicht funktioniert und eine Abhilfe für dieses Problem (wenn möglich)?

Antwort

8

Dies geschieht, weil das Testprojekt einige zusätzliche Bindungsumleitungen benötigt, die während des Erstellungsprozesses generiert werden müssen. Während das Projekt Eigenschaftendialog eine Option, um automatisch zu generieren Bindung Umleitungen hat, hat dies keine Auswirkungen für Bibliotheken (die klassische Einheit Testprojekte sind), so müssen Sie die CSPROJ Datei manuell bearbeiten, um die folgenden:

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

Für Weitere Details und Erklärungen finden Sie in der Ankündigung GitHub Ausgabe Issues with .NET Standard 2.0 with .NET Framework & NuGet und der damit verbundenen Diskussion Problem.

Verwandte Themen