2013-10-06 257 views
0

我有解决方案,包括几个项目。
项目之一是常见的图书馆项目,其中主要包含可重复使用的代码和功能,它们共享解决方案中的所有其他项目并引用所有包含的项目。
在该项目中,我也有资源,比如是图像和图标,我可以从其他项目中访问这些资源这样的:解决方案中所有项目的共同资源

Me.Icon = myCommonDll.My.Resources.backup__add__16x16 

的问题是: 是否可以以某种方式进行,在myCommonDll这些公共资源将是解决方案中的其他项目的实际资源,所以当我在设计器的属性窗口中单击“图像”或“图标”时,我会列出myCommonDll.My.Resources中列出的图像或图标,以及如何操作?

+0

您是否让资源文件公开? – VahiD

+0

我不知道你在想什么,但是在myCommonDll.My.Resources.Images和myCommonDll.My.Resources.Icons中有很多文件。如果这是你的意思,我从相关的组合框设置“访问修饰符”为“公共”? –

+0

是的,这就是我的意思,但经过评论,我意识到,即使您将Access Modifier设置为public,您也无法在设计器中使用资源查看其他项目设置图像的资源,但我认为它无法完成 – VahiD

回答

1

编辑:这主要是针对VS2008之前的VS版本,它不允许您更改RE资源的访问级别修改器。其他的选择是外部工具或反射,但仍然没有向设计师公开资源。

DLL资源在运行时非常容易,但不在设计器中。您需要在DLL中编写一个小代理以按名称获取图像。 DLL:

Public Class ResMgr 
' depending on what else is in the DLL, can just add to an existing class 
Public Function GetImage(imgName As String) As Image 
     Return My.Resources.ResourceManager.GetObject(imgName) 
End Function 

'' alternatively declare it SHARED eg 
''Public Shared Function/Property GetImage As Image 

End Class 

应用:

MyRM = New ResMgr 

thisImg = New Image 
thisImg = MyRM.GetImage(userImg) 

如果您构建它作为Shared方法,它仅仅是:

thisImg = ResMgr.GetImage(userImg) 

如果你愿意,你可以在DLL中揭露一个枚举充当资源清单:

Public Enum ResImg 
     Image1      ' use the names of the images 
     Backup52 
     Flag_FR 
     Flag_RUS 
     ... 
End Enum 

DLL函数可以对ResImg起作用并使用大的case语句,也可以使用[Enum].GetNames来转换/获取一组图像资源名称。

+0

Hi Plutonix。我没有看到这一点,因为如果我引用一个DLL并将它导入为名称空间,那么在设计和运行时我可以访问图像,如果我知道我经常不知道的确切名称。这似乎是一个伟大的缺乏视觉工作室项目! –

+0

它实际上是公开使DLL资源的替代方案。此外,在VS 2008之前的VS版本中,没有针对资源的访问级别修饰符,因此其中一个留给了Reflection或类似的东西来获取它们('InternalsVisibleToAttribute'不适用于NET2和VB组合)。不知道你有什么VS版本。 – Plutonix

+0

好的,谢谢,我在VS2008上工作。 –

0

编辑您的.vbproj文件并通过添加共享资源文件的公共目录路径来更新下面的两个语句。祝你好运!

<Compile Include="<common Dir>\My Project\Resources.Designer.vb"> 
    <AutoGen>True</AutoGen> 
    <DesignTime>True</DesignTime> 
    <DependentUpon>Resources.resx</DependentUpon> 
</Compile> 

<EmbeddedResource Include="<common Dir>\My Project\Resources.resx"> 
    <Generator>VbMyResourcesResXFileCodeGenerator</Generator> 
    <CustomToolNamespace>My.Resources</CustomToolNamespace> 
    <SubType>Designer</SubType> 
    <LastGenOutput>Resources.Designer.vb</LastGenOutput> 
</EmbeddedResource> 
相关问题