Встроенный ресурс в VB.NET vs. C # - PullRequest
2 голосов
/ 03 августа 2011

Вопрос:

У меня есть встроенные ресурсы (скрипты SQL) в моем приложении, которые используются моей библиотекой DAL, которую я использую в своем приложении.

Теперь встроенные ресурсы находятся в папках SQL / SQL_Server / и SQL / MS_Access /.

Я прочитал их во время выполнения, используя тип сервера (Access, SqlServer) и имя файла.

Это прекрасно работает, потому что встроенное имя ресурса: myappname.Folder.Subfolder.FileName, например, appname.SQL.MS_Access.Filename

Однако, если я сейчас вызываю эту dll из VB, только имя ресурса: 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")

Точнее,
Main.exe в C # со встроенными ресурсами + DAL.DLL в C # = работает
Main.exe в VB.NET со встроенными ресурсами + DAL.DLL в C # = не работает , потому что GetManifestResourceNames () получает только имя встроенного ресурса, а не имена папок. В качестве дополнительного побочного эффекта нельзя встраивать несколько файлов с одинаковыми именами в исполняемый файл VB.NET, даже если они находятся в другой папке (ошибка времени компиляции). (то же самое работает абсолютно нормально в C #).

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Компилятор VB неявно отображает подпапки в подпространства имен, поэтому для достижения эффекта подпространства имен ниже пространства имен по умолчанию для сборки (как настроено через свойства проекта, по умолчанию используется имя проекта), вам потребуется включить подпространства имен в имя файла

1 голос
/ 03 августа 2011

На самом деле существует разница в том, как 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

...