Как заставить InternalsVisibleTo работать, когда процесс сборки подписывает сборку строгими именами?

В нашем магазине мы используем Cruise Control и MSBuild для автоматизации сборки продукта в рамках непрерывной интеграции.

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

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

Это все хорошо, пока я не решил, что хотел бы ввести модульные тесты, требующие от меня использования Атрибут InternalsVisibleTo . Я также начал использовать красивую библиотеку с открытым исходным кодом, в которой есть модульные тесты, которые также используют эту технику.

Это означает, что на моем компьютере я могу обновить AssemblyInfo.cs , чтобы использовать следующий оператор:

[assembly: InternalsVisibleTo("MyProject.Tests.UnitTests")]

] и все в порядке.

Однако, проверка этого в прерывает сборку, поскольку машина сборки подписывает сборки, эту строку нужно будет обновить, чтобы она выглядела так:

[assembly: InternalsVisibleTo("MyProject.Tests.UnitTests, 
             PublicKey="magic key here..)"]

Я наполовину не хочу подписывать сборки и дело зашло. Однако «подписывание сборок - лучшая практика» (повторите эту мантру 3 раза), и если мы получаем от этого какую-то пользу, я не хочу удалять его.

Мы не устанавливаем в GAC, нас особо не беспокоит фальсификация, нам не нужно беспокоиться о третьих лицах, которые используют наши библиотеки, мы обновляем все наши файлы сразу при обновлении приложения. Наиболее заметное преимущество заключается в том, что кто-то из тех, кто поддерживает, не может скопировать какую-то случайную версию сборки в папку времени выполнения, и некоторое время кажется, что все работает.

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

Я бы хотел, чтобы все о простоте отсутствия сильных имен со всеми преимуществами сильных имен (если они есть), и я не хочу создавать для этого много дополнительной работы. Неужели это слишком много, чтобы спрашивать?

В этом сообщении хорошо описывается проблема и ее решение, но я не очень люблю сценарии MSBuild, чтобы воспользоваться этим:

http://social.msdn.microsoft. com / forum / en-US / msbuild / thread / 02df643c-956a-48bd-ac01-4a1016d91032 /

Каково правильное решение этой проблемы?

Любые комментарии и обсуждения приветствуются.

6
задан SteveC 23 October 2013 в 06:18
поделиться