2010-08-11 54 views
5

我在Visual Studio中遇到一个奇怪的行为结束2010年嵌入的资源缺少在Visual Studio 2010时,名称以“No.xxx”

当使用嵌入的资源(这被添加到我的C#项目文件和为此,构建动作属性设置为Embedded Resource),这些文件作为二进制数据包含在输出程序集中。清单资源是直截了当:

class Program 
{ 
    static void Main(string[] args) 
    { 
     string[] names = typeof (Program).Assembly.GetManifestResourceNames(); 

     foreach (var name in names) 
     { 
      System.Console.Out.WriteLine (name); 
     } 
    } 
} 

但是,如果嵌入的资源文件名与No.xxx(扩展名是无关紧要的)结束时,该文件不显示在列表中了。我无法弄清楚为什么Visual Studio 2010不会包含这样的文件。我错过了什么?

注意:如果我将解决方案资源管理器中的嵌入式资源文件重命名为其他内容,则所有内容都按预期工作。

+0

我终于发布了这个到微软连接作为一个错误(2010年8月17日)。 – 2010-08-17 04:46:11

回答

6

微软连接团队丹终于提供了这种行为valid explanation

您好,感谢您的报告,这其实是正常工作。原因是任何名称匹配模式.VALIDCULTURE.resx的resx文件都被假定为特定于该文化。 (这是它自VS2002以来的工作原理,无论好坏) 在你的情况下"no"是一种有效的文化(挪威,我猜),所以构建过程将其构建到卫星组件中。这是我尝试这个时得到的。请注意0​​子文件夹。如果在您的应用程序中将您当前的文化更改为挪威语,资源负载将加载这组资源。

所以,问题无关字No本身,而是用事实,这是一个有效的,两个字母,文化名(在我的情况下,挪威)。我查了一下,确实在bin\Debug有一个名为No的子文件夹,其中包含一个名为Project.resources.dll的卫星组件。

将资源重命名为.EN.xxx.FR.xxx当然会显示相同的行为。

+0

哇,你可以在StackOverflow上找到任何东西!如果没有嵌入文件ii.tif,也会出现同样的问题。 – 2013-05-03 14:27:38