是否可以在 .Net Core 应用程序中仅发布某些 appsettings.json
Is it possible to publish only certain appsettings.json in .NetCore application
我的 .NetCore 应用程序中有 4 个 appsettings.json:
- appsettings.json
- appsettings.Development.json
- appsettings.Test.json
- appsettings.Production.json
所有 appsettings 都有 不要复制 属性,但我注意到在发布应用程序时,所有 appsettings 文件都被复制到 publish 文件夹。
例如,即使我使用 appsettings.Production.json 环境发布,appsettings.Production.json 也会被复制到发布文件夹。
这没什么坏处,但我想知道是否可以仅复制 appsettings.json 和 appsettings.Test.json 发布时使用 测试 环境?
发布时,我们可以指定Configuration
。要实现您的要求,您可以通过 Configuration Manager
定义不同的配置。
- 单击调试或发布下拉菜单 -> 配置管理器 ->
Development
、Test
等 DevelopmentPublish
和 TestPublish
[=26= 的新活动解决方案配置]
修改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>
- 发布时,选择预期的发布配置,例如
TestPublish
测试发布过程。
最后,诀窍是对 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
。
我的 .NetCore 应用程序中有 4 个 appsettings.json:
- appsettings.json
- appsettings.Development.json
- appsettings.Test.json
- appsettings.Production.json
所有 appsettings 都有 不要复制 属性,但我注意到在发布应用程序时,所有 appsettings 文件都被复制到 publish 文件夹。 例如,即使我使用 appsettings.Production.json 环境发布,appsettings.Production.json 也会被复制到发布文件夹。
这没什么坏处,但我想知道是否可以仅复制 appsettings.json 和 appsettings.Test.json 发布时使用 测试 环境?
发布时,我们可以指定Configuration
。要实现您的要求,您可以通过 Configuration Manager
定义不同的配置。
- 单击调试或发布下拉菜单 -> 配置管理器 ->
Development
、Test
等DevelopmentPublish
和TestPublish
[=26= 的新活动解决方案配置] 修改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>
- 发布时,选择预期的发布配置,例如
TestPublish
测试发布过程。
最后,诀窍是对 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
。