Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试在C中加载程序集时出错#_C#_.net_Dll - Fatal编程技术网

C# 尝试在C中加载程序集时出错#

C# 尝试在C中加载程序集时出错#,c#,.net,dll,C#,.net,Dll,好的,这个问题更多的是关于理解问题是什么,因为我认为没有人能够告诉我如何解决问题 我正在编写一个.NET4应用程序,我有一个第三方dll(hasp加密狗保护),我想引用它 VisualStudio允许我在代码中创建引用并使用dll中包含的类 第一个问题发生在程序运行且dll实际加载时。然后我得到以下错误 System.BadImageFormatException:无法加载文件或程序集 “hasp_net_windows.dll”或其依赖项之一。是无效的 Win32应用程序 这说明了如何修复此错

好的,这个问题更多的是关于理解问题是什么,因为我认为没有人能够告诉我如何解决问题

我正在编写一个.NET4应用程序,我有一个第三方dll(hasp加密狗保护),我想引用它

VisualStudio允许我在代码中创建引用并使用dll中包含的类

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

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

这说明了如何修复此错误。有人能解释一下问题是什么,为什么我会得到它吗

在遵循这个建议之后,我将主项目构建设置为x86,然后出现另一个错误替换另一个。新的错误是:

System.IO.FileLoadException:混合模式程序集是根据 运行时版本“v1.1.4322”,无法在4.0中加载 无附加配置信息的运行时

这说明了如何修复错误,但我的项目中没有app.config,如果可能的话,我希望避免使用app.config。如果有人能再次解释这个问题,那会有帮助吗

如果您需要更多信息,请告诉我

问题在于应用程序的“比特度”。一旦选择(32位或64位)该进程中的所有DLL都需要相同。这个异常告诉我您的DLL之一是错误的“位”

在给定的进程中,不能有具有不同编译目标的DLL,因为一个进程具有“比特”关联性

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

将根项目(创建exe的项目)的生成输出设置为x86应该足够了,因为这将指示创建的进程。然后,任何其他.NET项目都可以是任何CPU,并且可以适合32位或64位运行时


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

尽管Adam Houldsworth给出了答案,但我想补充一点,在没有app.config的情况下也可以使用app.config。然而,这需要更多的工作和对COM互操作的正确理解。当然,麻烦值不值得由你决定

您可以使用以下方法以编程方式设置
useLegacyV2RuntimeActivationPolicy

关于如何做到这一点的简要说明。但请注意他的警告,这可能会让你在使用这种方法时三思而后行:

这种方法是有效的,但如果在公共场合使用它,我会非常犹豫 面向生产代码,尤其是针对除 初始化您自己的应用程序。而这应该在一个 库,使用它有一个非常糟糕的副作用:更改运行时 以一种非常隐蔽和安全的方式执行应用程序的策略 不明显


我无法使用app.config文件,因为程序集是通过COM从本机程序加载的。
我找到了支持.net framework 4.0的库。在这种情况下,没有其他解决方案适合我。

为什么不喜欢app.config?菜单构建、构建配置(不确定,我这里没有VS),那么对于解决方案中的每个项目,您必须以x86模式为目标。由于该dll的限制,您将无法创建64位应用程序。在哪里可以获得.net 4版本的hasp dll?请注意,这是不鼓励的,因此答案应该是搜索解决方案的终点(而不是另一个参考的中途停留,它往往会随着时间的推移而过时)。请考虑在这里添加一个独立的概要,将链接作为参考。