是否可以仅在.NetCore应用程序中发布某些appsettings.json

时间:2018-12-19 05:34:55

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

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

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

所有appsettings具有请勿复制属性,但是我注意到在发布应用程序时,所有appsettings文件都被复制到发布文件夹中。 例如,即使我正在使用 Test 环境进行发布,也将 appsettings.Production.json 复制到发布文件夹中。

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

2 个答案:

答案 0 :(得分:1)

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

我更新了.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>

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

答案 1 :(得分:0)

发布时,我们可以指定Configuration。要实现您的要求,您可以通过Configuration Manager定义不同的配置。

  1. 单击调试或发布下拉菜单->配置管理器-> DevelopmentTestDevelopmentPublishTestPublish等新的活动解决方案配置
  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之类的期望发布配置。