如何从当前程序集中动态获取所有资源?我尝试了两种方法,GetManifestResourceNames和GetResourceSet都没有成功。我对VB.net或C#中的解决方案很满意。
第一种方法
第一种方法只返回长度为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” 在编译时,或所有的 所需的卫星组件是 可加载和完全signed.loadable和完全签名。
解决方案(根据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)
答案 0 :(得分:3)
是的, MyNameSpace.Resources.resource 中有超过1个资源。您必须传递给ResourceManager的名称是什么,空字符串不起作用。
要查看必须编写的代码类型,请启动Windows窗体应用程序并向Project + Properties,Resources选项卡添加一些资源。在解决方案资源管理器中,单击“显示所有文件”图标。打开My Project节点,打开Resources.resx节点,然后双击Resources.Designer.vb文件。请注意ResourceManager属性的代码。