Подтвердить что ты не робот

Подписание моей сборки с сильным именем прекращает ее работу

Мой коллега создал сборку в VB.net для использования с JScript через COM-взаимодействие. Сборка работала нормально, но мы подписали ее, и теперь она работает только на машинах Windows 7. Я тестировал 2 машины Windows 7 и 2 машины Windows Vista.

Когда мы подписали сборку и пытаемся создать экземпляр объекта ActiveX в JScript, возвращается ошибка без сообщения и только число:

Ошибка:
Номер ошибки: -2146234304

Поиск в Google для номера ошибки не принес много.

Если мы удалим сильное имя из сборки, оно работает отлично. Любые идеи о том, что может быть проблемой? Не уверен, что это имеет значение, но сборка компилируется и подписывается с VS 2010.

4b9b3361

Ответ 1

Вы воссоздали COM-Interop после подписания сборки? Как вы регистрируете новую версию сборки? Вы очистили кеш Internet Explorer?

В общем случае ошибка -2146234304 (0x80131040) означает FUSION_E_REF_DEF_MISMATCH: "Установленное определение манифеста сборки с именем [yourAssembly] не соответствует ссылке на сборку". Поэтому вам нужно обновить манифест сборки, который использует подписанную сборку. Что это значит именно в вашей ситуации, вы должны это выяснить. Возврат к сборке сохраняется также под Assembly значением HKEY_CLASSES_ROOT\CLSID\{YOUR_GUID}\InprocServer32, а не только в реальном манифесте.

Вы можете попытаться исследовать проблему в отношении Fuslogvw.exe(просмотрщик привязки к сбору) (или http://msdn.microsoft.com/en-US/library/ms229864(v=VS.80).aspx). Некоторые изменения в реестре под HKLM\Software\Microsoft\Fusion могут понадобиться раньше (например, EnableLog, LogFailures,

Если вы не решите проблему в том, как вы можете опубликовать ссылку на проект, который может быть использован для воспроизведения вашей проблемы.

Ответ 2

Код ошибки ix 0x80131040. Это код, который соответствует исключению .NET, очень распространенный.

Установленное определение манифеста сборки не соответствует ссылке на сборку.

Я удивлен, что вы не получите сообщение для этого, вы можете просмотреть свой код обработки ошибок. Anyhoo, у вас немного DLL Hell, CLR находит сборку, чья [AssemblyVersion] или PublicKeyToken не соответствует ссылочной сборке, которая использовалась для сборки кода. Учитывая, что это связано с сильной именованной сборкой, вы, возможно, подписали сборку после создания кода. В этом случае просто удалите ссылку на сборку из вашего проекта и добавив ее обратно, теперь выбрав сильную именованную сборку, устранит проблему.

Но не нужно догадываться об этом, утилита Fuslogvw.exe сообщит вам, что именно происходит. Сначала запустите его, чтобы получить трассировку попытки привязки и причину, по которой она не удалась.

Ответ 3

Используйте зависимый ходок, чтобы открыть подписанную dll на проблемной машине. Он должен сказать вам, почему DLL не может быть загружена. Это может зависеть от dll, которая отличается от версий Windows, что является более сложной задачей после подписания.

Ответ 4

Энди, не уверен, что это важно. В решении там говорится:

Я забыл обновить adxloader.dll(из нового в \Add-in Express .NET\Redistributables) в пути - я думаю, он был обновлен...

Ответ 5

ваш номер очень похож на начало целого диапазона!

Signed: −2,147,483,648 to +2,147,483,647, -(2^31)~(2^31-1)

возможно, у вас есть ошибка кастинга или действительно огромное количество, которое вы пытаетесь увеличить, и если оно достигает максимума (+2,147,483,647), он начинает отсчет назад от -2,147,483,648

Просто догадайтесь!

Ответ 6

Используете ли вы кодовые блоки Microsoft Enterprise Library? Я видел, как эта проблема возникала, когда люди не добавляли ссылку на правильные подписанные библиотеки при компиляции их кода.

Вот еще background, если вы используете EnterpriseLibrary.

Ответ 7

Попробуйте подписать сборку из рабочей конфигурации XP (или из окна Vista). CAPICOM не поддерживается в Windows 7, поэтому любой инструмент знака, который может выполнять подписку на вашу сборку, не может быть обратно совместим с Vista. Теперь я видел, что CAPICOM работает очень хорошо, но я также видел, что он не работает без причины, а "неподдерживаемый" означает, что вы получаете от поддержки Microsoft, если пытаетесь позвонить.

Ответ 8

Перейдите в консоль конфигурации .Net Framework и играйте с параметрами политики безопасности Runtime на вашем компьютере.