В нашем магазине мы используем 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, чтобы воспользоваться этим:
Каково правильное решение этой проблемы?
Любые комментарии и обсуждения приветствуются.