什么是混合模式组件?

Ang*_*ker 39 sqlite assemblies .net-4.0 system.data.sqlite

我正在查看System.Data.SQLite下载页面,它列出了.NET 4的混合模式程序集和常规(我假设).我将要使用这个库的项目是.NET 4,它将被编译为x86.

我有两个问题:

  1. 什么是混合模式组件?谷歌回复了一系列令人困惑的答案,但这些答案都没有多大意义.一个答案表明,所有这些都是关于混合原生代码和托管代码,而其他人则认为它混合了.Net版本.
  2. 我应该从哪个下载中找到我的情况?

Ste*_*eav 33

http://msdn.microsoft.com/en-us/library/x0w2664k.aspx

1)首先检查msdn.混合模式意味着程序集可以运行托管代码和非托管代码.

2)32位Windows(.NET Framework 4.0)的设置

http://system.data.sqlite.org/sqlite-netFx40-setup-bundle-x86-2010-1.0.74.0.exe

你自己回答了这个问题"我将使用这个库的项目都是.NET 4,它将被编译为x86."

  • 啊,现在我明白你的意思了....不同的是,混合模式程序集是1 .dll文件,包含功能和.NET包装器.如果你不使用混合模式程序集,你将有一个SQLite.dll和第二个DLL(SQlite.Interop.dll,或者他们称之为)包装器,所以你没有1 dll内的混合代码 (23认同)
  • 因为只有混合模式组件.这是因为sqlite'功能'是用C(COM)编写的,你可以通过.NET包装器访问它.所以程序集包含C和C#代码 - >混合模式汇编. (3认同)
  • 那么有效的混合模式程序集总是用c ++编写的? (2认同)
  • 你说我应该使用混合模式组件.我还不清楚为什么. (2认同)

Rob*_*Rob 6

有一种方法可以从纯IL生成混合模式组件.使用反射创建程序集的最后一部分涉及对AssemblyBuilder.Save的调用.如果只是为PortableExecutableKind参数传递PortableExecutableKinds.Required32Bit,那么您将创建一个混合模式程序集.您还可以通过传递PortableExecutableKinds.ILOnly来避免此问题.即


    assembly_bldr.Save(exe_name, PortableExecutableKinds.Required32Bit | PortableExecutableKinds.ILOnly, ImageFileMachine.I386 );
Run Code Online (Sandbox Code Playgroud)

毋庸置疑,这些信息很难获得......


bou*_*err 5

摘自官方常见问题解答

(14)什么是混合模式组件?

混合模式程序集是一个动态链接库,它包含特定处理器体系结构的托管代码和本机代码.由于它包含本机代码,因此只能将其加载到与其编译的处理器体系结构相匹配的进程中.另请参阅此StackOverflow问题.

它甚至引用了这个问题!