Можно ли публиковать только определенные appsettings.json в приложении .NetCore - PullRequest
0 голосов
/ 19 декабря 2018

В моем приложении .NetCore есть 4 appsettings.json:

  • appsettings.json
  • appsettings.Development.json
  • appsettings.Test.json
  • appsettings.Production.json

Все appsettings имеют Не копировать свойство , но я замечаю, что при публикации приложения все файлы appsettings копируются вопубликовать папку.Например, appsettings.Production.json копируется в папку публикации, даже если я публикую с использованием среды Test .

Это не больно, но я хочу знать,Можно ли скопировать только appsettings.json и appsettings.Test.json при публикации в среде Test ?

Ответы [ 2 ]

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

Наконец, уловка заключается в использовании <Content Remove=""> для appsettings.json.

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

<ItemGroup>
  <!-- Default behaviour here -->
  <None Update="other_files">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </None>
</ItemGroup> 
<Choose>
  <When Condition=" '$(EnvironmentName)'=='Test' ">
    <ItemGroup>
      <Content Remove="appsettings.Development.json" />
      <Content Remove="appsettings.Production.json" />

      <!-- Other files you want to update in the scope of Debug -->  
      <None Update="other_files">
        <CopyToOutputDirectory>Never</CopyToOutputDirectory>
      </None>
    </ItemGroup>
  </When>
</Choose>

Папка теперь не содержит appsettings.Development.json и appsettings.Production.json при запуске публикации с использованием среды Test.

0 голосов
/ 20 декабря 2018

При публикации мы можем указать Configuration.Чтобы реализовать ваше требование, вы можете определить различные конфигурации Configuration Manager.

  1. Нажмите раскрывающийся список Отладка или Выпуск -> Configuration Manager -> Новая конфигурация активного решения для Development, Test и т. Д., Например DevelopmentPublish и TestPublish
  2. Modify project.csproj

    <Project Sdk="Microsoft.NET.Sdk.Web">
    
    <PropertyGroup>
        <TargetFramework>netcoreapp2.1</TargetFramework>
        <Configurations>Debug;Release;DevelopmentPublish</Configurations>
    </PropertyGroup>
    
    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.App" />
        <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
    </ItemGroup>
    
    <Target Name="DevelopmentPublish" AfterTargets="AfterPublish" Condition="'$(Configuration)'!='DevelopmentPublish'">
        <Delete Files="$(ProjectDir)$(publishUrl)appsettings.Development.json" />
    </Target>
    <Target Name="TestPublish" AfterTargets="AfterPublish" Condition="'$(Configuration)'!='TestPublish'">
        <Message Text="TestPublish"></Message>
        <Delete Files="$(ProjectDir)$(publishUrl)appsettings.Test.json" />
    </Target>
    </Project>
    
  3. При публикации выберите ожидаемую конфигурацию для публикации, например TestPublish для тестовой публикации.
...