.NetCore应用程序中有4个appsettings.json:
所有appsettings具有请勿复制属性,但是我注意到在发布应用程序时,所有appsettings文件都被复制到发布文件夹中。 例如,即使我正在使用 Test 环境进行发布,也将 appsettings.Production.json 复制到发布文件夹中。
这没有什么坏处,但是我想知道在使用 Test发布时是否可以仅复制 appsettings.json 和 appsettings.Test.json 环境?
答案 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.json
和Test
。
答案 1 :(得分:0)
发布时,我们可以指定Configuration
。要实现您的要求,您可以通过Configuration Manager
定义不同的配置。
Development
,Test
等DevelopmentPublish
和TestPublish
等新的活动解决方案配置修改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
之类的期望发布配置。