Ответ 1
Сторонние сборки могут отсутствовать в GAC, см. статью MSDN Как Runtime Locates Assemblies для набора правил. Или попробуйте SysInternals FILEMON.
Я немного смущен тем, что сборки .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
?
Сторонние сборки могут отсутствовать в GAC, см. статью MSDN Как Runtime Locates Assemblies для набора правил. Или попробуйте SysInternals FILEMON.
Я думаю, что они находятся в GAC, который находится в %WINDIR%\Assembly
. Дополнительная информация находится в Демистификация кэша глобальной сборки .NET (at Code Project).
Сборка и поиск путей Fusion довольно сложны. Я скажу, что обычно .NET будет разрешать сборку из одного из двух мест:
Либо он найдет его в локальном каталоге, например, в текущем каталоге, подкаталоге bin или в другом месте, заданном логикой привязки сборки Fusion, или
он найдет его в глобальном хранилище GAC, где сборки могут быть зарегистрированы и просмотрены по имени, версии и парам других атрибутов.
Чтобы ответить на ваш конкретный вопрос о каталоге "bin", если вы используете ASP.NET(который я предполагаю из вашей ссылки на web.config
), то да, вам не нужно включать путь - ASP.NET позаботится о том, что ему нужно сделать, чтобы заставить .NET искать сборки в каталоге "bin".
Некоторые из сборников .Net расположены в папке установки .Net
Например,
C:\Program Files (x86)\Reference Сборки \Microsoft\Framework.NETFramework\v4.0
Внутри сидят собрания. В .NETFramework на одном уровне вы найдете разные версии .NET и их соответствующие сборки.
Короткий ответ: это зависит от многих вещей. В структуре есть правила для того, как он загружает сборки. Однако вы можете переопределить это, используя различные файлы конфигурации (machine.config и т.д.). Чтобы узнать, где ваши сборки действительно живут в конкретной системе, используйте Assembly Binding Log Viewer. (Это часть платформы SDK. Просто откройте командную оболочку SDK и запустите fuslogvw.exe.)
Сборка может быть найдена в основном в любом из следующих мест:
Вы можете получить путь и другую информацию о сборке, щелкнув правой кнопкой мыши на сборке в ссылках на проект и выбрав "Свойства".