6

Ich habe eine .NET Standard 1.4-Klassenbibliothek, die auf das System.ComponentModel.Annotations (4.3.0) NuGet-Paket verweist.Konnte Datei oder Assembly nicht laden 'System.ComponentModel.Annotations, Version = 4.1.0.0

Ich verweise dann diese Klassenbibliothek von einem .NET Framework 4.6.2-Testprojekt. Es baut in Ordnung, aber zur Laufzeit bekomme ich folgende Fehlermeldung:

System.IO.FileLoadException occurred HResult=0x80131040
Message=Could not load file or assembly 'System.ComponentModel.Annotations, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Ich habe versucht, einen Verweis auf die System.ComponentModel.Annotations Zugabe (4.3.0) NuGet Paket aus dem net462 Projekt, aber das hat nicht machen jede Differenz.

Ich habe versucht, einen Verweis auf die .NET-Standard-Bibliothek aus dem net462-Projekt, aber immer noch kein Glück.

Fehle ich hier etwas? Ist das ein bekannter Fehler, wenn ja, gibt es eine Arbeit?

Jede Hilfe wird sehr geschätzt!

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

Dies zwingt den Build-Prozess eine .dll.config Datei im Ausgabeverzeichnis mit dem nötigen zu erstellen:

+0

Verwenden Sie das Attribut [bindingRedirect in app.config] (https://msdn.microsoft.com/en-us/library/7wd6ex19.aspx), um die Verwendung der Bibliothek 4.3.0.0 zu erzwingen – magicandre1981

+1

Für alle fehlende Version = 4.2 .0.0: Das Installieren von System.ComponentModel.Annotations 4.4.1 von NuGet Gallery hat es für mich repariert. – user764754

+0

@ user764754 Vielen Dank! – k3flo

Antwort

8

In vielen Fällen kann dies, indem Sie die folgenden die die csproj Datei Ihres Testprojekt gelöst werden Weiterleitungen

Der Grund ist, dass "klassische" csproj-Test-Projekte echte "Bibliotheken" sind und keine verbindlichen Weiterleitungen standardmäßig benötigen. Aber das Ausführen von Komponententests erfordert dies. Dies wird nur dann ein Problem, wenn referenzierte Projekte diese Weiterleitungen benötigen, um korrekt zu funktionieren. Dies funktioniert normalerweise, wenn alle NuGet-Pakete, die die referenzierte Bibliothek verwendet, direkt installiert werden, aber mit den neuen NuGet-Paketen PackageReference nicht.

Siehe andere Fälle, in denen dieses Update geholfen hat:

Could not load file or assembly Microsoft.Extensions.DependencyInjection.Abstractions, Version=1.1.0.0

When using .Net Standard 1.4 in a library and .Net framework 4.6.1 in and application, unable to load file System.IO.FileSystem, Version=4.0.1.0

+1

Dies funktioniert nicht mit .NET 4.6.1 Web-Anwendungen.Dieses Problem scheint bei der Entwicklung gegen eine Webanwendung ein ständiges Problem zu sein. Das Einzige, was ich tun konnte, war, meine Webapp zu kompilieren und sie aus der Lösung zu entfernen, bevor ich IIS manuell debugge. Das ist so ein Schmerz, mit dem man umgehen muss. – RashadRivera

0

In meinem Fall, ich 4.0.0 wurde mit, so dass ich regelte es durch in

Zugabe
<runtime> 
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="System.ComponentModel.Annotations" 
         publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
    <bindingRedirect oldVersion="4.1.0.0" newVersion="4.0.0.0"/> 
    </dependentAssembly> 

Anpassung an die gewünschte Version.

+0

Wenn die Änderung durch meine Antwort angewendet wird, sollte diese bindende Umleitung automatisch von Msbuild generiert werden, wenn es Assemblyverweise während der Kompilierung vereinheitlicht. –

4

Ich hatte ähnliches Problem, aber keine der obigen Antworten hat mir geholfen. Es stellt sich heraus, dass Lösung sehr einfach ist, habe ich nur laufen in Package Manager folgenden Befehl ein:

Install-Package System.ComponentModel.Annotations -Version 4.1.0

+0

Keine sehr zufriedenstellende Lösung, aber das hat für mich funktioniert. –

0

Für mich keiner der anderen Lösungen gearbeitet .

Ich löste dies, indem ich manuell einen Verweis auf System.ComponentModel.DataAnnotations selbst (über Projekt -> Referenzen) hinzufügte, anstatt Visual Studio über das Glühbirnen-Schnellkorrekturmenü behandeln zu lassen.

Verwandte Themen