Опубликованное приложение .Net Core 2 не читает файл appsettings.json - PullRequest
0 голосов
/ 29 мая 2018

У меня есть 2 приложения, одна консоль, один веб-интерфейс и .net core v2.0.У обоих одинаковая проблема.

Я использовал для запуска приложения через исходные файлы.Я строил и запускал их на машине Linux.Все было хорошо, все было замечательно, но теперь я запускаю одно и то же приложение через публикацию.

Теперь это не работает так, как предполагается, потому что приложение не может читать appsettings.json.

configuration["Settings:Port"] != null 
? int.Parse(configuration["Settings:Port"]) //i should be getting this - 1234
: default(int) //but instead i got this - 0

Я повредил файл appsettings.json, и я ожидал увидеть исключение, но ничего.Совсем ничего.Я проверил файл пару раз, я изменил файл пару раз только потому, что был в отчаянии.Ничего такого.Ничего не происходит, ничего не меняется.

Я пробовал отладочную сборку, пробовал релиз-сборку, пытался изменить действие сборки этого файла ... Пробовал, пытался ... Ничего не работает, и японятия не имею почему.

И, как вы можете догадаться, мне нужно несколько советов.Спасибо всем.


Редактировать:

Как использовать / читать конфигурационный файл:

IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", true, true).Build();

1 Ответ

0 голосов
/ 29 мая 2018

Проблема в том, с какого пути я запускал приложение.

Я выполнял команду для запуска приложения из корня (/).Приложение работало нормально, но, очевидно, не удалось найти файл appsettings.json.

Я попытался запустить приложение по пути проекта, поэтому я перешел в каталог Project, выполнил команду, и все вернулось кnormal.


Подробное объяснение здесь:

Когда я запускал те приложения, о которых я упоминал выше, я использовал, чтобы перейти в их каталоги и выполнить «запуск по сети».

cd /blabla/etcetc
dotnet run

Однако после их публикации я не мог использовать ту же команду.Я должен был указать, что это dll.Тогда я решил, что могу просто запустить их, не переходя в их каталоги.

dotnet /blabla/etcetc/my.project.dll

И это была проблема.Вместо этого теперь я делаю это;

cd /blabla/etcetc
dotnet my.project.dll
...