Подписание моей сборки под строгим именем останавливает его работу - PullRequest
12 голосов
/ 15 сентября 2010

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

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

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

Поиск в Google по номеру ошибки мало что дал.

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

Ответы [ 8 ]

6 голосов
/ 20 сентября 2010

Вы воссоздали 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,

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

5 голосов
/ 22 сентября 2010

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

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

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

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

1 голос
/ 20 сентября 2010

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

0 голосов
/ 25 сентября 2010

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

0 голосов
/ 24 сентября 2010

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

0 голосов
/ 20 сентября 2010

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

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

0 голосов
/ 19 сентября 2010

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

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

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

Только догадка!

0 голосов
/ 19 сентября 2010

Энди, не уверен, если это уместно .Решение там говорит:

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

...