2009-06-09 8 views
3

Nous utilisons une DLL COM fournie par Microsoft (dsofile.dll) dans une DLL C# écrite par nous (Assembly A). Afin d'éviter d'avoir à enregistrer la DLL COM, j'ai basculé la propriété Isolated sur la référence à dsofile.dll à true. Cela signifie que lorsque nous compilons notre DLL, Visual Studio copie les fichiers dsofile.dll, Interop.DSOfile.dll et Native manifest dans les dossiers bin de notre solution et l'application peut s'exécuter sans que le fichier dsofile.dll ne soit enregistré.COM Interop, isolation et exclusion des références dupliquées

Cette approche a été couronnée de succès dans une petite application de test.

Cependant, dans l'application réelle, Assembly A est référencé par certaines de nos autres dll (Assembly B et Assembly C) et l'application EXE. Lorsque le fichier manifeste natif et interop dll sont copiés dans le dossier bin de l'application, différentes copies de chacun des fichiers sont utilisées puisque chaque DLL faisant référence à notre première DLL crée sa propre copie. Il en résulte plusieurs copies des fichiers apparaissant en tant que références dans le projet d'installation (par exemple, dsofile.dll des dossiers Assembly A, B et C et EXE, Interop.DSOFile.dll de l'assembly A, B et C et dossiers EXE, Native.Assembly A.manifest à partir des dossiers Assembly A, B et C et EXE) et les avertissements du compilateur ('Deux objets ou plus ont le même emplacement cible'). En outre, si le manifeste et la DLL d'interopérabilité qui ont été copiés dans le dossier final ne provenaient pas directement du dossier Assemblage A (puisque les fichiers dupliqués se remplacent), l'application ne parvient pas à charger la DLL COM.

J'ai été forcé d'exclure manuellement les copies des fichiers des configurations, mais elles réapparaissent lorsque la solution est rechargée ou reconstruite.

Quelqu'un peut-il aider avec une meilleure méthode pour réaliser un déploiement isolé de la DLL COM? J'aimerais aussi intégrer les manifestes si possible, mais je n'ai pas réussi à le faire jusqu'à maintenant. Comme alternative, j'ai étudié l'automatisation de la tâche d'exclure les copies en utilisant EnvDTE pour Visual Studio Automation mais je n'ai pas pu découvrir comment accéder aux nœuds Dépendances détectées d'une manière qui me permet d'identifier et de les exclure. Les accéder à l'aide de l'interface UIHierarchyItem affiche le nom du projet d'installation en tant que propriété de nom pour chaque fichier et n'a pas d'option d'exclusion.

Tout conseil serait apprécié.

Répondre

2

J'ai résolu un problème similaire dans le passé en faisant référence aux projets plutôt qu'aux assemblages eux-mêmes. Le projet de déploiement a quelques problèmes avec plusieurs références aux assemblys qui sont en cours de construction dans la solution.