Можно ли публиковать только определенные appsettings.json в приложении .NetCore

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

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

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

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


person yyc    schedule 19.12.2018    source источник
comment
Можно удалить файлы до и после публикации в профиле публикации Visual Studio. Вы можете создавать различные профили публикации, каждый из которых удаляет указанные вами настройки приложения после публикации.   -  person Sasan    schedule 19.12.2018
comment
Как вы указали тестовую среду при публикации?   -  person Edward    schedule 20.12.2018


Ответы (2)


Наконец, уловка состоит в том, чтобы использовать <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.

person yyc    schedule 16.01.2019

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

  1. Щелкните раскрывающееся меню «Отладка или выпуск» -> «Диспетчер конфигураций» -> «Новая конфигурация активного решения для Development, Test и т. Д., Например DevelopmentPublish и TestPublish».
  2. Измените 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 для процесса тестовой публикации.
person Edward    schedule 20.12.2018
comment
Я просто создал разные профили публикации для каждой среды и добавил цель удаления непосредственно в каждую с конкретными файлами, которые нужно удалить для этой среды. Спасибо за идею. Работает хорошо! - person Craig; 24.08.2020