Как мне динамически получить все ресурсы из моей текущей сборки? Я пробовал два метода, GetManifestResourceNames и GetResourceSet, но безуспешно. Я доволен решениями в VB.net или C #.
Первый метод
Этот первый метод возвращает только массив длины 1 с этим значением «MyNameSpace.Resources.resource». Проблема в том, что в этом файле более 1 ресурса.
Dim ca As Assembly = Assembly.GetExecutingAssembly
Dim rn() As String = CurrentAssembly.GetManifestResourceNames()
Второй метод
Dim ca As Assembly = Assembly.GetExecutingAssembly
Dim crm As New ResourceManager("", ca)
''//Dim CurrentResourceManager As New ResourceManager(_
"MyNamespace.Resources.resources", CurrentAssembly)
''//Dim CurrentResourceManager As New ResourceManager( _
"My.Resources", CurrentAssembly)
Dim rs As ResourceSet = CurrentResourceManager.GetResourceSet(CultureInfo.CurrentCulture, True, True)
Dim rs As ResourceSet = crm.GetResourceSet( _
CultureInfo.CurrentCulture, True, True)
Исключение MissingManifestResourceException не обработано
Не удалось найти ресурсы
подходит для указанной культуры
или нейтральная культура. Удостовериться
«.resources» был правильно вставлен или
ссылка на сборку "MyProgram"
во время компиляции, или что все
необходимые спутниковые сборки
загружаемый и полностью подписанный. загружаемый и полностью подписанный.
Решение (согласно Пассанту Ганса)
Скопируйте пространство имен из Resources.Designer.vb
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyNamespace.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
и поместите его в код
Dim CurrentResourceManager As New ResourceManager( _
"MyNamespace.Resources", CurrentAssembly)
Dim rs As ResourceSet = CurrentResourceManager.GetResourceSet( _
CultureInfo.CurrentCulture, True, True)