2013-07-31 116 views
0

我使用來自3.6版本的LO SDK庫製作了一個在LibreOffice Calc中生成報告的應用程序。這些DLL是.NET 2.0,afaik,而我的應用程序是.NET 3.5,所以它一起工作得很好。試圖從其文件夾中加載dll的應用程序

但是,當我在安裝了LO 4.0的PC上運行應用程序時,它看起來像試圖從應用程序文件夾(其中正確的dll被複制)加載dll,但從主機PC中的某處,因爲它會拋出異常「此程序集由比當前加載的運行時更新的運行時構建,無法在加載cli_uno.dll時加載(當我嘗試運行報告時)。看起來LO 4 SDK dll是爲.NET 4.0組裝的?

那麼,它不是一個重新編譯.NET 4.0應用程序的選項(因爲它會在有新的.NET 5.0 dll時重複)。

有沒有什麼辦法讓自己的文件夾中的應用程序加載DLL?

UDPATE cli_uno.dll實際上並未包含在我的應用程序中。它位於LO安裝文件夾中,顯然是由我的應用程序中包含的'cli _ *。dll'文件調用的。但我無法控制將安裝何種版本的LO!它只是由任何組裝版本設置失去控制。當應用程序與LO 3.6一起正常工作時,它不正確,但在升級到LO 4.0後停止工作。說真的,我在古代Delphi 7中使用古老的庫連接到MS Excel(這是在XP/2000版本實際上創建的)時創建的應用程序,並且至少在2007版本中運行良好。

是不是應該使用接口,對於不同版本的應用程序,甚至不同的平臺,是否能夠互操作,在它們之間交換數據?可能是我使用LO SDK完全錯誤?

+0

可能重複? http://stackoverflow.com/questions/267693/how-can-i-force-net-to-use-a-local-copy-of-an-assembly-thats-in-the-gac –

+0

看起來像,我我會研究它,謝謝。 – yaapelsinko

+0

正如我現在所看到的,它不是在控制應用程序組合版本設置 - 'cli_uno.dll'不是我的應用程序的一部分,但LO安裝,並且它由我的應用程序調用。我已經更新了這個問題。 – yaapelsinko

回答

0

您的當地議會是否已簽署?如果您可以刪除文件夾中包含的dll上的簽名,則始終從該文件夾加載該文件。只要它簽署了,它就會首先查看GAC。

+0

其實,我的應用程序程序集組件都沒有簽名。但LO SDK的dll必須簽名。懷疑我可以從中刪除標誌。 – yaapelsinko

+0

顯然你不能。但可能你可以在你的應用程序啓動過程中使用Assembly.Load(),從而將你需要的dll加載到內存中,而不是等待框架去掃描dll。雖然不太確定。 – Prash

+0

正如我現在看到的,它不控制應用程序組合版本設置 - 'cli_uno.dll'不是我的應用程序的一部分,而是LO安裝,它由我的應用程序調用。我已經更新了這個問題。 – yaapelsinko

相關問題