2011-12-08 22 views
10

Szukałem google i nie mogłem znaleźć rozwiązania tego problemu.Nie można załadować pliku lub zespołu "Microsoft.Practices.EnterpriseLibrary.Common" lub jednej z jego zależności.

Moja strona internetowa odnosi się do DAL (custom dll), która odwołuje się do komponentu Enterprise Library Data Access Components.

Dodałem Bibliotekę Enterprise z NuGet Package Manager i gdy próbuję zbudować stronę Błąd kompilacji wyskakuje:

Błąd 44 nie można załadować pliku lub zestawu „Microsoft.Practices.EnterpriseLibrary.Common” lub jedną z jego zależności. Definicja manifestu zlokalizowanego Zgromadzenia nie odpowiada odwołaniu do zestawu

Próbowałem ustawienie Copy Local = True w DAL dla Enterprise Library dlls i bibliotek DLL są przenoszone do katalogu bin stronie internetowej wraz z DAL dll, ale nadal wyskakuje error w górę.

Czy ktoś mnie prowadził w tej sprawie ....

+0

Proszę się upewnić, że wszystkie pliki DLL EL znajdują się w folderze, włączając w to plik .Common. –

+1

Wspomniałem również wyżej, że biblioteki DLL są już skopiowane do folderu bin witryny –

+0

Czy to wydanie, gdy projekt jest ustawiony na profil klienta .net, spróbuj zmienić go na pełną kropkę? Sory, jeśli odpowiedź jest błędna – adopilot

Odpowiedz

8

Problemem jest to, że DLL, którego używasz, a ten, który jest wymieniony w projekcie są różne. Nie jestem pewien, czym jest różnica w manifeście, ale może to być wersja i/lub klucz publiczny.

Masz kilka rzeczy, aby spróbować:

  1. Otwórz właściwości na odniesienie DLL w projekcie i ustawić specyficzne dla wersji na false.

  2. Usuń odwołanie, usuń bibliotekę DLL z folderu bin i ponownie dodaj odwołanie.

  3. Możesz również mieć inną/niepoprawną wersję w swoim GAC. Aby upewnić się, że zawsze używasz konkretnej, znanej wersji, utwórz folder złożeń względem katalogu projektu, skopiuj bibliotekę DLL do tego katalogu i dodaj odwołanie do biblioteki DLL w katalogu złożeń, a nie do pliku w GAC lub gdzie indziej na twoim komputerze. Zapewni to, że zostanie użyta tylko określona wersja, dla której wybrano aplikację, a nie dowolna wersja, która jest aktualizowana na komputerze w późniejszym czasie.

+1

Ustawienie 'Version Specific = true' rozwiązało problem. Myślę, że było to spowodowane wieloma wersjami 'EnterpriseLibrary' zainstalowanymi w moim systemie i tworzeniem innego katalogu i umieszczenie tam bibliotek dll może mieć ten sam efekt ... –

+0

Dla mnie (2) działało. Usunąłem odniesienia, które dawały błąd i ponownie je odczytywałem –

4

Nuget CommonServiceLocator

Install-Package CommonServiceLocator 
2

ten dll jest prawdopodobne, aby być w GAC na maszynach programistycznych w ramach jakiejś instalacji aplikacji Windows (moje najlepsze domysły są Visual Studio lub SSMS). Dlatego prawdopodobnie otrzymamy ostrzeżenia lub błędy na maszynie budującej, które staramy się, aby GAC był tak czysty jak serwer produkcyjny.

Aby ręcznie pobrać plik, można przejść do https://servicelocation.codeplex.com/

Aby rozwiązać ostrzeżenia i błędy kompilacji, wystarczy uruchomić polecenie Nuget aby zainstalować CommonServiceLocation package. Pakiet zawiera tylko ten jeden plik DLL. Microsoft wydał tylko 1 wersję (1.0.0.0) tego pliku od 2008. Plik jest w pełni kompatybilny ze wszystkimi wersjami .NET i wszystkimi wersjami Unity.

0

Dzięki za te informacje

Mam ten sam problem, i zmodernizowane Framework od 2,0 do 4,0, próbowałem wszystkiego, co pan wspomniał, ale rozwiązanie było ustawić wartości TokenKluczaPublicznego dla każdego z odniesieniem EnterpriseLibrary w plik Web.Config

0

Ten sam problem! Właśnie wyczyściłem kompilację i odbudowałem projekt. Tak więc wszystkie stare rzeczy zostały usunięte, a poprawione wersje zastąpione. Rozwiązany.

0

udało mi się rozwiązać ten problem poprzez usunięcie z WSZELKIE odniesień rejestrowania w pliku app.config ::

, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null 

tj

<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" /> 

Staje:

 <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, 
Microsoft.Practices.EnterpriseLibrary.Logging" 
requirePermission="true" /> 

To nie jest idealne, ale działa ...

Narzędzie Enterprise Library Configuration Tool ustawia wartości z powrotem, więc musisz to obejrzeć. Wiem, że jest sposób, aby powiedzieć plikowi konfiguracyjnemu, aby zaakceptował te źle dopasowane ustawienia - ale nie jestem pewien jak.

Powiązane problemy