2010-11-26 31 views
0


Je développe une DLL en C# qui utilise des composants COM C++ DLL externes dans l'interface graphique et aussi pour le côté code. Au total j'utilise 3 autres composants et pour chacun je fais référence à un fichier "Interop.ComponentName.dll" inclus dans la sortie.C# DLL supprimer les fichiers Interop et AxInterop

J'ai essayé de changer le paramètre "Copy Local" dans la fenêtre "Properties" à false mais j'obtiens des erreurs à l'exécution que la DLL principale ne trouve pas les fichiers.

Je comprends que ceux-ci sont nécessaires pour que le programme fonctionne, mais est-il possible d'utiliser ces fichiers dans un sous-répertoire comme la DLL principale dans "" ../extras/Test.dll "et je voudrais l'Interop les fichiers "../extras/TestResources/"

extra info:. J'utilise C# avec Visual studio 2008 dans Windows XP SP3

Merci, K.

Répondre

0

Quelles sont les DLL interop vous Si elles ne sont pas standard (c'est-à-dire qu'elles ne sont pas incluses dans votre distribution de framework .NET ciblée), Visual Studio peut les inclure dans la sortie de votre projet, car elles ne le sont pas. enregistré dans votre Global Assembly Cache.

Considérez comment votre application C# distribuée référencerait les DLL externes. S'ils font partie de la distribution .NET, ils sont correctement enregistrés dans le GAC de l'utilisateur. Sinon, votre projet de configuration/déploiement les enregistrera. Si c'est le dernier, alors si vous allez dans les propriétés de votre projet d'origine, sous Build, vous devriez voir le champ du chemin de sortie. L'utilitaire de génération interne de Visual Studio vous permet uniquement de sortir les fichiers de construction de votre projet dans un seul répertoire.

Cependant, il existe un moyen de réaliser ce que vous demandez. C'est un peu plus compliqué que de permettre à Visual Studio de gérer votre déploiement. Jetez un coup d'oeil dans MSBuild.exe et construisez des scripts.

+0

Ils ne sont pas standard, un couple j'ai fait et un couple (pour l'interface graphique) sont construits par d'autres et je n'ai pas accès à la reconstruction. Fondamentalement, les fichiers DLL que j'utilise sont dans le même répertoire ou le répertoire parent. Je vais continuer à regarder dedans merci. –

0

Pour permettre au CLR de rechercher des assemblys qui ne se trouvent pas dans votre dossier bin ou dans les autres emplacements qu'il recherche automatiquement, vous pouvez utiliser l'élément codeBase < dans votre fichier app.config.

Voir http://msdn.microsoft.com/en-us/library/efs781xb(vs.71).aspx pour plus de détails sur la façon de procéder.

2 lignes pour vous à la note de l'article lié:

  • Si l'ensemble est un ensemble privé, le réglage de base de code doit être un chemin relatif au répertoire de l'application.

  • Pour les assemblages sans un nom fort, la version est ignorée et le chargeur utilise la première apparition de < codebase> à l'intérieur < dependentAssembly>