2011-02-17 6 views
0

Эй, мне было интересно, если вы, ребята, можете увидеть, что не так/предложите решение.Зарегистрировал сборку для COM, но работает только на dev-компьютере

У меня есть сборка dll для COM, которую я создал с C#, и я пытаюсь получить COM-объект из Silverlight Out-of-browser. Я хочу, чтобы приложение siverlight было мобильным между компьютерами, поэтому я помещаю все необходимые файлы в почтовый индекс вместе с установщиком партий, который делает следующее для регистрации сборки:

cd% windir% \ Microsoft.NET \ Framework \ v4 .0.30319 \ RegAsm.exe «% USERPROFILE% \ Мои документы \ Домашнее задание Часы \ windowsHook.dll»/TLB/NOLOGO

Мое приложение находит сборку и она отлично работает на моем компьютере Dev, но когда я перехожу мое приложение на тестовый компьютер (вместе с dll и любыми другими необходимыми файлами) мой пакетный файл говорит, что он регистрируется успешно, но приложение его не находит.

Однако, когда я перестраиваю сборку с C# на тестовом компьютере и заменяю dll, я перешел с компьютера-разработчика с восстановленной dll, приложение находит это в порядке. Было бы удобно для моих клиентов, если бы им не пришлось перестраивать сборку с помощью C#, если они хотят использовать мое приложение, поэтому мне было интересно, есть ли способ исправить это.

Я изучил эту проблему некоторое время и подумал, что это может быть потому, что моя сборка не была сильной сборкой по имени, так как я думаю, что C# делает это автоматически, поэтому я попытался сделать это в своем пакетном файле, и это не могло распознать команды «al» и «sn», необходимые для генерации криптографического ключа, чтобы дать сборке сильное имя, и я попытался сделать это на вкладке «подпись» в свойствах проекта C#, но я столкнулся с той же проблемой. Любые идеи, как это исправить?

Заранее спасибо

ответ

1

Причина, по которой она работает при восстановлении с помощью VS, заключается в том, что она запускает Regasm.exe с опцией/codebase. Требуется, если вы не планируете устанавливать сборку в GAC.

+0

Спасибо, раньше, когда я пробовал кодовую базу, видимо, у меня не было нужной DLL, но теперь она говорит «все типы, зарегистрированные успешно», и это работает! Благодаря :) – Austin

0

C# автоматически не дают Ассамблей сильное имя. Если вы используете Visual Studio, откройте страницу свойств проекта и посмотрите под вкладкой «Подписание». Проверьте подписку на сборку и создайте новый файл с сильным именем. Создайте свой проект, и вы сможете делать то, что вам нужно сделать с существующим пакетным файлом.

+0

спасибо, я получил название dll strong named, я думал, что должен использовать команды командного файла: D – Austin

+0

Сильное имя не требуется, если вы не планируете устанавливать сборку в GAC. – sharptooth