2010-08-11 82 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