Ich habe Google danach gesucht und konnte keine Lösung für das Problem finden.
Meine Website verweist auf DAL (benutzerdefinierte DLL), die auf Enterprise Library-Datenzugriffskomponenten verweist.
Ich habe die Enterprise Library aus dem NuGet Package Manager
hinzugefügt, und wenn ich versuche, die Website zu erstellen, wird dieser Kompilierungsfehler angezeigt:
Fehler 44 Datei oder Assembly 'Microsoft.Practices.EnterpriseLibrary.Common' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Die Manifestdefinition der gefundenen Assembly stimmt nicht mit der Assemblyreferenz überein
Ich habe versucht, Copy Local = True
in der DAL für Enterprise Library dlls
einzustellen, und die DLLs werden zusammen mit DAL dll
in das Bin-Verzeichnis der Website übertragen. Der Fehler wird jedoch weiterhin angezeigt.
Kann mich jemand auf diesem Weg führen ....
Das Problem ist, dass die von Ihnen verwendete DLL und die, auf die in Ihrem Projekt verwiesen wird, unterschiedlich sind. Ich bin nicht sicher, was der Unterschied im Manifest ist, aber es könnten Version und/oder öffentlicher Schlüssel sein.
Sie haben ein paar Dinge zu versuchen:
Öffnen Sie die Eigenschaften für den Verweis DLL in Ihrem Projekt, und setzen Sie Version Specific auf false.
Entfernen Sie den Verweis, löschen Sie die DLL aus dem Ordner bin und fügen Sie den Verweis erneut hinzu.
Sie können auch eine andere/falsche Version in Ihrem GAC haben. Um sicherzustellen, dass Sie immer eine bestimmte, bekannte Version verwenden, erstellen Sie einen Assembly-Ordner relativ zu Ihrem Projektverzeichnis, kopieren Sie die DLL in dieses Verzeichnis und fügen Sie einen Verweis auf DLL im Assembly-Verzeichnis statt auf eine hinzu in GAC oder an anderer Stelle auf Ihrer Maschine. Dadurch wird sichergestellt, dass nur die spezifische Version verwendet wird, die Sie für die Anwendung vorgesehen haben, und nicht eine Version, die zu einem späteren Zeitpunkt auf Ihrem Computer aktualisiert wird.
NuGet CommonServiceLocator
Install-Package CommonServiceLocator
Diese DLL befindet sich wahrscheinlich im GAC auf Entwicklermaschinen im Rahmen einiger Windows-Anwendungsinstallationen (meine besten Vermutungen sind Visual Studio oder SSMS) .. _ Unser Bestes, um den GAC so sauber wie der Produktionsserver zu halten.
Um die Datei manuell herunterzuladen, gehen Sie zu https://servicelocation.codeplex.com/
Um die Build-Warnungen und -Fehler zu beheben, müssen Sie einfach einen NuGet-Befehl ausführen, um das Paket CommonServiceLocation zu installieren. Das Paket enthält nur diese eine DLL-Datei. Microsoft hat seit 2008 nur 1 Version (1.0.0.0) dieser Datei veröffentlicht. Die Datei ist mit allen .NET-Versionen und allen Unity-Versionen vollständig kompatibel.
Ich konnte dieses Problem beheben, indem ausALLEdie Logging-Referenzen in der Datei app.config entfernt wurden:
, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null
dh:
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings,
Microsoft.Practices.EnterpriseLibrary.Logging,
Version=6.0.0.0, Culture=neutral, PublicKeyToken=null"
requirePermission="true" />
Wird:
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings,
Microsoft.Practices.EnterpriseLibrary.Logging"
requirePermission="true" />
Das ist nicht ideal, aber es funktioniert ...
Das Enterprise Library Configuration Tool setzt die Werte zurück, sodass Sie darauf achten müssen. Ich weiß, dass es eine Möglichkeit gibt, die Konfigurationsdatei anzuweisen, diese falschen Einstellungen zu akzeptieren - aber ich bin nicht sicher, wie.
Durch das Festlegen der PublicKeyToken-Werte für alle EnterpriseLibrary-Referenzen in Web.Config wurde dies für mich behoben.