Ситуация следующая:
- Я хочу выпустить полный исходный код в библиотеку классов
- Я также хочу выпустить двоичные файлы, подписанные мной, с ключевым файлом, который я не хочу публиковать
- Я предоставлю пакетные файлы и этапы предварительной сборки, которые создают новый файл ключа локально, если он отсутствует, чтобы любой мог быстро начать использовать исходный код.
- Тестовый проект требует ссылки на внутренний класс в основном проекте.
- Чтобы получить доступ к внутреннему классу, мне нужно добавить атрибут
[assembly: InternalsVisibleTo("...")]
в файл AssemblyInfo.cs основного проекта - Поскольку я подписываю выходные данные проекта, мне нужно указать часть PublicKey этого атрибута.
- Затем он будет привязан к ключевому файлу, который я не хочу публиковать.
Итак, как мне решить эту проблему?
Если я подпишу основной вывод проекта, а не тестовую библиотеку, и укажу только имя сборки в атрибуте InternalsVisibleTo
, я получу эту ошибку времени компиляции:
Ошибка 1 Ссылка на сборку друга «Mercurial.Net.Tests» недействительна. Сборки, подписанные строгим именем, должны указывать открытый ключ в своих объявлениях InternalsVisibleTo. C: \ Dev \ VS.NET \ Mercurial.Net \ Mercurial.Net \ Properties \ AssemblyInfo.cs 22 31 Mercurial.Net
Таким образом, очевидно, что не подписывать выходные данные тестового проекта недостаточно.
Есть ли у меня единственный вариант - удалить настройки, которые подписывают проекты, и изменить файлы проекта как часть моего сценария сборки двоичных файлов? т.е. найти элемент <SignAssembly>false</SignAssembly>
в файле проекта и изменить его перед сборкой?