【问题标题】:Embedded ressource in VB.NET vs. C#VB.NET 与 C# 中的嵌入式资源
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 这是我在过渡期间所做的,但它非常烦人且不可取。
  • 我正在搜索的是一种将子文件夹显式映射到子命名空间的方法,或者只是手动指定子命名空间。
【解决方案2】:

实际上 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

【讨论】:

  • 你写的是正确的。但是我已经意识到了这一点,既然这是问题,而不是解决方案,我不太明白你的帖子的意思。
猜你喜欢
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 2016-09-09
  • 2010-09-07
  • 1970-01-01
  • 2013-11-25
相关资源
最近更新 更多