Bonjour,
Je suis face a un problème qui me bloque depuis plusieurs jours ce pourquoi je sollicite ce forum.
J'ai réussi a isoler un cas test simple qui reproduit systématiquement le problème.
- L'assembly en question est une assembly pour interfacer une bibliothèque d'objets C++ écrite majoritairement en C++/CLI.J'ai une librairie native C++ qui représente ma bibliothèque existante.
- J'ai un module .NET écrit en C++/CLI qui utilise des objets de la librairie C++.
- J'ai une assembly générée a partir du module.
L'assembly generee est valide puisque je peux l'utiliser dans une application .NET.
Par contre lorsque celle-ci est referencee dans un projet de test, impossible de faire executer un test.
J'ai systematiquement l'exception:
Test method TestProject1.UnitTest2.TestMethod1 threw exception: System.TypeInitializationException: Une exception a été levée par l'initialiseur de type pour '<Module>'. ---> <CrtImplementationDetails>.ModuleLoadException: The C++ module failed to load while attempting to initialize the default appdomain.
---> System.BadImageFormatException: Le module était censé contenir un manifeste de l'assembly. (Exception de HRESULT : 0x80131018).
// TestModule.h
#pragma once
#include "../ClassLibrary/ClassLibrary.h"
using namespace System;
namespace TestModule {
public ref class Class1
{
// TODO: Add your methods for this class here.
};
}
#pragma unmanaged
public class NativeClass
{
private:
static CClassLibrary staticDataMember;
};
#pragma managed
// TestModule.cpp
// This is the main DLL file.
#include "stdafx.h"
#include "TestModule.h"
#pragma unmanaged
CClassLibrary NativeClass::staticDataMember;
#pragma managed
J'ai genere mon assembly en utilisant al.exe et csc.exe avec le meme resultat
- Si je supprime la declaration du membre statique dans le module je n'ai plus l'exception et mon test se deroule bien. J'ai besoin dans mon module de definir des objets natifs pour faire de l'interoperabilite.
- Si je compile le module en assembly en conservant la declaration du membre statique, plus d'exception et le test est Ok. En situation, j'utilise deux langages donc je dois conserver mon decoupage; et un decoupage en module car je souhaite avoir au resultat qu'une seule assembly.
- Si j'execute mon test en ligne de commande avec mstest.exe et le switch /noisolation, plus d'exception et le test est Ok. Par contre cette solution n'est pas acceptable car je n'ai plus acces a l'analyse de code.
Je ne peux malheureusement pas mettre mon cas test en pièce jointe.
Test effectue sous Windows XP-pro SP3 32 bits avec Visual Studio 2008.
Une idée ?
Merci.