名称以"No.xxx"结尾时,Visual Studio 2010中缺少嵌入式资源

Pie*_*aud 5 visual-studio-2010 embedded-resource

我在Visual Studio 2010中遇到过一种奇怪的行为.

使用嵌入式资源(添加到我的C#项目并且Build Action属性设置为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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Pie*_*aud 6

Microsoft Connect团队的Dan 终于为此行为提供了有效的解释:

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

所以问题与单词No本身无关,而是与它是一个有效的两个字母的文化名称(在我的案例中为挪威语)这一事实.我查了一下,确实有一个bin\Debug名为的子文件夹No,其中包含一个名为的附属程序集Project.resources.dll.

当然,将资源重命名为以.EN.xxx.FR.xxx当然具有相同的行为.