VB.NET与C#中的嵌入式资源

时间:2011-08-03 11:08:51

标签: c# .net vb.net embedded-resource

问题:

我在我的应用程序中嵌入了ressources(SQL脚本),我的DAL dll使用它,我在我的应用程序中使用它。

现在,嵌入式资源位于文件夹SQL / SQL_Server /和SQL / MS_Access /.

我在运行时使用服务器类型(Access,SqlServer)和文件名读取它们。

这很好用,因为嵌入的ressourcename是: myappname.Folder.Subfolder.FileName,例如appname.SQL.MS_Access.Filename

但是,如果我现在从VB调用此dll,则ressourcename仅为: myappname.FileName

有没有办法在VB.NET中获取嵌入式资源的文件夹名称?
或者在编译时包含它?
或者在VB.NET主机和C#主机之间区分DAL?

System.Reflection.Assembly asmDataSourceAssembly = System.Reflection.Assembly.GetEntryAssembly();

string strRessourceRoot = null;
foreach (string strThisRessourceName in asmDataSourceAssembly.GetManifestResourceNames())

然后与strThisRessourceName.ToLower()进行比较.EndsWith(“sql.foldername.filename”)

更确切地说:
C#中的Main.exe与嵌入式资源+ CAL中的DAL.DLL = 工作
VB.NET中的Main.exe,嵌入式资源+ CAL中的DAL.DLL = 无法正常工作,因为GetManifestResourceNames()只获取嵌入式资源的文件名,而不是文件夹名称。另外一个副作用是,在VB.NET exe中不能嵌入多个具有相同名称的文件,即使它们位于不同的文件夹中(编译时错误)。 (同样的事情在C#中绝对正常)。

2 个答案:

答案 0 :(得分:2)

VB编译器不会隐式地将子文件夹映射为子命名空间,因此,为了实现子命名空间在程序集的默认命名空间下面的效果(通过项目属性配置,默认为项目名称),您将需要在文件名中包含子命名空间

答案 1 :(得分:1)

C#和VB.NET如何处理这个问题实际上有所不同,但是嵌入式资源存在的DLL语言决定了命名空间。在我们使用自动化工具将一些旧的VB.NET代码转换为C#之后,我们遇到了路径变化的问题。

更多信息:http://weblogs.asp.net/istofix/archive/2008/10/21/embedded-resources-in-vb-net-and-c-projects.aspx