Использование Global Assembly Cache (GAC) - так, как это было разработано для - PullRequest
1 голос
/ 02 августа 2010

Является ли следующее решение единственной возможностью использовать библиотеки из GAC в коде?

Assembly lib = Assembly.Load("MyLibrary, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=31f5625abd53197f");

Console.WriteLine(lib.GetType("MyClass").GetMethod("Start").Invoke(obj, null));

Я немного сбит с толку - я много читал о GAC и знаю, как подписать сборку, установить и удалить сборку в GAC, но не знаю, как ее использовать и как она помогает программистам ( за исключением того, что он хранит разные версии одной и той же библиотеки безопасно). Хотелось бы, чтобы я мог нормально создавать классы, не заставляя вызывать методы, представленные выше.

Я не хочу никаких обходных путей, таких как: «изменение реестра Windows», потому что я не думаю, что GAC был разработан для таких манипуляций. Я хочу простой ответ: для чего нужен GAC, среда выполнения каким-то образом его использует?

Какой смысл использовать GAC, когда код становится действительно уродливым и сложным в управлении? Или может я что-то упустил? Может быть, я должен вручную скопировать сборку в мою локальную папку? Но я слышал, что это тоже сложно сделать.

Ответы [ 3 ]

5 голосов
/ 02 августа 2010

GAC создан для того, чтобы помочь вам иметь несколько версий вашего (для этого нужен открытый ключ - предотвращение конфликтов имен) сборки устанавливаются параллельно и доступныдля всей машины, а не только для каталога вашего приложения.

Так что да, доступ к сборкам из GAC с использованием номера версии - это почти то же самое, для которого был разработан GAC.; -)

Кстати: вы не должны динамически загружать вещи, когда вам это не нужно.

IOW: Если вы уже знаете имя класса и версию сборки, вы можете просто сослаться на эту сборкуи пропустить довольно существенное снижение производительности не только динамической загрузки сборки, но и вызова методов через отражение.(Вместо того, чтобы, например, повторно использовать их через интерфейсы или делегаты)

1 голос
/ 02 августа 2010

Если ваша сборка была ngen'ed или GAC'd, то приложение будет использовать это автоматически, если все (хэши и т. Д.) Совпадают.

0 голосов
/ 02 августа 2010

Если вы ссылаетесь на сборку в своем проекте, вы можете использовать ее как обычную библиотеку DLL, которой нет в GAC.

...