问题:
我在我的应用程序中嵌入了资源(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/