Можно ли создавать детерминированные однофайловые сборки в dotnet/roslyn?
Я использую .Net 5 (c#).
Существует что при идентичных входных данных (т.е. исходном коде и некоторых других материалах среды) будут создаваться флаг roslyn Deterministic = true,побитовые идентичные сборки.
Когда я делаю обычную сборку и строю несколько раз, это работает должным образом.
Однако при этом создается выходной каталог со 121 файлом (все зависимости, например, файлы System.*. Dll). Я хотел бы иметь один exe-файл, что и делает флаг PublishSingleFile. Но когда я использую флаг PublishSingleFile, я больше не получаю детерминированный вывод.
Любая идея, есть ли способ заставить эту работу? Или комбинация этих 2 флагов не поддерживается?
1 ответ
В настоящее время не поддерживается. В настоящее время основное внимание уделяется созданию воспроизводимой ИЖ и валидации.
https://github.com/dotnet/designs/blob/main/accepted/2020/reproducible-builds.md
Создание управляемого двоичного файла включает в себя множество компонентов, включая ResX, XAML->BAML, строгое именование и MSBuild, которые можно настраивать бесчисленным множеством различных способов. Эти усилия сосредоточены только на исполняемом коде, игнорируя строгие имена, генерацию ресурсов, повторный запуск генераторов исходного кода и т. Д.