为什么我的 resx 文件为升级的 NetStandard 项目生成 System.Drawing.Icon

Why is my resx file generating System.Drawing.Icon for Upgraded NetStandard Project

我修改了现有的 .net 461 项目以使用 netstandard 2.0,方法是创建一个新的项目文件并将目标框架切换为 netstandard20

除了我的包含图标的资源文件外,一切似乎都正常。我将以下内容添加到我的 csproj 文件中以确保生成为 运行:

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

但是,每次生成 Designer.cs 文件时,它都会引用 System.Drawing.Icon,这对 .Net 标准项目无效。如何配置设计器文件以正确使用 System.Byte[] 作为我的图标资源?

Resource.resx 文件具有用于生成的类型名称嵌入在 XML 中。您需要使用文本编辑器修改此文件并将其定向为使用 System.byte[] 而不是 System.Drawing.Icon.

例如,您的 resource.resx 文件中可能有以下条目:

<data name="FooBar" type="System.Resources.ResXFileRef, System.Windows.Forms">
  <value>..\Resources\FooBar.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>

您可以将输出类型更新为字节数组,如下所示:

<data name="FooBar" type="System.Resources.ResXFileRef, System.Windows.Forms">
  <value>..\Resources\FooBar.ico;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>