2012-05-14 2 views
0

Использование бета-версии Visual Studio 11 для предварительного просмотра Windows 8.Использование библиотеки WINMD вызывает исключение сильной проверки имени

Проблема: если вы пытаетесь использовать класс из библиотеки классов, у которой есть свой тип вывода, установленный в WinMD, я получаю исключение безопасности, в котором указано, что «Сильная проверка имени» не удалась (Исключение из HRESULT: 0x8013141A). Я просто пытаюсь запустить (F5) небольшое тестовое приложение с помощью Visual Studio.

Проблема уходит, если я задаю тип вывода «Библиотека классов». Небольшой (и довольно тривиален) тестовый проект можно найти здесь:

http://download.tallcomponents.com/WinRTApplication3.zip

Я поставил «Подпишите сборку» флаг для библиотеки классов, используя только что созданный файл .snk (без пароля). Запуск зп -vf на сгенерированной ClassLibrary1.winmd файла показывает:

ClassLibrary1.winmd является сборкой задержки подписи или теста подписал

Так может быть, проблема в основном о том, что выход не был «правильно» подписан ? Я просто не знаю, что делать, чтобы решить эту проблему, учитывая, что я указал библиотеку классов, которые должны быть подписаны, и не понимаю, почему это происходит только при выводе в файл WinMD. В настоящий момент я предполагаю, что мне не нужен «официальный» сертификат только для отладки и тестирования.

Ну, остается сказать, что я сожалею, если это вопрос новичков. Я попытался ответить «google», но в основном получал хиты старше 2 лет, а google предлагал «ветер» вместо winmd ...

Невозможно создать новый тег «winmd» здесь ... (недостаточно репутации)

ответ

1

Если вы получаете достоверную ошибку проверки имени в файле winmd, это типично, потому что вы используете набор инструментов, который не понимает формат файла .winmd.

.winmd файлы не могут быть простыми именами.

В этом случае возможно, что проблема вызвана тем, что вы пытаетесь найти сильное имя в библиотеке компонентов. Библиотеки компонентов C# создают гибридные файлы .winmd, содержащие как метаданные Windows, так и C# IL.

Почему вы пытаетесь найти сильное имя вашего компонента? Сильное подписание имен в основном используется при размещении сборок в GAC, а файлы .winmd не могут быть вставлены в GAC.

+0

Это интересно. Если я выключу «знак сборки» в Visual Studio, исключение исчезнет. –

+0

Причина, по которой я это делал, в основном заключалась в том, что мы хотим создать компонент для использования другими, поэтому результат каким-то образом должен быть подписан в какой-то момент. Обратите внимание: мой набор инструментов состоит только из Visual Studio. Я предполагал, что он понимает winmd. Спасибо, что изменили мою перспективу. –

+0

На случай, если кто-нибудь ударит по этой проблеме: выбор типа вывода «библиотека классов» заставляет вас подписать сборку. Впоследствии выбор типа вывода «WinMD» не будет жаловаться компилятору, но приводит к исключению проверки сильной имен, если вы не отключите подписку еще раз. –

Смежные вопросы