2010-03-27 65 views

回答

0

將您希望使用的文件夾添加到您的PATH環境變量中。這會讓你從命令行鍵入my-program.exe,它會運行。

如果您嘗試在程序內部加載內部內容,您可以更改工作目錄SetCurrentDirectory或僅使用每個文件訪問的完整路徑。

+0

我不知道這會爲ASP.NET應用程序的工作(即有一個'bin'文件夾中的一種,而不是'BIN \ Debug' )。 –

+0

我會提出我的問題。 即時通訊構建Web應用程序。 我希望服務器上的DLL將從不同的目錄,然後bin文件夾加載。 – adveb

+0

好吧,隨着更多的信息,這聽起來像天空有正確的想法。在將來,給你更多的背景問題,這將有助於你獲得更好的答案。 – unholysampler

6

說明:

我以前的答案是不正確的。 Sam Holder的推測聽起來似乎很有道理,所以我寫了一些測試來證實。

請考慮確認。

要測試,請添加對項目或dll的引用,並將「複製本地」設置爲false。確保你'顯示所有文件'並刪除bin目錄,否則你將在那裏有一個徘徊的dll。

的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; 

     } 
..... 

的OP也許應該給我一個給予好評,但薩姆應該得到的檢查。

+0

+ +1努力:) –

4

我不知道,如果你能在asp.net做到這一點,但在.NET應用程序,你可以在當前的AppDomain

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

提供了代表對AssemblyResolve事件當應用程序有任何裝配它無法解決它的引用將調用此委託來解決程序集。然後,您可以簡單地返回從代表要求大會:

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

+1這是一種可能性,我沒有想到。我會嘗試。 –

+0

確認。接得好。我今天得到了我的學習,現在可以停止。 ;-) –

+0

天空,感謝您花費時間和精力來確認這一點。這是使得SO與其他網站不同的那種事情。 –

相關問題