То, как зафиксировать “Блок, на который ссылаются, не имеет строгого имени” ошибкой?

230
задан Alex 11 December 2018 в 22:38
поделиться

2 ответа

Для предотвращения этой ошибки, Вы могли также:

  • Загрузка блок динамично, или
  • Знак сторонний блок.

Вы найдете инструкции относительно подписания сторонних блоков в .NET-fu: Подписание Неподписанного блока (Незамедлительно Подписывающийся) .

Подписывающиеся Сторонние блоки

основной принцип для подписания thirp-стороны к [1 127]

  1. , Демонтируют блок с помощью ildasm.exe и сохраняют промежуточный язык (IL):

    ildasm /all /out=thirdPartyLib.il thirdPartyLib.dll 
    
  2. Восстанавливают и подписывают блок:

    ilasm /dll /key=myKey.snk thirdPartyLib.il
    

Фиксирующие Дополнительные Ссылки

вышеупомянутые шаги хорошо работают, если Ваш сторонний блок ( A.dll) ссылки другая библиотека ( B.dll), который также должен быть подписан. Можно демонтировать, восстановить и подписаться и A.dll и B.dll с помощью команд выше, но во времени выполнения, загружаясь [1 112] перестанет работать B.dll, потому что A.dll был первоначально создан со ссылкой на неподписанный версия [1 115] B.dll.

фиксация к этой проблеме должна исправить файл IL, сгенерированный на шаге 1 выше. Необходимо будет добавить маркер открытых ключей B.dll к ссылке. Вы получаете этот маркер путем вызова

sn -Tp B.dll 

, который даст Вам следующий вывод:

Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.33440
Copyright (c) Microsoft Corporation.  All rights reserved.

Public key (hash algorithm: sha1):
002400000480000094000000060200000024000052534131000400000100010093d86f6656eed3
b62780466e6ba30fd15d69a3918e4bbd75d3e9ca8baa5641955c86251ce1e5a83857c7f49288eb
4a0093b20aa9c7faae5184770108d9515905ddd82222514921fa81fff2ea565ae0e98cf66d3758
cb8b22c8efd729821518a76427b7ca1c979caa2d78404da3d44592badc194d05bfdd29b9b8120c
78effe92

Public key token is a8a7ed7203d87bc9

последняя строка содержит маркер открытых ключей. Тогда необходимо искать IL [1 116] A.dll для ссылки на [1 117] B.dll и добавить маркер следующим образом:

.assembly extern /*23000003*/ MyAssemblyName
{
  .publickeytoken = (A8 A7 ED 72 03 D8 7B C9 )                         
  .ver 10:0:0:0
}
204
ответ дан Dirk Vollmar 23 November 2019 в 03:41
поделиться

Сначала удостоверьтесь, что все пакеты самородка в той же версии через все проекты в Вашем решении. например, Вы не хотите один проект сослаться на NLog 4.0.0.0 и другой проект сослаться на NLog 4.1.0.0. Затем попытайтесь переустановить пакеты самородка с

, Пакет Обновления - переустанавливает

, у меня было 3 сторонних блока, на которые сослался мой блок A, и только 2 были включены в Ссылки моим блоком B, который также сослался на A.

отсутствующая ссылка к стороннему блоку была добавлена командой пакета обновления, и ошибка ушла.

0
ответ дан 23 November 2019 в 03:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: