Где физически расположены сборки в .NET? - PullRequest
15 голосов
/ 08 февраля 2010

Я немного озадачен тем, где физически расположены сборки .NET. Возьми старый добрый LINQ . В моем файле web.config написано:

<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

Это ссылка на LINQ. Но где именно находится DLL, к которой это относится? В указанном выше пути нет никакого пути, и он не находится в моей папке bin.

У меня также есть ссылка сторонней сборки:

<add assembly="MapInfo.CoreTypes, Version=4.0.0.483, Culture=neutral, PublicKeyToken=F548BCBA69D4B8DA" />

Как узнать, где это находится на моем компьютере, если он не находится в папке bin?

Кроме того, если файл DLL находится в каталоге bin, могу ли я предположить, что на него не нужно ссылаться в web.config?

Ответы [ 6 ]

14 голосов
/ 08 февраля 2010

Я думаю, что они находятся в GAC , который находится в %WINDIR%\Assembly. Более подробная информация содержится в Демонтирование глобального кэша сборок .NET Проект кода ).

7 голосов
/ 08 февраля 2010

Сторонние сборки могут отсутствовать в GAC , см. Статью MSDN Как среда выполнения находит сборки для набора правил. Или попробуйте SysInternals FILEMON .

4 голосов
/ 28 января 2014

Некоторые из .Net сборок находятся в папке установки .Net

Например

C: \ Program Files (x86) \ Ссылка Сборки \ Microsoft \ Framework.NETFramework \ v4.0

Внутри сидят сборки. В .NETFramework на один уровень выше вы найдете разные версии .NET и соответствующие им сборки.

4 голосов
/ 08 февраля 2010

Сборка и исследование пути Fusion довольно сложны. Я скажу, что обычно .NET разрешает сборку из одного из двух мест:

  1. Либо он найдет его в локальном каталоге, например в текущем каталоге, подкаталоге bin, либо в другом месте, указанном логикой привязки сборки Fusion, или

  2. он найдет его в глобальном хранилище GAC, где сборки могут быть зарегистрированы и найдены по имени, версии и паре других атрибутов.

Чтобы ответить на ваш конкретный вопрос о каталоге 'bin', если вы используете ASP.NET (который я предполагаю из вашей ссылки на web.config), тогда да, вам не нужно указывать путь - ASP .NET позаботится о том, что нужно сделать, чтобы заставить .NET искать сборки в каталоге 'bin'.

2 голосов
/ 08 февраля 2010

Сборку можно найти в основном в одном из следующих мест:

  • GAC - C: \ Windows \ Assembly \ GAC (Microsoft предоставлено и сторонним в некоторых случаев)
  • Папка установки (большая часть сторонние элементы управления)

Вы можете получить путь и другую информацию о сборке, щелкнув правой кнопкой мыши по сборке в ссылках проекта и выбрав Свойства .

2 голосов
/ 08 февраля 2010

Краткий ответ: это зависит от многих вещей. Фреймворк имеет свои правила для загрузки сборок. Однако вы можете переопределить это, используя различные конфигурационные файлы (machine.config и т. Д.). Чтобы узнать, где в действительности находятся ваши сборки в конкретной системе, используйте Просмотр журнала привязки сборки . (Это часть SDK платформы. Просто откройте командную оболочку SDK и запустите fuslogvw.exe.)

...