我该如何从当前程序集动态获取所有资源?我已经尝试了两种方法GetManifestResourceNames和GetResourceSet,但都没有成功。我可以接受VB.net或C#的解决方案。
第一种方法
这个方法只返回一个长度为1的数组,值为"MyNameSpace.Resources.resource",问题是这个文件中有多个资源。
将其放入代码中。
第一种方法
这个方法只返回一个长度为1的数组,值为"MyNameSpace.Resources.resource",问题是这个文件中有多个资源。
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",或者所有必需的卫星程序集都可以加载和完全签名。
解决方案(根据Hans Passant)
从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)