Строгое имя требуется для сборок, на которые ссылаются из неподписанного проекта?

Я работаю над службой WCF. Интерфейс и реализация службы WCF находятся в отдельных проектах. Существует также проект службы Windows для размещения службы WCF.

Одна из вещей, которую должна сделать реализация службы WCF, это вызвать несколько внешних ( SOAP) веб-служб. То, как мы обычно структурируем это, мы создаем отдельный проект библиотеки классов для сервисов SOAP; мы создадим веб-ссылку и фабричный / вспомогательный метод в библиотеке классов.

Вышеуказанные подробности могут иметь или не иметь отношение к реальной проблеме. Вот что я получаю сообщение об ошибке при создании проекта реализации службы WCF (где X - одна из сборок-оболочек службы SOAP):

ссылка на сборку 'X' не имеет строгого имени

Но проект реализации сервиса WCF не должен быть подписан (как и проект интерфейса). И на данный момент единственными ссылками на него являются проект службы Windows и проект модульного тестирования - и ни один из них не подписан.

Реализация WCF также ссылается на другие (ранее существовавшие) проекты-оболочки веб-сервисов, но жалуется только на эти два. Я вытащил существующий и новый файл проекта в текстовом редакторе бок о бок... И я могу видеть любые существенные различия.

Я также проверил, импортирует ли какой-либо проект параметр, требующий его подписи, как описано в вопросе переполнения стека. Удаление подписи из сборки. Это не похоже на случай.

Я пытался использовать AutoMapper - 1.1, так как мы все еще на.NET 3.5 - в моей реализации WCF. Это подписанная сборка, поэтому я могу видеть, где могут возникнуть проблемы с отражением в моем коде и оболочках службы SOAP. Но мне кажется, что это будет проблема времени выполнения, а не времени сборки. Но так как я подозревал, что это может быть как минимум фактором, я удалил AutoMapper и зависимый код, но все равно получаю ту же ошибку.

Я исследовал проблему, большинство результатов поиска состоит из инструкций о том, как подписать (возможно, сторонние) сборки.

Я попытался удалить и повторно добавить ссылки, перезапустил Visual Studio и мой компьютер.

Visual Studio 2010 /.NET 3.5 в Windows 7 64-разрядная версия.

Я уверен, что упускаю что-то довольно очевидное... Я просто не могу понять, что.

2 ответа

Решение

Ну, это неудобно.

Как я и подозревал, это было что-то простое. Интерфейс и реализация сервиса фактически были подписаны; Я был не прав насчет этого. Однако это было сделано не в настройках / файле проекта, а в AssemblyInfo.cs файл, через директиву[assembly: AssemblyKeyFile("keyfile.snk")],

Я не был знаком с этим методом подписания. Я полагаю, что это устарело с VS2005 - частично потому, что управлять подписыванием через свойства проекта проще, частично потому, что эта информация помещается в AssemblyInfo считается угрозой безопасности.

И я на самом деле посмотрел, по крайней мере, один из AssemblyInfo файлы... но, видимо, я не прокрутил достаточно далеко. (Я сказал, что это было неловко.)

Надеюсь, кто-то еще может извлечь выгоду из этого.

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

Возможно, у вас есть подписанная версия одной из ваших ссылок в глобальном кэше сборок, которую MSBuild собирает вместо выбранной вами ссылки.

Другие вопросы по тегам