#.net #dependencies #.net-core
#.net #зависимости #.net-core
Вопрос:
Я хочу создать собственный исполняемый файл .NET Core, который я могу развернуть, но когда я публикую проект, компилятор экспортирует все зависимости в один и тот же каталог, и исполняемый файл нуждается в них для запуска в системе, в которой не установлена среда выполнения .NET Core. Есть ли способ скомпилировать / упаковать DLL-файлы в DLL проекта или исполняемый файл? Спасибо.
Комментарии:
1. Почему это должен быть только один файл?
2. Для переносимого двоичного выпуска.
3. Я думаю, что это оксюморон. На самом деле у вас не может быть переносимой двоичной версии, потому что каждая платформа имеет свой двоичный формат файла.
4. Переносимость не означает кроссплатформенность. Это означает готовность к запуску, где бы она ни находилась (в среде сборки, для которой она предназначена). Т.е. без необходимости выполнения / зависимостей / библиотек. Программе не должен требоваться установщик для ее запуска (требуются записи регистра и т. Д.), Все это должно быть автономным.
Ответ №1:
Для объединения зависимостей в скомпилированную сборку ознакомьтесь с Costura для Fody:
https://github.com/Fody/Costura
Я использовал его раньше, и он работает хорошо. Вы можете определить определенные зависимости для объединения в файле с именем FodyWeavers.xml (примеры см. по ссылке Costura-Fody).
Так, например (взято из Costura README.md ) у вас могут быть две зависимости ‘Foo’ и ‘Bar’, которые могут быть объединены в вашу целевую сборку следующим образом в FodyWeavers.xml досье.
<Costura>
<IncludeAssemblies>
Foo
Bar
</IncludeAssemblies>
</Costura>
Помимо этого, ILMerge — отличный способ пойти: https://www.nuget.org/packages/ilmerge
РЕДАКТИРОВАТЬ: найдена ссылка, описывающая необходимое развертывание.Зависимости сетевого ядра в автономном приложении: http://druss.co/2016/08/deploy-and-run-net-core-application-without-installed-runtime-self-contained-applications/
Комментарии:
1. Я искал более собственное решение в рамках .NET Core framework, но это решение будет работать так же хорошо. Я уже пытался создать автономный исполняемый файл, но все, что он делает, это включает библиотеки времени выполнения в двоичный файл и экспортирует DLL в папку экспорта. Это означает, что если вы попытаетесь запустить исполняемый файл вне каталога его зависимостей, он вернет сообщение «Ошибка: отсутствует сборка». Я не знаю, является ли это преднамеренным или .NET Core действительно должен привязывать зависимости к сборке. Спасибо за ответ.