【问题标题】:Is it possible to publish only certain appsettings.json in .NetCore application是否可以在 .Net Core 应用程序中仅发布某些 appsettings.json
【发布时间】:2018-12-19 05:34:54
【问题描述】:

我的 .NetCore 应用程序中有 4 个 appsettings.json:

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

所有 appsettings 都有 Do not copy 属性,但我注意到在发布应用程序时,所有 appsettings 文件都被复制到发布文件夹。 例如,即使我使用 Test 环境发布,也会将 appsettings.Production.json 复制到发布文件夹。

这没有什么坏处,但我想知道在使用 Test 发布时是否可以只复制 appsettings.json 和 appsettings.Test.json 环境?

【问题讨论】:

  • 在 Visual Studio 发布配置文件中发布前后可以删除文件。您可以创建各种发布配置文件,每个发布配置文件都会在发布后删除您指定的应用设置。
  • 发布时如何指定测试环境?

标签: .net visual-studio asp.net-core .net-core appsettings


【解决方案1】:

最后,诀窍是对 appsettings.json 使用 <Content Remove="">。

我更新了我的 .csproj 以使用 conditional constructor 在不同环境之间切换。这是它的样子:

<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>

当我使用Test 环境运行发布时,该文件夹现在不包含appsettings.Development.json 和appsettings.Production.json。

【讨论】:

    【解决方案2】:

    在发布时,我们可以指定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。

    【讨论】:

    • 我刚刚为每个环境创建了不同的发布配置文件,并将“删除目标”直接添加到每个环境中,其中包含要为该环境删除的特定文件。谢谢你的主意。效果很好!
    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多