Добавить ссылку на копии сборок GAC Рекурсивно не зависящие от GAC сборки (c # Visual Studio 2008) - PullRequest
3 голосов
/ 16 ноября 2010

Это мой прикладной деплйомент: c: \ Program Files \ Product \ API.dll (зарегистрирован в Gac)
c: \ Program Files \ Product \ ApiImpl1.dll (не Gac)
c: \ Program Files \ Product \ ApiImpl2.dll (не Gac)
c: \ ConsoleApplication \ TestApi.exe

Api.dll - это Фасад для Приложения, в котором реализовано «c: \ Program Files \ Product \» Api.Dll зарегистрирован в GAC и имеет сборщик разрешений для библиотек DLL, который находится в "c: \ Program Files \ Product \" Api.dll ссылается на ApiImpl1.dll и ApiImpl2.dll.

Проблема заключается в том, что в ConsoleApplication я добавляю ссылку на Api.dll Visual Studio копирует рекурсивно ApiImpl1.dll и ApiImpl2.dll в место назначения проекта. (Хотя CopyLocal = False) Я добавляю ссылку, просматривая "c: \ Program Files \ Product \ API.dll"

Насколько я знаю, у меня есть несколько решений:
1) Зарегистрируйте ApiImpl1.dll и ApiImpl2.dll в GAC (неприемлемо, для этого у меня есть ассемблер сборки)
2) Добавить в «.Net Add Reference» Реестр, «c: \ Program Files \ Product» (не решает проблему)
3) Добавить в реестр .Net Add Reference «Реестр», c: \ windows \ Assembly \ gac_msil \ Api.dll (решить, но это плохое решение)
4) Вручную измените ConsoleApplication.csproj и удалите атрибут HintPath из справочника Api.dll. (Не приемлемо, потому что у меня будет много клиентов, которые будут использовать этот API)

1 Ответ

0 голосов
/ 16 ноября 2010

У вас всегда должны быть зависимые от GAC dll в GAC ... если вам нужно быть там, так делают другие.

Проблема в том, что, хотя Visual Studio знает, где найти эти dll-файлыссылки, приложение во время выполнения не будет знать, где искать, если DLL-файлы не находятся в каталоге проекта (следовательно, копия).

EDIT Нужно ли помещать API.dll в GAC, если у вас есть сборщик разрешения?Возможно, если бы этого dll не было в GAC, Visual Studio не скопировала бы другие файлы.Я почти уверен, что это тот факт, что корневая DLL находится в GAC, но зависимых DLL нет.

...