Найти расположение стандартных сборок .NET? - PullRequest
5 голосов
/ 08 июня 2011

Для небольшого компилятора C # мне нужно найти пути к стандартным сборкам .NET, таким как System.dll, System.Xml.dll и почти все сборки, перечисленные на вкладке «.NET» в «Добавить ссылку»."Окно в Visual Studio (2010).
Я бы использовал абсолютные пути, но у меня есть ощущение, что это может сломаться в исключительных случаях.

Ответы [ 3 ]

5 голосов
/ 08 июня 2011

При компиляции вы можете использовать эталонные сборки под %ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework

Также смотрите разделы реестра под (HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER)\SOFTWARE\Microsoft\.NETFramework и (HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER)\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders, как описано в KB306149 .

GAC предназначен для использования во время выполнения.

5 голосов
/ 08 июня 2011

Все они хранятся в GAC по адресу %WINDIR%\assembly, который можно просмотреть в проводнике Windows.

Фактические библиотеки DLL можно найти в подпапках GAC, GAC_32 и * 1006.* папки, вроде бы зависящие от их версии.На моей машине у меня есть три дополнительные папки NativeImages, которые также содержат DLL-файлы GAC.

Проводник Windows не позволит вам просматривать эти папки напрямую (насколько я могу судить), но выможно получить через командную строку.

Полный путь к DLL в GAC:

%WINDIR%\assembly\GACFOLDER\FILENAME\VERSION__PUBLICKEYTOKEN\FILENAME.dll

. Например, на моей машине разные версии System.Xml.dll могутможно найти в C:\WINDOWS\assembly\GAC_MSIL\System.Xml\2.0.0.0__b77a5c561934e089 C:\WINDOWS\assembly\GAC\System.Xml\1.0.5000.0__b77a5c561934e089 C:\WINDOWS\assembly\NativeImages1_v1.1.4322\System.Xml\1.0.5000.0__b77a5c561934e089_2775eea1 C:\WINDOWS\assembly\NativeImages1_v1.1.4322\System.Xml\1.0.5000.0__b77a5c561934e089_4c5fbb92

1 голос
/ 08 июня 2011

Большинство из них находятся в GAC, и я полагаю, что вам поручили посмотреть с вашим собственным компилятором.Документ, который помог с компиляторами и т. Д., Был найден в .NET Framework в более старых версиях, в папке разработчика инструментов.

Я бы не стал категорически против "жесткого кодирования" папки, как таковой, новы будете заблокированы для конкретной версии.Я не предполагаю, что это правильный путь, но расположение .NET вряд ли изменится, и, скорее всего, ваш компилятор застрял в определенной версии.Если вы идете по этому пути ... Чтобы быть в безопасности на разных машинах, вы должны использовать% WINDIR%, чтобы определить, где установлены окна (попробуйте cd% WINDIR% в командной строке, если вы никогда не использовали это и хотите увидеть, что переменнаяделает).Академическое упражнение закончено.

Одна вещь, на которую стоит обратить внимание, - это то, что вы пытаетесь лучше обслуживать, изучая направление «компилятор как сервис», которое MS движется в vNext (?).Эта идея / функция уже присутствует в Mono (с открытым исходным кодом .NET).

...