我有可執行以下輸出結構,我的解決方案:需要澄清:.NET運行時如何從父文件夾解析程序集引用?
%ProgramFiles% | +-[MyAppName] | +-[Client] | | | +-(EXE & several DLL assemblies) | +-[Common] | | | +-[Schema Assemblies] | | | | | +-(several DLL assemblies) | | | +-(several DLL assemblies) | +-[Server] | +-(EXE & several DLL assemblies)
在溶液中引用不同的DLL組件,其中一些是從溶液中其他項目的產出,和其他每一個項目是純第三方組件。例如,[Client] EXE可能引用位於不同目錄分支中的[Common]中的程序集。
所有引用都將「Copy Local」設置爲false,以反映最終安裝的應用程序中文件的佈局。
現在,如果我查看Visual Studio IDE中的引用屬性,我會看到每個引用的「路徑」都是絕對的,並且它對應於程序集的實際輸出位置。這是可以理解和正確的。正如所料,解決方案編譯並運行得很好。
我不明白爲什麼即使關閉IDE,重命名[MyAppName]目錄並手動運行[Client] EXE,爲什麼一切似乎都能正常工作?如果參考路徑與鏈接時不相同,運行時如何找到程序集?
要清楚 - 這實際上正是我所追求的:無論[MyAppName]目錄位於何處,甚至是什麼名稱,都能正常運行的半分散應用程序集。我只想知道,如何以及爲什麼在沒有任何特定路徑解決方案的情況下工作。
我已閱讀this similar question的答案,但我仍然不明白。
非常感謝!
如何在app.config中定義DLL源代碼? – 2011-01-05 05:42:11