【发布时间】:2011-08-03 21:57:21
【问题描述】:
问题:
我在我的应用程序中嵌入了资源(SQL 脚本),这些资源被我的 DAL dll 使用,我在我的应用程序中使用它。
现在嵌入式资源位于文件夹 SQL/SQL_Server/ 和 SQL/MS_Access/ 中。
我在运行时读取它们,使用服务器类型(Access、SqlServer)和文件名。
这很好用,因为嵌入的资源名称是: myappname.Folder.Subfolder.FileName,例如appname.SQL.MS_Access.Filename
但是,如果我现在从 VB 调用此 dll,则资源名称仅为: 我的应用程序名.文件名
有没有办法在 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 = works
VB.NET 中带有嵌入式资源的 Main.exe + C# 中的 DAL.DLL = 不工作,因为 GetManifestResourceNames() 只获取嵌入式资源的文件名,而不是文件夹名称。另外一个副作用是,不能在 VB.NET exe 中嵌入多个同名文件,即使它们位于不同的文件夹中(编译时错误)。
(同样的事情在 C# 中工作得很好)。
【问题讨论】:
-
你使用什么代码来加载资源?
-
那是你的 C# 代码;你说的VB代码不起作用怎么办?如果您的 SQL 脚本也被编译到 DAL 程序集中,那么您使用
GetEntryAssembly()似乎很奇怪? -
没有VB代码。 DAL dll 中的 C# 代码从主 .exe 中获取嵌入式资源,这是一个 VB.NET 可执行文件。 VB代码只是调用DAL中的方法,然后DAL访问主.exe的内嵌资源中的SQL脚本。
-
明确地说,你有没有:main.exe(用c#编写,里面有资源)调用一个调用你的DAL程序集的vb.net程序集(同样,用c#编写);这与以下行为不同:相同的 exe 通过不同的中间程序集调用(这次是在 c# 中)调用相同的 DAL 程序集?
-
@Rowland Shaw:完全错误。我有一个 main.exe(用 VB.NET 编写,其中包含资源),它引用 DAL.dll(用 C# 编写,完成所有数据库工作),并且 DAL.DLL 提取 SQL 脚本 [=ressources]嵌入在 main.exe 中。然后 main.exe 调用 DAL.dll 中的函数(例如执行 insert_table_xy.sql)。
标签: c# .net vb.net embedded-resource