在使用JetBrains Rider时,我喜欢通过将文件拖放到其他文件上来构成层次结构(例如接口的具体实现等)来组织代码。
我现在有一个使用一些资源的类“ EmbeddedResource”,它们是JSON文件。我想按类别/主题划分这些JSON文件,以使其易于管理,而不是只有一个大文件。
但是,当我将嵌入式资源文件放到将要使用它们的类文件上时,会出现编译错误。
此外,资源的名称在项目中已更改。显然,使嵌入式资源依赖于C#类文件会使资源的名称与C#类文件的文件名相同,而不是包含嵌入式资源的文件的名称。
最好举一个我所做的事的例子。
这是我要验证的内容:
file1.json
的json文件将以下代码拖放到Program.Main中,替换现有代码:
foreach (var name in typeof(Program).Assembly.GetManifestResourceNames())
Console.WriteLine(name);
这将输出:
ConsoleApp4.file1.json
符合预期。
然后我重复步骤2和3,获取file2.json
,重新运行,并且确定了,现在我有两个资源,分别名为file1
和file2
,具有与上述相同的模式。
然后,我将一个json文件拖到Program顶部,以便Rider具有以下组织:
如果我现在重新运行程序,则会得到以下输出:
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>
我的问题很简单:
像上面所做的那样,当我使嵌入资源依赖于另一个文件时,是否可以更改嵌入资源的名称?我可以添加一些东西到项目文件中,以覆盖用于结果资源的名称吗?
在项目文件中没有提到资源现在将继承它所依赖的文件名,这是编译器使用的某种约定形式。