Копирование ресурсов при сборке в ASP.NET Core - PullRequest
0 голосов
/ 29 января 2019

В моем проекте у меня есть файл ресурсов с именем devices.json, который я поддерживаю вне проекта, чтобы обеспечить согласованность между различными проектами.Поэтому у меня есть только файл, добавленный в виде ссылки с:

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

Файл корректно копируется в папку сборки, но основные проекты asp.net, похоже, запускаются с корневым каталогом проекта, установленным в качестве рабочего каталога.Поэтому, если я попытаюсь прочитать файл с File.ReadAllText("devices.json"), это вызовет исключение FileNotFound.

Есть ли способ скопировать файл devices.json в корневой каталог проекта при сборке, чтобы он был доступен без жесткого кодированияпути к выходному каталогу dev?

Я бы предпочел избежать написания строкового текста;

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

И даже если бы я это сделал, это прекратится, как только я опубликую проект с тех порвесь проект будет скопирован в каталог Publish, который затем будет работать как каталог CurrentWorking.

Есть предложения о том, как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы можете использовать цель сборки в файле проекта, чтобы скопировать ее через:

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

Затем используйте следующую команду для чтения файла в вашем веб-приложении:

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

enter image description here

0 голосов
/ 29 января 2019

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

...