如何获得一个控制台项目来对我的appsettings.json文件进行分组?

时间:2018-07-09 20:47:10

标签: visual-studio-2017 .net-core asp.net-core-2.0

如果我启动一个新的Web api项目,则appsettings文件将分组在一起。但是,我是从控制台应用程序模板创建一个正在运行的项目,并且当我手动创建appsettings文件时,它们不会组合在一起。我认为在较早的版本中,我会在csproj文件中放入一些内容,但是我不知道如何在.net core中进行操作,并且在属性或配置中看不到任何内容

enter image description here

2 个答案:

答案 0 :(得分:15)

在解决方案的项目文件中,您可以在<ItemGroup>元素内编辑或添加<Project>元素。这对我有用:

  <ItemGroup>
    <Content Include="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="appsettings.Development.json;appsettings.Local.json;appsettings.Production.json;">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <DependentUpon>appsettings.json</DependentUpon>
    </Content>
  </ItemGroup>

请注意,我的控制台项目面向.Net Core 2.0,并且在Visual Studio Pro 2017 15.7.5版中运行。 另外,如果您的解决方案资源管理器没有立即刷新,请尝试卸载并重新加载项目。

答案 1 :(得分:0)

使用 <ItemGroup><Content> 作为 suggested 给我一个错误(在 Visual Studio 2019 中)关于“包含重复的‘内容’项目”。事实证明,.NET SDK 默认包含项目目录中的“内容”项。将 EnableDefaultContentItems 属性设置为 false 似乎有点死板,所以现在我将项目包含为 <None>

<ItemGroup>
  <!-- Group AppSettings in Console project. Use None to prevent "Duplicate 'Content' items were included" when using (default) EnableDefaultContentItems=true -->
  <None Include="appsettings.*.json">
    <DependentUpon>appsettings.json</DependentUpon>
  </None>
</ItemGroup>

这确实显示了分组的文件,但在解决方案资源管理器中显示了具有构建操作“无”和“不复制”的属性,所以我想这就是希望它们分组的代价?

Grouped appsettings.staging.json with Build Action 'None' and 'Do Not Copy'

FWIW:appsettings-json-not-in-hierarchy 中建议的文件嵌套规则 不会将文件显示为分组/嵌套,但如果按下解决方案资源管理器折叠按钮,它将使其折叠。