2010-03-27 7 views

Répondre

0

Ajouter le dossier que vous voulez utiliser à votre variable d'environnement PATH. Cela vous permettra de taper my-program.exe à partir de la ligne de commande et il sera exécuté.

Si vous essayez de charger quelque chose en interne dans le cadre de votre programme, vous pouvez changer le répertoire de travail SetCurrentDirectory ou simplement utiliser le chemin complet pour chaque accès au fichier.

+0

Je ne sais pas que cela fonctionnera pour une application ASP.NET (le type qui a un dossier '' bin' et non bin \ Debug'). –

+0

je vais aiguiser ma question. Im construire une application web. Je veux que la DLL sur le serveur va charger à partir du répertoire différent, puis le dossier bin. – adveb

+0

Ok, avec plus d'infos, on dirait que Sky a la bonne idée. À l'avenir, donnez plus d'informations sur votre question et cela vous aidera à obtenir de meilleures réponses. – unholysampler

6

note:

Ma précédente réponse était incorrecte. La supposition de Sam Holder semblait plausible alors j'ai écrit quelques tests pour confirmer.

Considérer comme confirmé.

Pour tester, ajoutez une référence à un projet ou dll et définissez 'Copy Local' sur false. Assurez-vous de 'montrer tous les fichiers' et supprimez le répertoire bin ou vous allez avoir un DLL persistante là-bas.

Global.asax

namespace WebApplication1 
{ 
    public class Global : System.Web.HttpApplication 
    { 

     protected void Application_Start(object sender, EventArgs e) 
     { 
      AppDomain currentDomain = AppDomain.CurrentDomain; 
      currentDomain.AssemblyResolve += new ResolveEventHandler(currentDomain_AssemblyResolve); 
     } 

     System.Reflection.Assembly currentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
     { 
      if (args.Name == "ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") 
      { 
       String assemblyPath = @"C:\Projects\StackOverflowAnswers\WebApplication1\ClassLibrary1\bin\Debug\ClassLibrary1.dll"; 
       Assembly assembly = Assembly.LoadFrom(assemblyPath); 
       return assembly; 
      } 
      return null; 

     } 
..... 

L'OP devrait peut-être me donner un upvote mais Sam doit obtenir le chèque.

+0

+1 pour l'effort :) –

4

Je ne sais pas si vous pouvez le faire en asp.net, mais dans les applications .NET vous pouvez fournir un délégué à l'événement AssemblyResolve dans le AppDomain actuel

AppDomain currentDomain = AppDomain.CurrentDomain; 
currentDomain.AssemblyResolve += assemblyResolver.ResolveEventHandler; 

lorsque l'application a tout ensemble les références qu'il ne peut pas résoudre appellera ce délégué pour obtenir la résolution de l'assembly. Vous pouvez ensuite retourner simplement l'ensemble demandé au délégué:

String assemblyPath = //some logic to determine the location of the assembly 
Assembly assembly = Assembly.LoadFrom (assemblyPath); 
return assembly; 
+0

+1 c'est une possibilité à laquelle je n'ai pas pensé. Je vais essayer. –

+0

Confirmé. Bonne prise. J'ai appris mon apprentissage aujourd'hui, maintenant je peux le faire. ;-) –

+0

Sky, merci d'avoir pris le temps et l'effort pour le confirmer. C'est le genre de chose qui rend SO différent des autres sites. –

Questions connexes