Как ссылаться на сторонние сборки, не копируя их локально? - PullRequest
1 голос
/ 19 декабря 2011

Я работаю с множеством сторонних сборок, которые по умолчанию устанавливаются вместе с SDK.Однако при использовании Reflection происходит сбой .NET со следующей ошибкой «Не удалось загрузить файл или сборку [Name.dll]» .Итак, я обнаружил, что есть 3 решения:

  • Включите «локальное копирование», что заставляет компилятор копировать все сборки в папку сборки (резко увеличивая размер файла)

  • Компиляция непосредственно в папку Program Files сторонних производителей, позволяющую среде выполнения .NET легко находить сборки (так как они находятся в одной папке).Это усложняет управление установкой, поскольку две приложения совместно используют общую папку.

  • Добавьте большинство сторонних сборок в GAC (используя gacutil) и сослаться на него, используя сильнуюназвание.Но это вызывает другой вид ошибки «Файл не найден», возможно, сборка не может функционировать исключительно из GAC, поскольку ей нужны некоторые файлы из собственного каталога Program Files.

Так что яИнтересно, есть ли способ указать путь к каталогу сборок сторонних производителей для среды выполнения .NET, чтобы я мог компилировать свое приложение в другом месте и не быть вынужденным носить багаж сторонних сборок.(Они уже будут установлены на компьютерах конечных пользователей)

Ответы [ 3 ]

1 голос
/ 19 декабря 2011

Если сборки находятся в сетевой папке, тогда система безопасности .NET по умолчанию не загружает их. Необходимо настроить параметры безопасности в панели управления конфигурацией .NET, в разделе «Политика безопасности во время выполнения» есть мастер «Настройка безопасности зоны», а затем выберите «Локальный Интернет» с «Полное доверие».

.NET Security Adjust

1 голос
/ 19 декабря 2011

Поскольку сборки в настоящее время находятся в отдельном «общем» каталоге, это означает, что они могут быть версии независимо от программы, которая на них ссылается.«Копировать локальный» предпочтительнее, чем здесь, так как в противном случае вы можете оказаться в старом «аду DLL» несовместимых версий, замененных без вашего ведома.

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

1 голос
/ 19 декабря 2011

Разве эти сборки не могут быть GAC'ами на сервере или машине, или вы можете создать установщик .MSI для своего приложения и, возможно, представить управление версиями ...?просто идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...