2013-03-06 24 views
0

我有一個用C#編寫的應用程序,它使用供應商提供的.Net程序集與一些定製硬件進行接口。 .Net程序集在運行時反過來加載另一個DLL。我可以將供應商提供的程序集添加到我的項目中,但是當我運行它時,供應商程序集會抱怨它無法加載所需的DLL。我可以通過將DLL複製到bin \ Debug和bin \ Release文件夾來解決此問題。如何使用Visual C#(Express,2010)中的解決方案捆綁所需的DLL

問題是我需要將這個應用程序分發給客戶端,並且他們不會有這個DLL。我看不出我如何才能使解決方案需要它;我無法將它作爲參考添加,因爲我收到錯誤「無法添加對foo.dll的引用,請確保該文件可訪問,並且它是有效的程序集或COM組件。

我不能DLL轉換爲使用TlbExp .NET程序集,它提供了一個錯誤「該模塊應包含一個程序集清單。」

我想如果我通過「點擊一次」發佈應用程序,我可以在那裏聲明依賴關係,但是我也沒有看到任何方法。我也嘗試將其添加爲文件資源,但這似乎沒有幫助。

我可以看到關於如何調用外部DLL中的功能的SO上的其他問題,但在這種情況下,我只需要一種方法將DLL與項目捆綁在一起。

謝謝。

+0

你可以嘗試通過Visual Studio創建一個Windows安裝程序,並在該DLL中捆綁該DLL – Lojko 2013-03-06 11:59:05

+0

謝謝,審查這似乎創建一個安裝程序的選項不提供快捷版(我已更新的問題,澄清我使用快遞)。 – PhilDin 2013-03-06 12:29:43

回答

1

指示歸因方法由非託管動態鏈接庫(DLL

DllImportAttribute該屬性提供調用從非託管DLL導出的函數所需的信息露出。作爲最低要求,您必須提供包含入口點的DLL的名稱。

更多參考這裏 Link to Review

+0

謝謝,但問題不涉及如何調用非託管代碼,這已由供應商提供的程序集處理。問題是,供應商提供的程序集期望找到非託管DLL,我看不到將其與應用程序綁定的方式。 – PhilDin 2013-03-06 12:34:09

+0

http:// stackoverflow。com/questions/2452114/how-do-package-managed -c-sharp-dlls -with-a-managed-c-sharp-application-without-l – Smaug 2013-03-06 12:50:12

+0

你有沒有嘗試過上面的線程?如果沒有,請檢查答案部分,我想這可能會對您有所幫助 – Smaug 2013-03-06 12:50:55

0

您可以在項目中添加(全部)所有的dll作爲參考,並將它們標記爲「複製本地」。這應該這樣做,除非第一個DLL期望第二個DLL在特定的地方。

+0

謝謝,但我嘗試添加第二個DLL作爲參考時出現錯誤,所以我不認爲這是一個選項。 – PhilDin 2013-03-06 12:27:45

1

去你可以在運行時添加的dll作爲一種資源,它寫出來的byte[]上加載一個文件,做一個Assembly.Load()進行部署。

您可能必須使用AppDomain.AssemblyResolve Event以確保程序集在多個版本的情況下解決。

+0

謝謝,我認爲這是正確的方向。 Ramesh Muthiah下面鏈接到另一個線程,它談到了這樣做,而不必創建一個臨時文件(如果我已經正確理解)。 – PhilDin 2013-03-06 12:57:36

+0

@PhilDin我曾在幾個應用程序中使用過這個邏輯,我遇到過同樣的問題,從來沒有遇到任何問題。從ManifestResourceStream加載是一個更清潔的解決方案,但...將不得不嘗試一下 – jordanhill123 2013-03-06 13:02:20

相關問題