我在爲嵌入式資源獲取流時遇到了問題。大多數在線示例顯示可通過將路徑的斜槓更改爲源點(MyFolder/MyFile.ext變爲MyNamespace.MyFolder.MyFile.ext)來直接翻譯的路徑。但是,如果文件夾的名稱中有一個點,並且使用了特殊字符,則手動獲取資源名稱將不起作用。我試圖找到可以作爲Visual Studio的編譯時重命名他們的路徑轉換爲資源名稱的功能..檢索帶有特殊字符的嵌入式資源
從溶液這些名字......
- 內容/ jQuery.UI- 1.8.2/jQuery.UI.css
- 腳本/ jQuery的1.5.2 /的jquery.js
- 腳本/ jQuery.jPlayer-2.0.0/jQuery.jPlayer.js
- 腳本/ jQuery.UI- 1.8.2/jQuery.UI.js
...都變成這些名稱在資源...
- Content.jQuery.UI_1._8._2.jQuery.UI.css
- Scripts.jQuery_1._5._2.jQuery。 JS
- Scripts.jQuery.jPlayer_2._0._0.jQuery.jPlayer.js
- Scripts.jQuery.UI_1._8._12.jQuery.UI.js
斜線被轉換爲點。但是,當在文件夾名稱中使用點時,第一個點顯然被認爲是擴展名,其餘點將更改爲帶有下劃線的前綴。然而,這個邏輯不適用於jQuery.js文件,也許是因爲'擴展'是單個數字?這裏有一個函數可以轉換我到目前爲止所遇到的問題,但不能用於jQuery.js路徑。
protected String _GetResourceName(String[] zSegments)
{
String zResource = String.Empty;
for (int i = 0; i < zSegments.Length; i++)
{
if (i != (zSegments.Length - 1))
{
int iPos = zSegments[i].IndexOf('.');
if (iPos != -1)
{
zSegments[i] = zSegments[i].Substring(0, iPos + 1)
+ zSegments[i].Substring(iPos + 1).Replace(".", "._");
}
}
zResource += zSegments[i].Replace('/', '.').Replace('-', '_');
}
return String.Concat(_zAssemblyName, zResource);
}
有沒有可以改變我的名字的函數?它是什麼?或者我在哪裏可以找到所有規則,以便我可以編寫自己的功能?感謝您可能提供的任何幫助。
感謝您的快速反應基思。我無法找到提到的類,儘管它看起來是在「Microsoft.Dss.Services.AssemblyEmbeddedResourceService」(本地沒有)。這通常也意味着mono沒有實現它,這是我不能忽視的。也許還有其他方法? – 2011-04-24 09:57:57
我重申:在每個包含資源的目錄中定義一個空的「標記」類。我剛寫下「MarkerClass」這個名字。我有一個谷歌,前提是有一個更好的方法,並提出了這個小寶石:http://stackoverflow.com/questions/27757/how-can-i-discover-the-嵌入式資源的路徑......我希望這很有用。 – corlettk 2011-04-24 10:02:14
你不能在帶點的名字空間中定義一個類(這正是我需要的信息,嵌入的資源名稱是如何編碼的?)。一旦名字正確,我可以根據你的鏈接引用簡單地使用GetManifestResourceStream。 – 2011-04-24 10:25:11