2012-03-06 60 views
2

好的这个问题更多的是了解问题是什么,因为我不认为任何人都能告诉我如何解决这个问题。尝试在C中加载程序集的错误#

我正在写一个.net 4应用程序,并且我有一个我想参考的第三方DLL(搭扣加密狗保护)。

Visual Studio允许我创建引用罚款并使用包含在我的代码中的dll内的类。

第一个问题发生在程序运行和dll实际加载时。然后我得到以下错误。

System.BadImageFormatException:无法加载文件或程序集 hasp_net_windows.dll或其依赖项之一。不是有效的 Win32应用程序

weblink指出如何解决此错误。有人发现问题是什么,为什么即时得到它。

按照这个建议之后,我将主项目构建设置为x86,然后我得到另一个错误替换另一个错误。新的错误是:

System.IO.FileLoadException:混合模式组件建立对 版本运行的“V1.1.4322,且不能在4.0 运行时无需额外配置信息被加载

weblink指出如何解决这个错误,但我没有在我的项目中的app.config,并希望尽可能避免有一个。如果有人能够解释什么问题再次有帮助?

如果您需要更多信息,请让我知道。

+0

为什么厌恶app.config? – 2012-03-06 09:39:50

+0

菜单构建,构建配置(不知道,我没有在这里VS),那么对于解决方案中的每个项目,您必须定位x86模式。由于该dll的限制,您将无法创建64位应用程序。 – vulkanino 2012-03-06 09:40:27

回答

8

这个问题是你的应用程序的“缺点”。一旦选择(32位或64位)全部该进程内的DLL 需要才能相同。这个异常告诉我,你的一个DLL是错误的“bitness”。

你根本不能在给定的进程中拥有不同的编译目标的DLL,一个进程具有“比特”亲和力。

如果这是第三方非托管DLL,那么它很可能是32位编译的。

将根目录项目(创建exe的目录)的生成输出设置为x86应该就足够了,因为这将决定创建的进程。任何其他.NET项目都可以简单地变成任何CPU,并且适用于32位或64位运行时。

不幸的是,对于您的第二个问题,提供的链接是解决问题的方法。在项目中使用app.config并没有什么错,而且你也没有说明你为什么不需要它。

+0

我设法得到.net 4版本的dll。 – user589195 2012-03-12 14:42:04

+0

哪里可以得到.net 4版本的hasp dll? – brianestey 2012-06-28 08:52:57

3

Adam Houldsworth的回答尽管如此,我还是想补充一点,可能没有app.config。但是,这需要更多的工作,并且可能对COM互操作有正确的理解。当然是否值得这个麻烦取决于你;)。

您可以使用ICLRRuntimeInfo::BindAsLegacyV2Runtime方法以编程方式设置。

快速简要介绍如何做到这一点is posted in this blogpost。注意到他警告,虽然,这可能会让你觉得两次在使用这种方法:

这种方法的工作原理,但我会很犹豫,使用它在公共 面临的生产代码,尤其是比其他任何 初始化您自己的应用程序。虽然这应该在 库中工作,但使用它会产生非常令人讨厌的副作用:您以非常明显的方式更改正在执行的应用程序的运行时策略,并且该方法非常隐蔽。

+0

+1从来不知道。 – 2012-03-06 09:51:23

0

我无法使用app.config文件,因为程序集是通过COM加载的。 我发现支持.net framework 4.0的库。 here。在这种情况下,没有其他解决方案为我工作。

+0

请注意,[只有链接的答案](http://meta.stackoverflow.com/tags/link-only-answers/info)不鼓励,所以答案应该是搜索解决方案的终点(vs.而另一个引用的中途停留时间往往会随着时间推移而过时)。请考虑在此添加独立的摘要,并将链接保留为参考。 – kleopatra 2013-12-19 15:50:44

相关问题