Где блоки в.NET физически расположены?

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


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

Я также имею то, что я думаю, сторонняя ссылка на сборку:


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

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

15
задан Peter Mortensen 22 September 2013 в 06:27
поделиться

5 ответов

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

7
ответ дан 1 December 2019 в 01:45
поделиться

Я думаю, что они находятся в GAC, который расположен в %WINDIR%\Assembly. Больше информации в Demystifying the .NET Global Assembly Cache (на The Code Project).

14
ответ дан 1 December 2019 в 01:45
поделиться

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

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

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

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

4
ответ дан 1 December 2019 в 01:45
поделиться

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

2
ответ дан 1 December 2019 в 01:45
поделиться

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

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

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

2
ответ дан 1 December 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: