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

本文关键字:嵌入式 资源 NET VB | 更新日期: 2023-09-27 18:04:17

问题:

我在我的应用程序中嵌入了资源(SQL脚本(,这些资源由我的DAL dll使用,我在应用程序中使用它。

现在嵌入的资源位于文件夹SQL/SQL_Server/和SQL/MS_Access/中。

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

这很好,因为嵌入的资源名称是:myappname。Folder.Subfolder.FileName,例如appname。SQL.MS_Access.Filename

但是,如果我现在从VB调用此dll,则资源名称仅为:myappname。FileName

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

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和C#中的嵌入式资源+DAL.DLL=工作
VB.NET中嵌入资源的Main.exe+C#中的DAL.DLL不起作用,因为GetManifestResourceNames((只获取嵌入资源的文件名,而不获取文件夹名。另一个副作用是,不能在VB.NET exe中嵌入多个同名文件,即使它们位于不同的文件夹中(编译时错误(。(同样的事情在C#中运行得非常好(。

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

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

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