为具有.resx文件的C#类生成.resources文件时,Visual Studio 2022仅使用命名空间和外部类名称来生成.resources文件的名称。如果有多个类(具有.resx文件)嵌套在同一个外部类中,则.resources文件的名称将相同,从而导致错误MSB 3577。
有什么办法可以解决这个问题吗?例如,.csproj文件的条目中是否有一个参数来设置输出名称?或者,当涉及到.resx文件时,我是否可以避免使用嵌套类?
背景
为什么我有嵌套的Form类?
有一个类名为 SpecialTrackBar 的C#控件。该类接受 DataItem 对象的集合,因此有 DataItem 和 DataItemCollection 类。用于编辑集合的对话框为 DataItemCollectionEditorDialog。
我不想将这些类放在与 SpecialTrackBar 相同的命名空间中,因为它们可能会与其他控件类冲突,而且我不想创建像 SpecialTrackBarDataItemCollectionEditorDialog 这样的超长类名。
使用嵌套类和 SpecialTrackBar.DataItemCollectionEditorDialog 似乎是一个很好的折衷方案。我希望有一个替代的命名解决方案。
复制步骤:
1.在Visual Studio 2022中,使用.NET Framework 4.6.2创建一个名为“NestedResTest”的新Windows窗体控件库。
1.添加两个Windows窗体Dialog 1和Dialog 2。将自动创建文件Dialog1.cs、Dialog1.Designer.cs和Dialog1.resx以及Dialog 2的相应文件。Dialog 1和Dialog 2类都将位于命名空间NestedResTest中。
1.将MSBuild项目生成输出详细程度设置为“诊断”(工具-〉选项-〉项目和解决方案-〉生成并运行)。
1.生成NestedResTest。生成应该成功。在生成输出中搜索包含“OutputResources=”的行,您应该会看到两个.resources文件:嵌套的资源测试对话框1.resources嵌套的资源测试对话框2.resources
1.编辑Dialog1.cs和Dialog1.Designer.cs,并将Dialog 1类放入分部类InnerClass中。
1.生成NestedResTest。生成应该成功。在生成输出中搜索包含“OutputResources=”的行,您应该会看到两个.resources文件:嵌套资源测试.内部类.资源嵌套资源测试.对话框2.资源
1.编辑Dialog2.cs和Dialog2.Designer.cs,并将Dialog 2类放入分部类InnerClass中。
1.生成NestedResTest。生成应失败,并出现错误MSB 3577。在生成输出中搜索包含“OutputResources=”的行,您应看到两个.resources文件,这两个文件具有相同的名称:NestedResTest.InnerClass.resources
1条答案
按热度按时间hgc7kmma1#
我假设您知道嵌套Form类的主要后果是失去了对设计窗体的设计器支持。
也就是说,如果要修复资源名称问题,可以使用以下选项之一控制how the resource manifest files named:
<ManifestResourceName>
<LogicalName>
<DependentUpon>
示例-控制清单资源名称的生成方式
1.右键单击一个项目并卸载该项目
1.找到您感兴趣的
<EmbeddedResource>
,然后执行下列操作之一:<ManifestResourceName>
*<LogicalName>
*<DependentUpon>
*1.右键单击项目并重新加载。
生成并运行项目。您将看到资源已应用并按预期工作。