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