2010-08-20 19 views
3

Je travaille sur Windows 7 avec Visual Studio 2008.Le test unitaire VisualStudio ne trouve pas ma DLL avec P/Invoke. Comment puis-je réparer cela?

J'ai un assembly .NET qui effectue des appels dans une DLL native avec P/Invoke. J'ai mis en place un projet de test d'unité .NET distinct dans ma solution Visual Studio qui teste l'assemblage en y effectuant divers appels. Toutefois, lorsque le test d'unité effectue un appel dans l'assembly et que l'assembly effectue un appel à l'aide de P/Invoke, il ne peut pas trouver la DLL native. Lorsque j'écris une application de console .NET autonome, il n'y a aucun problème. L'assembly peut utiliser P/Invoke et trouver la DLL avec succès.

Je peux faire fonctionner le test d'unité en appelant LoadLibrary avec le chemin absolu de la DLL avant d'utiliser l'assembly. Cependant, cette approche est laide et nécessite un chemin absolu - ce qui sera problématique pour les autres utilisateurs. En bref, ma question est - comment puis-je spécifier ou modifier le chemin de recherche DLL qui est utilisé lors de l'exécution d'un test unitaire Visual Studio?

Toute aide sera grandement appréciée.

Cordialement, Dan

Répondre

3

Il semble que le problème est que votre DLL native n'est pas déployé avec vos DLL de tests unitaires. Ce n'est pas un problème rare car les DLL managées n'ont aucune référence aux métadonnées natives dans les métadonnées et par conséquent les packages de déploiement ne savent pas les déployer.

La solution la plus appropriée consiste à réparer le déploiement plutôt que de modifier les chemins de recherche DLL. C'est un problème spécifique au test unitaire. Pouvez-vous nous dire quel cadre vous utilisez pour que nous puissions vous aider?

3

Si vous utilisez le Visual Studio 2008 framework de test intégré, vous devriez vérifier la DeploymentItemAttribute Class

Fondamentalement, vous décorer votre méthode de test avec cet attribut et il copie automatiquement l'élément de déploiement dans le répertoire de sortie avant le test exécute. Vous pouvez même copier tout un arbre de dépendances en utilisant ceci. Il prend en charge l'expansion variable et les chemins relatifs.

Voir aussi How to: Configure Test Deployment pour plus d'informations sur le déploiement de test VS2008.