Решение Sharptooth работает хорошо, если в коде содержатся только ссылки на сборки, закодированные в файлах проекта. Если ваш проект ссылается на другие сборки с помощью InternalsVisibleToAttribute
или другими способами, где требуется строка строгого имени, то невозможно создать источники хранилища с временным ключом. Это приведет к изменению ссылок на открытый ключ, присутствующих в строках со строгими именами, и нарушит код.
Это случай в моей заявке, поэтому мне нужно было использовать другой подход.
Я в основном создал копию файлов sln
и csproj
в отдельной иерархической папке и изменил файлы csproj
следующим образом.
- Преобразованы все ссылки на файлы в ссылки, указывающие на исходные источники.
- Скопировал и изменил каждый файл AssemblyInfo.cs для использования
InternalsVisibleToAttribute
со строгим именем.
- Изменен каждый файл
csproj
, чтобы ссылка на файл snk
представляла собой относительный путь (избавляет от необходимости копировать файл snk
в каждый проект)
Сначала я сделал все это вручную, но потом понял, что это можно автоматизировать простым способом. Первый и третий этапы могут быть реализованы с помощью XSLT, где в качестве второго этапа может быть реализована функция поиска / замены регулярного выражения.
Поскольку сейчас мне нужно поддерживать два решения, имеет смысл автоматизировать эту задачу, чтобы избежать головной боли в будущем.
Источники в репозитории не собирают сборки со строгими именами, что нормально, так как я не хотел бы налагать какие-либо ограничения или процессы сборки на конечных пользователей.