Перенаправление сборки не работает должным образом - PullRequest
2 голосов
/ 28 апреля 2009

Я пытаюсь ввести строгую подпись в сборках моего проекта.

Вывод моего проекта сохраняется в XML, а тип упоминается (до подписания) как:

typestr="XYZ.PQR, MyWidget, Version=1.0.2406.20198, Culture=neutral, PublicKeyToken=null"

После того, как все сборки подписаны открытым ключом с токеном, 622edca63ee1770c. Я ввел блок в файл app.config следующим образом:

 <assemblyBinding>
  <dependentAssembly>
    <assemblyIdentity name="MyWidget" publicKeyToken="622edca63ee1770c" culture="neutral"/>
    <bindingRedirect oldVersion="1.0.2406.20198" newVersion="0.1.27.10695"/>
  </dependentAssembly>
 </assemblyBinding>

Я все еще получаю сообщение об ошибке:

Не удалось загрузить файл или сборку 'EPGWidget, версия = 1.0.2406.20198, культура = нейтральная, PublicKeyToken = 622edca63ee1770c' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Когда кусок кода типа:

Type type = Type.GetType(typestr);

следующее выполнено. Тем не менее, это работает для:

typestr="XYZ.PQR, MyWidget"

1 Ответ

2 голосов
/ 28 апреля 2009

Если вы сериализуете как XML, почему в нем есть информация о типе? Одной из целей xml является удаление метаданных типа из сериализации. Это массив или что-то? Могут быть более эффективные способы сериализации этих данных.

Перенаправления сборок, AFAIK, не работают с отражением на основе строк; если полное имя не совпадает, оно не совпадает. В последнем примере не указываются данные подписи, что позволяет ему принимать любые.

Лично я бы попытался решить проблему с наличием информации о типах в xml - это, вероятно, более легкая и более уместная битва на битве.

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