2012-05-30 8 views
4

В книге «C# in Depth 2nd Edition» книга Джона Скита, которую я только что прочитал до конца части 2, в 7.7.3 упоминается, что InternalsVisibleTo также может использоваться со подписанными сборками. На данный момент я вообще не использовал подписи. Проблема безопасности для выпущенных двоичных файлов на самом деле весьма критична, поэтому я планирую полностью удалить атрибут для сборок release, используя тест переменной препроцессора.InternalsVisibleTo, подписание и юнит-тесты, как сделать его практичным?

Просто для интереса, как было бы целесообразно использовать подписанные сборки и InternalsVisibleTo? Чтобы использовать InternalsVisibleTo для указания подписанной сборки друга, мне нужно указать его открытый ключ. У меня есть это только после компиляции сборки друга, которая имеет зависимость от тестируемой сборки (динамическая сборка и снятие нагрузки остались в стороне, что бы раздувало кодирование и читаемость). Это звучит как проблема с куриным яйцом, требующая проверки бутстрапа сборки. Я могу представить себе некоторые трюки с MSBuild и скрипты для автоматизации этого. Есть ли более практичный способ сделать это?

В случае остается настолько утомительно, я буду придерживаться моей первой идеи сбрасывания Unit Testing для выпуска сборки (что несколько неудовлетворителен как тонкие вопросы, синхронизации можно оставить непроверенным ...)

+0

Если вы не создадите новый файл ключа во время сборки процесса (очень маловероятно), открытый ключ будет постоянное значение ... –

+2

Почему вы думаете, что это проблема безопасности? Сильное имя не касается безопасности. Для пользователя тривиально отключить проверку сильного имени и использовать свою сборку, как вы не намерены. – Daniel

+0

Итак, Даниил, я не должен об этом беспокоиться, если я хорошо тебя понимаю и могу оставить сборки неподписанными. Это просто гарантирует пользователю, что происхождение программного обеспечения безопасно, если надежное имя можно доверять. Если сборки развертываются в «безопасной» среде, например внутри нашей компании, мне не нужно беспокоиться о подписании. Правильно ли это утверждение? – jdehaan

ответ

8

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

Таким образом, все они связаны с одной и той же константой PublicKey. и использовать одну запись, например:

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("UnitTests, PublicKey=<your key>")] 
+0

Гош, я думаю, что я не понял этого. Жизнь может быть такой простой ... Я думал, что ключ зависит от содержания сборки. Мне нужно вступить в это скоро. Спасибо за эту точность. Я подписываю noob. – jdehaan