Имам 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 файл изграждане на действие "Съдържание" и не го копирайте ръчно в изходната папка