2011-09-01 184 views
38

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

我有2个问题:

  1. 什么是混合模式的组装?谷歌回答了一系列令人困惑的答案,其中没有一个很有意义。一个答案指出,这是关于混合原生代码和托管代码,而另一些人声称它是用于混合.Net版本。
  2. 我应该为自己的情况下载哪些下载内容?

回答

32

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“。

+2

如此有效的混合模式程序集总是用C++编写的? – AngryHacker

+2

而你在说我应该使用混合模式装配。至于为什么,我还不清楚。 – AngryHacker

+3

因为只有混合模式组件。这是因为sqlite的'功能'是用C(COM)编写的,你可以通过.NET的包装来访问它。所以程序集包含C和C#代码 - >混合模式程序集。 – Steav

6

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


    assembly_bldr.Save(exe_name, PortableExecutableKinds.Required32Bit | PortableExecutableKinds.ILOnly, ImageFileMachine.I386); 

不用说,这个信息是来之不易......

5

从官方FAQ

(14)采取什么是混合模式组装?

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

它甚至引用这个问题!

相关问题