2011-09-01 20 views
38

Estoy viendo la descarga de System.Data.SQLite page, y enumera el ensamblaje de modo mixto para .NET 4 y un regular (supongo). Mi proyecto que va a usar esta biblioteca es .NET 4 que se compilará en x86.¿Qué es un ensamblaje de modo mixto?

tengo 2 preguntas:

  1. ¿Qué es un ensamblaje de modo mixto? Google devuelve una matriz confusa de respuestas, ninguna de las cuales tiene mucho sentido. Una respuesta dice que se trata de mezclar código nativo y administrado, mientras que otros afirman que se trata de mezclar versiones .Net.
  2. ¿Qué descarga debo descargar para mi problema?

Respuesta

32

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

1) Allways comprobar MSDN primero. El modo mixto significa que el ensamblado puede ejecutar código administrado y no administrado.

2) Los ajustes para Windows de 32 bits (.NET Framework 4,0)

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

Es un poco respondido a esa pregunta a sí mismo: "Mi proyecto que se va a utilizar esta biblioteca es todo .NET 4, que se compilarse a x86 ".

+2

¿Así que los conjuntos de modo mixto están siempre escritos en C++? – AngryHacker

+2

Y está diciendo que debería usar el ensamblaje de modo mixto. Aún no tengo claro por qué. – AngryHacker

+3

Porque solo hay ensambles de modo mixto. Esto se debe a que la 'funcionalidad' sqlite está escrita en C (COM) y usted accede a ella a través de un contenedor para .NET. Por lo tanto, el conjunto contiene C y C# Code -> ensamblado de modo mixto. – Steav

6

Hay una manera de producir un ensamblaje de modo mixto a partir de IL puro. La parte final de crear un ensamblaje usando reflexión implica una llamada al AssemblyBuilder.Save. Si acaba de pasar PortableExecutableKinds.Required32Bit para el argumento portableExecutableKind, entonces creará un ensamblaje de modo mixto. Puede evitar los problemas que esto causa al pasar también PortableExecutableKinds.ILOnly. es decir,


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

hace falta decir que esta información fue ganado duro ...

5

Tomado del oficial FAQ

(14) ¿Qué es un ensamblaje de modo mixto?

Un ensamblaje de modo mixto es una biblioteca de vínculos dinámicos que contiene el código administrado y el código nativo para una arquitectura de procesador en particular. Como contiene código nativo, solo se puede cargar en un proceso que coincida con la arquitectura del procesador para el que se compiló. También vea esta pregunta de StackOverflow.

¡Incluso hace referencia a esta pregunta!

Cuestiones relacionadas