В .NET framework вы можете создать один файл .EXE
, который будет запускаться из командной строки без каких-либо дополнительных файлов конфигурации (и если вы используете ILMerge, вы можете поместить все ссылки .DLL
в 1 .EXE
монтаж).
Я использую .NET Core для того, чтобы выполнить одно и то же, но до сих пор без успеха. Даже простейшее приложение Hello World
без зависимостей требует наличия файла с именем <MyApp>.runtimeconfig.json
для запуска с помощью dotnet.exe
.
dotnet F:\temp\MyApp.dll
Содержимое <MyApp>.runtimeconfig.json
выглядит следующим образом:
{
"runtimeOptions": {
"framework": {
"name": "Microsoft.NETCore.App",
"version": "1.1.1"
}
}
}
Без этого конфигурационного файла в той же папке, что и .DLL
, я получаю следующую ошибку:
A fatal error was encountered. The library 'hostpolicy.dll' required to
execute the application was not found in 'F:\temp'.
Мой вопрос: есть ли способ изменить приложение, чтобы он не присутствовал в этом файле конфигурации, поэтому значения по умолчанию этой информации скомпилированы в .DLL
, но могут быть переопределены путем добавления конфигурации файл?
ПРИМЕЧАНИЕ. Я также хочу убедиться, что он "работает" независимо от платформы, на которой он установлен, при условии, что платформа имеет правильную версию .NET Core.
Фон
Я пытаюсь получить гладкий пользовательский интерфейс для запуска некоторых утилит, которые иногда бывают полезны, но редко нужны. Поскольку не представляется возможным использовать тот же .DLL
, который ссылается на клиентское приложение в качестве консольного приложения, следующая лучшая вещь - иметь один файл, который можно загрузить и запустить без каких-либо зависимостей.
Например, в Java вы можете просто загрузить файл .jar
на любой поддерживаемой платформе и запустить:
java <package>.jar <namespace>.SomeClass [args]
и он будет "просто работать" без каких-либо дополнительных файлов. Как я могу получить аналогичную работу с использованием .NET Core?
Вкратце, я хочу попытаться избежать дополнительного шага "разархивировать в каталог сначала"...