在ASP.NET Core中的构建中复制资源

时间:2019-01-29 11:48:05

标签: c# asp.net-core .net-core asp.net-core-mvc

在我的项目中,我有一个名为devices.json的资源文件,该文件在项目外部维护,以确保不同项目之间的一致性。所以我只将文件添加为链接:

<ItemGroup>
    <Content Include="..\..\resources\devices.json" Link="devices.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
</ItemGroup>

该文件已正确复制到build文件夹,但是asp.net核心项目似乎在将项目根目录设置为工作目录的情况下运行。因此,如果我尝试使用File.ReadAllText("devices.json")读取文件,它将抛出FileNotFound异常。

是否有一种方法可以将devices.json文件复制到构建版本的项目根目录中,这样就可以访问它而无需对开发输出目录进行硬编码?

Id而不必写 字符串文本;

if(env.IsDevelopment())
{
  text = File.ReadAllText("bin\\Debug\\netcoreapp2.1\\devices.json");
}
else
{
  text = File.ReadAllText("bin\\Release\\netcoreapp2.1\\devices.json");
}

即使我这样做了,这也会在我发布项目后立即中断,因为整个项目将被复制到发布目录,然后将其作为CurrentWorking目录运行。

有人建议如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以在项目文件中使用构建目标将其复制:

  <Target Name="copyDevices" AfterTargets="AfterBuild">
    <Copy SourceFiles="../../resources/devices.json" DestinationFolder="$(OutDir)" />
  </Target>

然后使用以下内容在您的Web应用程序中读取文件:

            var test = File.ReadAllText(
    Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "devices.json")
);

enter image description here

答案 1 :(得分:-1)

text = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "devices.json"));