【问题标题】:Visual Studio 2010 Resources (WPF)Visual Studio 2010 资源 (WPF)
【发布时间】:2011-08-06 08:33:06
【问题描述】:

我在 Visual Studio 中有一个类文件:Foo.cs ...我创建了一个名为 Foo.resx 的资源 (resx) 文件,因为我还计划关于拥有 Foo.es-SP.resx.

Visual Studio 很好地隐藏了资源文件,就像隐藏 xaml 页面的代码隐藏文件一样。

问题是应用程序无法编译,因为资源生成器创建了一个 Foo.Designer.cs(设计器)类,该类具有资源的内部 Foo 类,该类与我的 Foo 类的类名相同:

Foo.cs

public class Foo { ... }

Foo.Designer.cs

internal class Foo { ... }

这很烦人,因为我的应用程序现在无法编译。所以,我想我会在这里欺骗 Visual Studio 并重命名文件(而不是类本身)。我现在有 FooC.cs 和 FooC.resx 和 FooC.Designer.cs。这将 resx 类更改为 internal class FooC { ... }

它可以编译,但在我尝试获取资源时运行应用程序时不会崩溃。

  1. 为什么 Visual Studio 会创建一个与我现有的类发生冲突的内部类?很明显,为您创建的资源类应该具有相同的名称,因为它会为您组织它。

  2. 为什么我尝试使用标记为“嵌入式资源”的资源时出现运行时错误?

错误信息:

System.Resources.MissingManifestResourceException: 找不到任何资源 适用于指定的文化 或中立文化。确保 “MyProj.FooC.resources”是正确的 嵌入或链接到程序集中 “MyProj”在编译时,或者全部 所需的卫星组件是 可加载并完全签名。在 System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(字符串 文件名)

【问题讨论】:

    标签: wpf visual-studio-2010 resources manifest embedded-resource


    【解决方案1】:

    将您的 Foo.resx 的名称更改为,例如 FooResources.resx。

    【讨论】:

    • 是的,这解决了拥有两个 Foo 类的问题,但是我仍然遇到了另一个问题。此外,这使得资源只是坐在那里,而不是由 Visual Studio 组织。
    • 根据我自己的经验,我不建议您与微软设计的模式大相径庭——您稍后会尝试与该模式抗争(甚至可能获胜)。我通常在项目的不同文件夹中创建资源文件。默认情况下,这会将它们放在不同的命名空间中,因此我从来没有遇到过你所指的问题。
    • 嗯,它看起来好像微软希望能够以我想要的方式处理它(排序)。为什么 Visual Studio 会像处理表单和代码隐藏一样自动将资源折叠到 cs 文件中?
    【解决方案2】:

    在解决方案资源管理器中选择 Foo.es-SP.resx,显示其属性 (F4),并清除自定义工具属性

    【讨论】:

    • 我还没有接触到 Foo.es-SP.resx。我仍在努力让 Foo.resx 正常工作......
    • 你到底想要什么?你打算使用生成的类吗?如果没有,清除 Foo.resx 的自定义工具,它不会生成类
    • 我希望能够使用我在资源文件中键入的字符串资源。我将“标题”作为我的资源字符串之一,但是如果我不断收到这些错误,我该如何在课堂上实际使用它。理想情况下,我希望我的资源仅在我的程序集内部,但也不会给我这些命名冲突,如果我不将资源文件命名为与类文件相同,VS 不会很好地组织它。我可以添加一个 FooResources.resx 并引用它,但 Foo.resx 更好。
    猜你喜欢
    • 2011-03-02
    • 1970-01-01
    • 2011-10-11
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2020-03-30
    • 2012-03-08
    相关资源
    最近更新 更多