SDK格式CSPROJ需要哪些编译元素?

问题描述

我正在为C#项目使用“新” SDK格式的项目样式。我仍在使用.NET Framework 4.8,它是一个winforms应用程序。我已经像这样定义了项目:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <UseWindowsForms>true</UseWindowsForms>
    <TargetFramework>net48</TargetFramework>
    <!-- etc... -->
  </PropertyGroup>
</project>

我注意到,在没有分别考虑CompileEmbeddedResource文件的任何明确*.cs*.resx元素的情况下,我的Form.cs,{{1 }}和Form.Designer.cs文件在Visual Studio 2019中正确分组。

它们在解决方案资源管理器中的列出方式如下:

Form.resx

但是,奇怪的是资源文件本身(位于+ Form.cs - Form.Designer.cs - Form.resx 的资源文件没有适当地分组:

Properties/Resources.resx

它们都显示为同级文件且未嵌套。如果我将此XML放入csproj中:

+ Resources.Designer.cs
+ Resources.resx

然后我在解决方案资源管理器中获得了预期的层次结构:

  <ItemGroup>
    <Compile Update="Properties\Resources.Designer.cs">
      <DesignTime>True</DesignTime>
      <AutoGen>True</AutoGen>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
  </ItemGroup>

资源文件是否需要+ Resources.resx - Resources.Designer.cs 元素,或者这是一个错误吗?什么是正确的设置?

请注意,在最新版本的Jetbrains Rider中,它显示了两次更改之间的正确嵌套;只是Visual Studio 2019显示出层次结构上的差异。

我无法在MSDN上找到有关此的任何特定文档。我知道this page,但似乎没有专门解决这个话题。

测试版本:

  • 骑士:2020.1.4
  • Visual Studio:16.6.5

解决方法

SDK 项目仅生成默认的 use strict; use warnings; 元素。您的元素通过使用 <Compile Include="*\*.cs /> 添加 DesignTimeAutoGenDependUpon 属性来改变默认行为。

可以在此处找到有关系统生成的 <Compile Update="Properties\Resources.Designer.cs"> 元素的更多信息:https://docs.microsoft.com/en-us/dotnet/core/project-sdk/overview#default-includes-and-excludes