Список всех доступных сборок .NET - PullRequest
11 голосов
/ 30 января 2009

Каков наилучший способ перечисления всех доступных сборок .NET 2.0?

Примером необходимого списка является тот, который MS Visual Studio показывает, когда вы делаете «Добавить ссылку ...» на вкладке .NET.

Я читал, что Visual Studio использует свою собственную конфигурацию каталогов, GAC - другую, а .NET - другую. Любые идеи о том, как я могу узнать, где эти каталоги в портативном компьютере (например, на другом компьютере могут быть установлены окна на диске D:)?

Из представленной информации должна быть возможность Assembly.Loadxxxx () it.

Примечание. Это следует делать программно, например, без использования gacutil (если только он не предоставляет API C #). Цель всего этого - создать собственный динамический редактор сценариев, чтобы вы понимали необходимость доступа к этой информации.

Ответы [ 2 ]

9 голосов
/ 30 января 2009

Прежде всего, существует важное различие между эталонными сборками и сборками в GAC. Чтобы скомпилировать код, вам нужна справочная сборка. Для запуска кода вам потребуется либо копия сборки в той же папке, что и ваш .exe, либо сборка в GAC.

Обычно, когда вы устанавливаете приложение .NET, его установщик копирует сборки, которые он использует в GAC. Эти сборки не могут использоваться в качестве ссылочных сборок, вы не можете узнать, в какой папке они хранятся, поэтому вы не можете указать компилятору правильное значение аргумента командной строки / reference. Что ж, вы можете узнать, но Microsoft пыталась сделать это как можно сложнее с помощью надстройки оболочки.

При установке приложения .NET, которое позволяет использовать его сборки в собственной программе, происходит что-то другое. Как .NET Framework. Он сделает две копии каждой сборки. Один идет в GAC, другой идет в «известную» локацию. Для платформы .NET эти общеизвестные местоположения - это c: \ windows \ microsoft.net \ и c: \ program files \ reference сборки. Последняя папка начала использоваться .NET 3.0 и выше.

В диалоговом окне «Добавить ссылку» Visual Studio используется раздел реестра, в котором перечислены эти известные местоположения. Есть пара, но важным является HKLM\Software\Microsoft\.NETFramework\AssemblyFolders.

Короче говоря: вы можете использовать этот раздел реестра для создания того же списка, что и в диалоговом окне Добавить ссылку. Но это не на 100% надежно, вы можете пропустить эталонные сборки, которые какой-либо продукт скопировал в другое место. Вы должны использовать вкладку Обзор в VS, чтобы добавить ссылки на них. И обыщите весь диск, чтобы найти их самостоятельно.

0 голосов
/ 30 января 2009

Единственная информация, которую я нашел ранее об этой проблеме, это это , но я так и не смог использовать эту информацию.

Судя по всему, довольно сложно обойти каталог, чтобы найти все файлы .DLL, но, возможно, это то, что вам нужно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...