使用DependentUpon时可以覆盖资源名称吗?

时间:2019-07-01 09:00:30

标签: c# embedded-resource

在使用JetBrains Rider时,我喜欢通过将文件拖放到其他文件上来构成层次结构(例如接口的具体实现等)来组织代码。

我现在有一个使用一些资源的类“ EmbeddedResource”,它们是JSON文件。我想按类别/主题划分这些JSON文件,以使其易于管理,而不是只有一个大文件。

但是,当我将嵌入式资源文件放到将要使用它们的类文件上时,会出现编译错误。

此外,资源的名称在项目中已更改。显然,使嵌入式资源依赖于C#类文件会使资源的名称与C#类文件的文件名相同,而不是包含嵌入式资源的文件的名称。

最好举一个我所做的事的例子。

这是我要验证的内容:

  1. 创建一个新的.NET Core 2.2控制台应用程序(名为ConsoleApp4)
  2. 向项目添加一个名为file1.json的json文件
  3. 右键单击此文件,属性,将其设置为EmbeddedResource编译操作
  4. 将以下代码拖放到Program.Main中,替换现有代码:

    foreach (var name in typeof(Program).Assembly.GetManifestResourceNames())
        Console.WriteLine(name);
    
  5. 运行程序

这将输出:

ConsoleApp4.file1.json

符合预期。

然后我重复步骤2和3,获取file2.json,重新运行,并且确定了,现在我有两个资源,分别名为file1file2,具有与上述相同的模式。

然后,我将一个json文件拖到Program顶部,以便Rider具有以下组织:

Rider file organization

如果我现在重新运行程序,则会得到以下输出:

ConsoleApp4.Program
ConsoleApp4.file2.json

使文件依赖于Program的行为更改了所得资源的名称。如果我也将第二个json文件拖到Program顶部,则在尝试重建时会收到此编译器错误:

  

此程序集中已经使用了资源标识符'ConsoleApp4.Program'

项目文件现在包含以下几行:

<ItemGroup>
  <None Remove="file1.json" />
  <EmbeddedResource Include="file1.json">
    <DependentUpon>Program.cs</DependentUpon>
  </EmbeddedResource>
  <None Remove="file2.json" />
  <EmbeddedResource Include="file2.json">
    <DependentUpon>Program.cs</DependentUpon>
  </EmbeddedResource>
</ItemGroup>

我的问题很简单:

  

像上面所做的那样,当我使嵌入资源依赖于另一个文件时,是否可以更改嵌入资源的名称?我可以添加一些东西到项目文件中,以覆盖用于结果资源的名称吗?

在项目文件中没有提到资源现在将继承它所依赖的文件名,这是编译器使用的某种约定形式。

0 个答案:

没有答案