Как зарегистрировать сборку без строгого имени для загрузки, как если бы она находилась в GAC?

StackOverflow https://stackoverflow.com/questions/2290006

  •  21-09-2019
  •  | 
  •  

Вопрос

Один из наших партнеров предоставил нам сборку, к которой нам нужно получить доступ из нашего приложения.К сожалению, это не строгое имя, поэтому мы не можем установить его в 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 - мне показалось, что это сработало намного лучше, вероятно, из-за того, что права доступа к файлам где-то в этом месте более доступны.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top