Ответ 1
Должен ли я подписывать сборку?
Я подозреваю, что это проблема. ClickOnce требует, чтобы его манифесты были подписаны (у вас нет выбора), но я не думаю, что есть требование подписывать сами сборки (как вы намекали), но, скорее всего, это требование Windows 8.
Неподписанные сборки могут быть изменены, и любые ссылочные сборки будут покорно загружать и выполнять код внутри них - никаких вопросов не задано, поэтому вредоносный объект может заменить одну или несколько ваших сборок на диск и поставить под угрозу ваше приложение. ClickOnce позволяет пользователям с низкими системными правами выполнять задачи, которые им в противном случае не разрешалось бы выполнять, поскольку разрешение было (неявно) предоставлено с помощью цифрового сертификата (сертификат, используемый для подписи манифестов ClickOnce, которые предварительно существуют в целевом машине или доверен через корневой сертификат на целевой машине). Поэтому, не подписывая сборки, есть слабая связь в цепочке безопасности, и, вероятно, это было затянуто в Windows 8 (по умолчанию).
Подписать как сборку см.: Как выполнить сборку (Visual Studio)
NB. Подписание сборки dotNet обычно называют сильным наименованием (термины "подписание" и "сильное именование", похоже, используются в этом контексте взаимозаменяемо).
NB. Сильная именованная сборка может ссылаться только на другие сильные узлы, хотя они могут быть подписаны с разными сертификатами. Это может вызвать проблемы, если у вас есть ссылки на сторонние сборки, которые не имеют сильного имени, - это редкость, так как это неправильная практика для выпуска неподписанного кода. Один из вариантов - просто подписать сборку с помощью собственного сертификата, используя sn.exe