2017-11-03 184 views
1

我在Visual Studio中有一个Windows Forms .NET应用程序。制作一个“可本地化”的表格添加一个嵌套在表单下的Form1.resx文件。我也想为每个表单(Form1Resources.resx)添加一个单独的.resx文件。这用于自定义特定于表单的资源,例如使用后面的代码生成的消息。当在.NET应用程序中嵌套表单中的多个.resx文件时出现“两个输出文件名解析为相同的输出路径”错误

这是设置如下:

Standard project files

这将是整洁巢.resx文件形式下的自定义(见this question有关窝如何做到这一点的详细信息),如下所示:

Project files with nested resx file

然而,这会导致以下错误,当我构建应用程序:

两个解决到相同的输出路径输出文件名: “OBJ \调试\ WindowsFormsApp1.Form1.resources” WindowsFormsApp1

我猜的MSBuild使用一些逻辑来找到嵌套.resx文件和根据其父项生成.resources文件。有什么办法可以解决这个问题吗?

请注意,无法将自定义消息添加到Form1.resx文件 - 这仅适用于特定于设计的资源,并且您在添加设计模式中保存更改时添加的所有资源都会被覆盖。

+0

你应该解释一下你是怎么Form1Resources.resx嵌套表格下方。 – stijn

回答

1

错误来自GenerateResource任务,因为两个resx文件(msbuild中的EmbeddedResource项目)都传递了ManifestResourceName元数据值。这个值是由CreateManifestResourceNames任务创建的,假设当它看到具有DependentUpon元数据集的EmbeddedResource(对于Form1.cs)时,它总是生成'$(RootNamespace)。%(DependentUpon)'形式的东西:您的resx文件最终与WindowsFormsApp1.Form1作为ManifestResourceName。这可以被视为所有的Form1下的resx文件不整齐的原因:它不是为了它的意思,需要额外的摆弄,而且可能会让别人感到困惑,因为他们通常会期望包含放置在下面的resx文件形式来包含它始终做的事情。

总之:有至少2种方法来解决此问题:

  • 有一个名为CreateCustomManifestResourceNames目标这是指用于定制ManifestResourceName创作。对于你的情况可能有点太多了,只是提到它的完整性
  • 你自己手动声明一个ManifestResourceName,它不会与其他(s)冲突;如果元数据已经存在它不会被

通用的代码示例覆盖:

<EmbeddedResource Include="Form1Resources.resx"> 
    <DependentUpon>Form1.cs</DependentUpon> 
    <ManifestResourceName>$(RootNamespace).%(FileName)</ManifestResourceName> 
    ... 
</EmbeddedResource> 
+0

很好的解释 - 正是我想知道的。 –

相关问题