2011-08-03 71 views
2

問題:在我的應用程序,這習慣我的DAL的DLL,我在我的應用程序中使用嵌入式的ressource與C#

我有嵌入ressources(SQL腳本)。

現在嵌入式資源駐留在文件夾SQL/SQL_Server /和SQL/MS_Access /中。

我在運行時使用服務器類型(Access,SqlServer)和文件名讀出它們。

這工作正常,因爲嵌入的資源名是: myappname.Folder.Subfolder.FileName,例如, appname.SQL.MS_Access.Filename

但是,如果我現在請從VB這個dll,該ressourcename只是: myappname.FileName

有沒有辦法讓在VB中嵌入的ressource的文件夾名稱.NET?
或編譯時包含它?
或者區分VB.NET主機和C#主機之間的DAL?

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#與嵌入ressources + DAL.DLL在C#= 在C#中嵌入ressources + DAL.DLL工作
MAIN.EXE在VB.NET = 不工作因爲GetManifestResourceNames()只得到了嵌入式ressources的文件名,而不是文件夾名稱爲好。作爲附加的副作用,即使它們位於不同的文件夾(編譯時錯誤),也不能在VB.NET exe中嵌入多個具有相同名稱的文件。 (同樣的事情在C#中工作得非常好)。

+0

? –

+0

@Rowland肖:添加。 –

+0

這就是你的C#代碼;你說的VB代碼不工作?如果你的SQL腳本也被編譯到DAL程序集中,那麼你使用'GetEntryAssembly()'似乎很奇怪? –

回答

2

VB編譯器不會隱式地將子文件夾映射爲子名稱空間,因此,爲了實現程序集的默認名稱空間下的子名稱空間的效果(通過項目屬性配置,默認爲項目名稱),您將需要在文件名中包含子命名空間

+0

這就是我在過渡期間所做的,但這是非常煩人和不受歡迎的。 –

+0

我在搜索的是一種將子文件夾明確映射到子名稱空間的方法,或者只是手動指定子名稱空間。 –

1

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

+0

你寫的是正確的。但我已經意識到這一點,既然這是問題,而不是解決方案,我不太理解你的帖子的重點。 –