在VS 2010中,.Net 4.0
我試圖獲取給定dll中所有字符串資源的名稱
最終目標是,從一組文件中,能夠獲取所有資源,檢查哪些是字符串,並測試這些名稱以查看它們是否具有我正在尋找的關鍵詞。
重點是:我只有dll文件,沒有別的。
讓說我的文件名是如何從dll文件獲取字符串資源?
Dim myDllFullFileName as string = "C:\Bob.dll"
首先,我想我應該得到反思:
Dim myAssembly As New Reflection.Assembly
myAssembly=Reflection.Assembly.LoadFrom(myDllFullFileName)
那麼問題開始。
如果我只是尋找我的當前項目的字符串資源我能做到這一點:
Dim myResourceSet As Resources.ResourceSet
myResourceSet = My.Resources.ResourceManager.GetResourceSet(Globalization.CultureInfo.CurrentCulture, True, True)
For Each Dict As DictionaryEntry In myResourceSet.OfType(Of Object)()
If TypeOf (Dict.Value) Is String Then
If Dict.Key.ToString.Contains("myOwnKeyHere") Then
'work with dict.value'
End If
End If
Next
這將正常工作爲我的當前項目。結果正是我所期待的。
我的問題是,我想用dll文件來做。
我想我應該能夠從myAssembly創建一個ResourSet。爲此,我需要一個ResourceManager。
從MyAssembly程序建立一個新的ResourceManager,我也許應該用這個方法:
Public Sub New(baseName As String, assembly As System.Reflection.Assembly)
而這正是我丟:我不設法擺脫,我現在用的是dll文件的基本名稱。
我也嘗試與
myAssembly.GetManifestResourceNames()
但它返回一個空數組
如果任何人有一個想法,我將不勝感激。
謝謝。
在這裏檢查:http://stackoverflow.com/questions/27757/how-can-i-discover-the-path-of-an-embedded-resource你是100%確定你正在正確加載DLL並且它確實包含嵌入式資源? –
我確信我已經嵌入資源(在resx文件中)。資源也設置爲PUBLIC而不是Friend。現在我不是100%確定我正確加載dll,但我認爲是這樣,因爲我可以執行此操作:例如,myAssembly.GetTypes。 – PatTheFrog