我有一个在.NET 4.5.2上运行的ASP.NET核心应用程序。
该应用使用文件hello.json
。我最初将它复制到build文件夹,如下所示:
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true,
"copyToOutput": [ "hello.json" ]
},
然后在编译期间将文件复制到...\bin\Debug\net452\win7-x64\
。
运行MyApp.exe没有问题,但是如果我转到...\bin\Debug\net452\
并运行win7-x64\MyApp.exe
,则在尝试读取文件时出现以下错误:
System.IO.FileNotFoundException Could not find file '...\bin\Debug\net452\hello.json'.
我尝试在程序集中嵌入hello.json
,如下所示:
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true,
"embed": [ "hello.json" ]
}
但我得到了相同的结果。
如何让应用了解它应该查找.exe
所在的文件,而不是它正在运行的位置?
答案 0 :(得分: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/
(注意:它在JSON中使用resource
,现已弃用,应替换为embed
- 请在问题中查看我的project.json
答案 1 :(得分:0)
你应该给你的json文件一个“内容”的构建动作,不要手动将它复制到输出文件夹