2013-02-15 18 views
8

Rozejrzałem się, aby znaleźć kilka postów na ten temat i jest ich wiele, ale nie dotyczy to mojego konkretnego pytania (które mogłem znaleźć).Odwoływanie się do biblioteki DLL z GAC w Visual Studio

Próbuję dodać niektóre DLL w moim projekcie, ale niektóre z nich pochodzą z:

C:\Windows\Microsoft.NET\Framework\v3.5\XXX.YYY.dll 

i co ja spodziewałem się tego należy pochodzących z GAC.

Proszę zasugerować mi najlepszą praktykę odwoływania się do bibliotek DLL w Visual Studio.

Odpowiedz

23

To nie tak działa. Korzystając z Project + Add Reference, zawsze dodajemy zespół odniesienia . To jest nigdy zespół z GAC. GAC jest szczegółem implementacji środowiska wykonawczego, jest on zawsze używany do dostarczania złożeń podczas wykonywania programu, nigdy wtedy, gdy jest on zbudowany.

To bardzo ważne, że działa w ten sposób, zawartość GAC na twoim komputerze nie będzie pasować do zawartości GAC na twoim komputerze użytkownika. Wiele środków zaradczych DLL Hell jest na miejscu, aby zapewnić, że mapowanie zestawu referencyjnego do zawartości GAC użytkownika zostanie zadbane dzięki dobrej diagnostyce, gdy maszyna użytkownika nie jest poprawnie skonfigurowana do wykonywania programu.

Jest to również powód, dla którego nie można bezpośrednio przeglądać folderów GAC po przejściu do c: \ windows \ assembly z Eksploratorem. Program obsługi rozszerzeń powłoki ukrywa szczegóły, aby uniemożliwić popełnienie błędu, na przykład dodanie zespołu GAC-ed jako zestawu referencyjnego. Ta sama procedura obsługi rozszerzeń nie jest zainstalowana dla zespołów .NET 4, możesz zajrzeć do c: \ windows \ microsoft.net \ assembly i zobaczyć strukturę GAC. Nie zakładaj, że teraz jest w porządku, aby dodawać odnośniki stamtąd, zespoły referencyjne są jeszcze ważniejsze w .NET 4, są zupełnie inne od zestawów uruchomieniowych.

Widzenie zespołu odwołań przechowywanego w C: \ Windows \ Microsoft.NET \ Framework \ v3.5 jest całkowicie normalne, to katalog główny dla zestawów referencyjnych .NET 3.5, takich jak System.Core.dll. W przypadku projektów .NET 4 zespoły referencyjne są przechowywane w plikach c: \ program files \ reference, powinny one byćodniesienia C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319. Sprawdź numer this answer, aby sprawdzić, jaki rodzaj niedopuszczalnej niedogodności może wynikać z nieużywania prawidłowych zestawów referencyjnych.

+4

Dobra odpowiedź, powinna być przyjęta jako poprawna odpowiedź :) –

+0

Ten działał dla mnie (zobacz mój post) [link (http://stackoverflow.com/questions/444655/how-can-i-reference- a-dll-in-the-gac-from-visual-studio) –

1

Te złożenia są zespołami programu .NET Framework 3.5. Pamięć podręczna montażu znajduje się na

%SystemRoot%\assembly 

można rozpowszechniać .NET Framework 3.5 (przewinąć do końca strony) wraz z projektem. Aso, jeśli korzystasz z projektów VS Setup, możesz po prostu użyć strony właściwości, aby się do niej odwołać.

Aby odwołać się do tych złożeń, można z łatwością kliknąć prawym przyciskiem myszy "References"> "Add Reference" i wybrać zespół z karty .NET. Informacje dotyczące zestawów GAC można znaleźć pod adresem this question.