/ / .NET Core приложение търси вграден файл в грешна папка - c #, asp.net-core

.NET Core приложение търси вграден файл в грешната папка - c #, asp.net-core

Имам ASP.NET Core приложение, което работи на .NET 4.5.2.

Приложението използва файл hello.json, Първоначално го копирах в папката за изграждане, като тази:

  "buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true,
"copyToOutput": [ "hello.json" ]
},

След това файлът бе копиран в ...binDebugnet452win7-x64 по време на компилацията.

Нямам проблем да стартирам MyApp.exe, но ако отида ...binDebugnet452 и тичам win7-x64MyApp.exe, Получавам следната грешка, когато се опитвам да прочета файла: System.IO.FileNotFoundException Could not find file "...binDebugnet452hello.json".

Опитах се да вградя hello.json в събранието, като това:

  "buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true,
"embed": [ "hello.json" ]
}

но получих същия резултат.

Как да накарате приложението да разбере, че трябва да потърси файла, в който .exe е, не къде се изпълнява?

Отговори:

1 за отговор № 1

Както се оказа, получавах същия резултат с вградения ресурс, защото hello.json все още беше в win7-x64 папка (тя бе копирана там от предишната ми компилация).

Трябва да получите този файл от събранието, затова промених това:

using (var reader = new StreamReader("hello.json", Encoding.UTF8))
{
return reader.ReadToEnd();
}

до това:

Assembly executingAssembly = Assembly.GetExecutingAssembly();
Stream jsonStream = executingAssembly.GetManifestResourceStream("MyApp.hello.json");
using (var reader = new StreamReader(jsonStream, Encoding.UTF8))
{
return reader.ReadToEnd();
}

справка: http://codeopinion.com/asp-net-core-embedded-resource/ (Забележка: използва се resource в JSON, която вече е отхвърлена и трябва да бъде заменена с embed - виж моя project.json във въпроса)


0 за отговор № 2

трябва да дадете на вашия json файл изграждане на действие "Съдържание" и не го копирайте ръчно в изходната папка