2011-11-21 19 views
6

He examinado un par de problemas de nunit y visual studio indicados en stackoverflow, pero no encuentro ningún hilo donde se ajuste mi caso.Proyecto de prueba de NUnit C# que hace referencia a otra DLL

Estoy usando NUnit para probar algún código que escribí, estoy cargando el archivo * .csproj de mi proyecto de prueba en la herramienta NUnit GUI.

Descubrí el problema, supongo, pero hasta ahora no he encontrado ninguna solución. Lo que estoy haciendo:

Me refiero a otros 2 proyectos ambos son proyectos dll. Esto significa que tengo 3 proyectos: TestProject (DLL), SettingsManager (DLL), DatabaseInterface (DLL). Todos están en una sola solución. El proyecto DatabaseInterface contiene llamadas nativas a otra, C++ x86, DLL, pero no hace referencia explícita a esta DLL mediante la instrucción "using".

Uno de los dos es un SettingsManager, que almacena algunos datos de configuración, como las rutas &, etc., pero de todos modos. Tanto Testproject como DatabaseInterface hacen referencia al SettingsManager.

Los 3 proyectos están compilados en "Depurar" y en "AnyCPU". Hacer referencia a & utilizando solo el Administrador de configuración en mi TestProject funciona bien, pero cuando agrego DatabaseInterface, recibí una BadImageFormatException que me indica que está intentando cargar un archivo con un formato incorrecto.

para que sea más visible, eso es trabajo:

using myNamespace.Settings; // contains SettingsManager 
using System; 
using NUnit.Framework; 

namespace myNamespace.myTestProject 
{ 
    [TestFixture] 
    public class TestProject 
    { 
     [SetUp] 
     public void SetUp() 
     { 

     } 

     [Test] 
     public void ReadDbFile() 
     { 
      string s = SettingsManager.DbFile; // gets the path of the db file 
     } 
    } 
} 

NUnit Salida:

esto no funciona:

using myNamespace.Settings; // contains SettingsManager 
using myNamespace.DbInterface; // contains DatabaseInterface, which contains native calls to C++ dll 
using System; 
using NUnit.Framework; 

namespace myNamespace.myTestProject 
{ 
    [TestFixture] 
    public class TestProject 
    { 
     DatabaseInterface instance = null; 
     [SetUp] 
     public void SetUp() 
     { 

     } 

     [Test] 
     public void ReadDbFile() 
     { 
      string s = SettingsManager.DbFile; // gets the path of the db file 
     } 
    } 
} 

El segundo intento, que contiene el

using myNamespace.DbInterface; 

arroja un myNamespace.myTestProject.TestProject (TestFixtureSetUp): SetUp: System.BadImageFormatException: Die Datei oder Assembly "DatabaseInterface, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null" o no se encontró una referencia. Se ha intentado cargar un archivo de un formato incorrecto ".

incluso si los 3 proyectos son construir utilizando depuración y Cualquier CPU.

Estoy usando un archivo estándar * .config, como el de la NUnit TestProject. Tal vez algunos es malo en esto.

¿alguien se encontró con el mismo error al intentar cargar código de otro DLL hasta el momento? ¿Puede ser un problema que ambos proyectos (Prueba & base de datos) hacen referencia a la ¿DLL de SettingsManager? Did I hacer algo importante mal?

Comprobé dos veces la configuración de mi compilación en los 3 proyectos, pero no pude encontrar ninguna configuración que pueda ser incorrecta y explica BadImageFormatException.

Respuesta

5

Es probable que esté utilizando el corrector de interfaz gráfica de usuario nunit.exe que está destinado a Cualquier CPU. Se compilará JIT en la plataforma de destino, que supongo que es x64 porque tienes este problema. En su lugar, intente utilizar nunit-x86.exe para ejecutar sus pruebas. Esta versión del corredor de GUI está diseñada específicamente para ejecutarse en un proceso de 32 bits que será compatible con su dependencia de biblioteca DatabaseInterface.

+0

probablemente ese fue el problema, supongo. Debido a que estoy usando un Win7 de 64 bits todo lo que significa "AnyCPU" será de 64 bits más adelante. Ese fue el error con la DLL DatabaseInterface compilada de 32 bits. – inva

1

Puede ser un problema de dependencia de sus dependencias. Puede suceder si su dependencia depende de la biblioteca COM no administrada que es x86 y se está ejecutando en x64.Todo funcionará bien, hasta que intente usar esa dependencia en su código: lanzará BadImageFormatException.

Para solucionar esto, debe agregar un objetivo específico (x86 o x64) a su proyecto, e intente con eso.

+0

no, ese es el motivo por el que maldigo a NUnit hasta el momento: no puedo establecer una plataforma de destino de compilación específica mlike x86 o x64. Si lo hago, obtendré BadImageFormatException también para la DLL de SettingsManager. Creo que uno tiene que establecer * AnyCPU * como objetivo de compilación ... y no funciona si configuro explícitamente x86 o x64, pero no sé por qué hasta ahora. – inva

Cuestiones relacionadas