如何访问copyToOutput输出的文件?

时间:2017-02-16 00:18:07

标签: .net-core

我正在尝试输出我在.net核心api项目中的xml文件,然后在代码中访问该文件。

我在project.json中有这个代码来输出xml

"buildOptions": {
"emitEntryPoint": true,
    "copyToOutput":  "myfile.xml"
"preserveCompilationContext": true
}

然后我尝试像这样访问它

    public Startup(IHostingEnvironment env)
    {
        var path = env.ContentRootPath;
        var filepath = Path.Combine(path, "myfile.xml");
        var doc = new XmlDocument();
        doc.Load(fileName); //throws error
    }

但是当我在Azure中运行时,我收到此错误

  

FileNotFoundException - 找不到文件   'd:\家\站点\ wwwroot的\ myfile.xml中'

我已尝试过每个版本的例如this answer,但没有运气。

更新1

这是Program.cs中的Main方法

var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();

我试图通过浏览(使用Kudu Service)找到每个可思考文件夹的xml文件,所以我认为xml文件没有得到构建 https://myvsts.scm.azurewebsites.net/api/vfs/site/wwwroot/

更新2

我发现copyToOutput在本地工作得很好,但在azure上却没有。我实施this来浏览文件夹,我的xml文件没有显示直到我右键单击它并按发布!就像项目发布一样没有把它拿起来......

1 个答案:

答案 0 :(得分:0)

您的ContentRootPath似乎设置为wwwroot文件夹。通常,此设置为包含 wwwroot的文件夹,IHostingEnvironment.WebRootPath指向“wwwroot”路径。

检查您的Program.Main类是否包含此内容:

var host = new WebHostBuilder()
   .UseContentRoot(Directory.GetCurrentDirectory())

此外,您可能还需要将此文件添加到“publishOptions”。 https://docs.microsoft.com/en-us/dotnet/articles/core/tools/project-json#publishoptions

"publishOptions": {
  "include": ["myfile.xml"]
}