2013-07-31 112 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

相关问题