55 votes

C # - Définir un chemin personnalisé pour les DLL référencées?

J'ai un projet C# (appelons-la "MainProj") qui fait référence à plusieurs autres projets DLL. Par l'ajout de ces projets à MainProj de références, il va construire et copiez la DLL à MainProj répertoire de travail.

Ce que je voudrais faire est de les avoir ces référencé DLL être situé dans un sous-répertoire de MainProj répertoire de travail, c'est à dire MainProj/bin/Dll, plutôt que le répertoire de travail lui-même.

Je ne suis pas très expérimentée programmeur C#, mais venant du C++ monde, je suis en supposant une approche serait de supprimer les références du projet et explicitement charger la DLL requis par le chemin d'accès et nom de fichier (c'est à dire en C++, la fonction LoadLibrary). Ce que je préfère faire cependant, si il y a un moyen, serait de créer une sorte de "référence binaire chemin", alors qu'ils avaient tous être automatiquement copié dans ce sous répertoire quand je build (et puis être référencé à partir de là sans m'avoir besoin de charger explicitement chaque). Est une chose possible?

Si non, quelle est la méthode préférée en C# pour accomplir ce que je suis après (c'est à dire quelque chose avec de l'Assemblée.Charge / De L'Assemblée.LoadFile / Assemblée.LoadFrom? Quelque chose dans le domaine d'application peut-être? Ou D'Un Système.De l'environnement?)

Merci!

87voto

Aaron Points 1007

À partir de cette page (non testé par moi):

Quelque part dans votre programme d'initialisation (avant d'accéder à toutes les classes à partir d'un assemblage) faire ceci:

AppDomain.CurrentDomain.AppendPrivatePath(@"bin\DLLs");

Edit: Cet article dit AppendPrivatePath est considérée comme obsolète, mais donne aussi une solution de contournement.

Edit 2: Ressemble le plus simple et le plus casher façon de le faire est dans l'application.fichier de configuration (voir ici):

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="bin\DLLs" />
    </assemblyBinding>
  </runtime>
</configuration>

26voto

Pedro77 Points 935

Depuis Tomek, répondez à: Chargement des DLL à partir du chemin spécifié dans SetdllDirectory en c #

 var dllDirectory = @"C:/some/path";
Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("PATH") + ";" + dllDirectory)
 

Cela fonctionne parfaitement pour moi!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X