解决方案中所有项目的公共资源

时间:2013-10-06 06:31:43

标签: vb.net

我的解决方案包含的项目很少 其中一个项目是公共图书馆项目,其中主要包含可重复使用的代码和功能,这些代码和功能共享所有其他正在解决的项目,并参考所有包含的项目。
在那个项目中,我也有像图像和图标这样的资源,我可以从其他项目中访问这些资源:

Me.Icon = myCommonDll.My.Resources.backup__add__16x16

问题是: 是否可以以某种方式完成myCommonDll中的那些公共资源将成为解决方案中其他项目的实际资源,因此当我在设计器的属性窗口中单击“图像”或“图标”时,我会列出myCommonDll中存在的图像或图标。 。资源以及如何做到这一点?

2 个答案:

答案 0 :(得分:1)

编辑:这主要适用于VS2008之前的VS版本,它不允许您更改REsources的访问级别修改器。其他替代方案是外部工具或Reflection,但仍未向设计人员公开资源。

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中公开Enum以充当资源清单:

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

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

答案 1 :(得分: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>