當我將文件構建爲「嵌入式資源」時,Visual Studio根據其在項目中的路徑在程序集中給它一個名稱。例如。在cases/2013.1/colours.xml
我的文件被賦予一個資源名稱,其零星下劃線如cases._2013._1.colours.xml
。.NET如何重命名我的嵌入式資源?
我的問題是 - 這個名字是如何確定的?規則是否記錄在案? Visual Studio使用的方法在哪裏?
編輯:我問,因爲我正在處理大量的這些事情,並且能夠從文件路徑中推導出資源名稱會有所幫助。
當我將文件構建爲「嵌入式資源」時,Visual Studio根據其在項目中的路徑在程序集中給它一個名稱。例如。在cases/2013.1/colours.xml
我的文件被賦予一個資源名稱,其零星下劃線如cases._2013._1.colours.xml
。.NET如何重命名我的嵌入式資源?
我的問題是 - 這個名字是如何確定的?規則是否記錄在案? Visual Studio使用的方法在哪裏?
編輯:我問,因爲我正在處理大量的這些事情,並且能夠從文件路徑中推導出資源名稱會有所幫助。
正如MSDN Library文章所述,Resgen.exe使用由StronglyTypedResourceBuilder.VerifyResourceName() method實施的規則。我將複製MSDN庫所說的內容:
如果鍵參數是空字符串(「」),則返回由單個下劃線字符(_)組成的字符串。如果key參數不是空字符串,則VerifyResourceName方法會根據provider參數指定的語言將字符串中的每個字符與一組無效令牌進行比較。字符串中的任何無效字符將替換爲下劃線字符。將用下劃線替換的字符如下:
''(空格),U + 00A0(非空格),'。' (句號),','(逗號),';' (分號),'|','〜','@','#','%','^','&','*','+',' - ','/','\ '','<','>','?','[',']','(',')','{','}','''(quote),'''(撇號),「:」「!」。和
注意
強類型資源不允許使用語言的關鍵字(如if,for和等)作爲資源鍵名稱然而, System.CodeDom設計模式允許通過在關鍵字前加下劃線字符來使用語言關鍵字,VerifyResourceName方法調用CreateValidIdentifier方法來強制執行此設計,例如,如果您使用的資源名稱與語言關鍵字相同,例如for,該名稱在生成的強類型資源類中顯示爲_for。
查看StronglyTypedResourceBuilder類的源代碼,文檔是準確的。
太棒了!我應該爲第二個參數提供什麼? –
CodeDomProvider,只需點擊MSDN庫鏈接即可。自從您爲問題添加標籤後,您將使用CSharpCodeProvider [c#]。這是該方法如何知道某種語言中的關鍵字的方法,該部分在「說明」中進行了說明。 –
有趣的是,當我手動調用StronglyTypedResourceBuilder.VerifyResourceName時,得到的結果與我的程序集中的名稱不同。例如bundle.config變爲bundle_config,但程序集中的名稱是bundle.config –
我不知道有關Visual Studio本身如何生成名稱的任何文檔,但我通常會認爲它與resgen.exe用於獨立構建的算法兼容,此文檔記錄爲here。但是,所描述的算法不適用於您的示例(除非我誤解它,否則它將生成類名稱cases._013._.colours
),因此,VS不正確地實現它,或者Resgen文檔對於您描述的特定情況不準確。
,你可以應用到你的例子是簡單的規則...
cases/2013.1/colours.xml
1)取代 「/」 與 「」
cases.2013.1.colours.xml
2),用於在點的每個項目分隔的字符串,如果該項目以數字開頭,前面加上下劃線給它。
cases => cases
2013 => _2013
1 => _1
colours => colours
xml => xml
3)重新組裝字符串,用點分隔。
cases._2013._1.colours.xml
其原因是資源的名稱必須與代碼符號兼容 - 所以數字需要具有字母字符或下劃線作爲前綴使它們成爲有效符號(變量名稱)。最好的方法是使用不需要改變的名字,例如「2012年」而不是「2012年」。這樣,名稱將以非常簡單的方式進行翻譯(用點代替斜槓)。 –
使用_因爲標識符不能以數字開頭(至少在C#中)。 – leppie
[相關](http://stackoverflow.com/q/3605514/21567),你可能只是改變你的喜好名稱。 –
另請參見http://stackoverflow.com/a/10714391/1354426 – Stipo