/ / .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 дію збірки "Вміст" і не копіювати його у вихідну папку вручну