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

Я работаю над сервисом 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 в 64-разрядной версии Windows 7.

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


person David    schedule 20.07.2013    source источник
comment
Вам нужно опубликовать трассировку, полученную при запуске Fuslogvw.exe для неудачной привязки.   -  person Hans Passant    schedule 20.07.2013
comment
Можете ли вы уточнить, когда именно он жалуется на то, что 2 веб-сервиса не имеют строгой подписи? При компиляции WCF? или при компиляции веб-сервисов? Или когда звонят?   -  person Basic    schedule 21.07.2013
comment
@Basic — при компиляции проекта реализации службы WCF (который ссылается на оболочки веб-службы SOAP).   -  person David    schedule 21.07.2013
comment
@Hans = спасибо за ответ, я не знал о fuslogvw. Однако у меня проблема времени сборки, а не времени выполнения.   -  person David    schedule 21.07.2013
comment
Это увеличивает вероятность того, что будет найдена неправильная сборка. Вы все еще используете Fuslogvw. Вам действительно нужно потрудиться, чтобы получить ответ, наша удаленная отладка не сработает.   -  person Hans Passant    schedule 21.07.2013
comment
@ Ханс, я не уверен, что понимаю, как это увеличивает шансы найти неправильную сборку. Не могли бы вы объяснить, пожалуйста (или указать мне объяснение)?   -  person David    schedule 21.07.2013
comment
Я не уверен, как @HansPassant думает, что вы должны использовать fuslogvw (хотя он знает свое дело, так что, вероятно, он прав). В противном случае, есть ли шанс, что вы сможете предоставить минимальный тестовый пример - 2 проекта, ссылающихся друг на друга, которые демонстрируют проблему? Кроме того, сведения о том, какую версию VS и т. д. вы используете.   -  person Basic    schedule 22.07.2013
comment
@Basic - я обновил свой вопрос информацией о платформе. Хотел поставить это изначально :(   -  person David    schedule 22.07.2013
comment
Я буду работать над составлением тестового примера — к сожалению, мой работодатель несколько параноидально относится к раскрытию (или его отсутствию), поэтому мне придется немного почистить.   -  person David    schedule 22.07.2013


Ответы (2)


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

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

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

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

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

person David    schedule 27.12.2013

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

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

person Joe Caffeine    schedule 20.09.2013