Как зарегистрировать сборку без строгого имени для загрузки, как если бы она находилась в GAC?
Вопрос
Один из наших партнеров предоставил нам сборку, к которой нам нужно получить доступ из нашего приложения.К сожалению, это не строгое имя, поэтому мы не можем установить его в GAC.И мы не можем разместить его в том же месте, где находится наш исполняемый файл.
Есть ли решение для этого?
РЕДАКТИРОВАТЬ:Это будет временное решение только для тестирования, когда пойдут RC, у нас будет сборка со строгим именем.
Решение
На этом этапе у вас есть несколько вариантов.
Первый — поместить сборку в каталог, в котором есть имя сборки (без расширения), которая является подкаталогом каталога приложения.
Второй — указать подкаталог, в котором CLR должна проверять ссылки в файле app.config, используя команду зондирующий элемент.
Наконец, вы можете загружать сборку динамически, используя различные Загрузка методов в классе Ассамблеи но я бы сказал, что это очень в данном случае это плохая идея, учитывая, что у вас есть сборка и есть конкретные типы, которые вы хотите в ней использовать.Подобная поздняя загрузка сборки обычно используется, когда вы хотите заменить реализацию определенных абстракций, что в данном случае не так.
Другие советы
Обходной путь с использованием декомпиляции и подписи (с использованием командной строки разработчика для Visual Studio):
ildasm.exe /all /typelist /out=DataSystem.il DataSystem.dll
ilasm.exe /dll /optimize /key=DataSystem.snk DataSystem.il
DataSystem.snk можно создать в виде файла с помощью Visual Studio IDE.http://www.bloggedbychris.com/2011/09/29/signing-a-net-assembly-in-visual-studio/
тогда ты сможешь бежать
gacutil.exe -i DataSystem.dll
Еще одно решение — добавить в файл Machine.config следующее:
<runtime>
<developmentMode developerInstallation="true"/>
</runtime>
И добавьте DEVPATH = путь к переменным системной среды.
Лучшее и самое простое решение для подписи и регистрации сборки, которое я нашел, было здесь:http://codeingaddiction.blogspot.com/2011/06/how-to-add-strong-name-to-existing-dll_16.html
Чтобы мне было легко заставить это работать, я перенес компакт-диск в какой-нибудь каталог, например C: emp - мне показалось, что это сработало намного лучше, вероятно, из-за того, что права доступа к файлам где-то в этом месте более доступны.