.NET Core应用程序在错误的文件夹中查找嵌入式文件

时间:2016-12-13 21:21:48

标签: c# asp.net-core

我有一个在.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所在的文件,而不是它正在运行的位置?

2 个答案:

答案 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文件一个“内容”的构建动作,不要手动将它复制到输出文件夹