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

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

问题:

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

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

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

这工作正常,因为嵌入的资源名称是: myappname.Folder.Subfolder.FileName,例如应用程序名称.SQL.MS_Access.文件名

但是,如果我现在从 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编译器不会隐式地将子文件夹映射为子命名空间,因此,要实现程序集默认命名空间下方子命名空间的效果(通过项目属性配置,默认为项目名称),您需要在文件名中包含子命名空间

关于c# - VB.NET 与 C# 中的嵌入式资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6925510/

相关文章:

c# - 你调用的对象是空的。在 C# 中将数据表绑定(bind)到 datagridview 时

c# - 我如何对此进行 LINQify?

c# - 删除datagridview标题中的排序箭头并将文本放在框的中央

javascript - 将图像从 SQL Server 插入到 Word 文档文件

c# - 设置字符串长度限制然后填充子字符串或空格

c# - 如何判断文件是否已下载?

c# - 向 DataSet 添加了多条记录,但数据库中仅存储一条记录 (C#)

c# - C# 中 COM 的松散耦合或如何避免 COMException 0x80040154

c# - .NET Dictionary 实现如何处理可变对象

c# - 为 asp :checkbox 分配一个值(或任何其他参数)