В Visual Studio, как я могу увидеть, если сборка защищена от GAC? - PullRequest
2 голосов
/ 03 сентября 2010

Простой вопрос: как в Visual Studio узнать, есть ли ссылка на сборку из GAC или просто ссылка указана через ('нормальную') файловую систему?

Я думал, что смогу вычесть это, посмотрев на файл .csproj, но, возможно, нет. Вот вывод из моего .csproj-файла:

<Reference Include="MoreLinq, Version=1.0.11522.0, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\lib\MoreLinq.dll</HintPath>
</Reference>
<Reference Include="Oracle.DataAccess, Version=9.2.0.401, Culture=neutral, PublicKeyToken=89b483f429c47342">
  <SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="System" />

Я знаю, что Oracle.DataAccess и System ссылаются из GAC, а MoreLing (спасибо, Джон!) Ссылается через файловую систему. Единственное отличие, которое я вижу, состоит в том, что MoreLinq имеет значение HintPath. Это то, что отличает ссылку GAC от ссылки на файл? В любом случае я не вижу этого в VS

Поскольку это оказывает большое влияние на загрузку сборок, я бы предположил, что эту информацию будет легко получить, но я могу ошибаться?

Ответы [ 2 ]

1 голос
/ 03 сентября 2010

Я не эксперт, но, насколько я понимаю, разница между двумя ссылками, которые вы показываете в вопросе, заключается только во времени сборки.Во время выполнения система будет использовать все найденные библиотеки DLL - начиная с GAC, а затем просматривая ту же папку, что и ваш исполняемый файл.Это означает, что вы не можете определить во время разработки или компиляции, какой он будет, когда программа действительно будет запущена.

(Кстати, AFAIK Visual Studio ничего не компилирует, используя dll изGAC. Это может иногда вызывать путаницу, потому что то, что вы видите во время проектирования / сборки (локальные библиотеки), не соответствует тому, что может быть в GAC во время выполнения).

1 голос
/ 03 сентября 2010

Я думаю, что вы не можете знать это наверняка без запуска программы. Если для свойства «Копировать локальное» ссылки задано значение «Ложь», это показывает, что библиотека DLL поступила из GAC. Но помните, что GAC имеет приоритет над остальной частью файловой системы (включая текущий каталог).

Во время выполнения вы можете быть уверены через окно Debug / Windows / Modules, где вы можете увидеть точный путь загруженной DLL.

...