通常情況下,一個bin文件夾的目的是爲您的部署包的主要成分。在非常簡單的應用程序部署中,程序需要的所有內容都存在於bin文件夾中。你可以複製粘貼該文件夾在任何地方,它會工作。當然,如果你的外部裝配不在那裏,那不會發生。
你發現那些程序集不應該存在於你的開發機器上的兩個地方,我明白你爲什麼不喜歡那個。 CopyLocal默認設置爲true的原因是因爲我上面描述的典型場景值得在開發機器中存在兩次程序集的成本。通常情況下,應用程序將比開發機器多出許多倍的客戶端機器,因此單個部署文件夾的簡單性值得開發機器上磁盤空間的成本。
你說你自己,你會包括:每當你想給你的exe文件給別人lib文件夾?僅僅給bin文件夾添加所有內容不是更簡單嗎?
在你原來的問題中,你提到編譯器找不到程序集,我認爲這是不正確的,我測試了類似的情況。編譯器找到了程序集,但是當我嘗試執行代碼時,運行時告訴我它找不到它。編譯器不會插入代碼以使可執行文件查找程序集的相對路徑。您可以找到.Net外部程序集here的詳細探測行爲。你的EXE不能奇蹟般地猜到程序集是在父文件夾的lib文件夾中。
您可以通過編寫自己的程序集分辨率來規避所有這些情況,但除非您要捱餓幾千字節的磁盤空間,否則讓Visual Studio可以做到這一點。
如果你不想註冊組件與GAC或惹的文件路徑,然後請你幫個忙,並讓他們在同一文件夾作爲您的可執行文件。 – hoodaticus
我寧願亂用文件路徑;)我想了解它是如何工作的 – fazega
然後,Derek給了你你應該接受的答案。您可以重寫程序集解析過程,並使用C#代碼自己在運行時查找並加載DLL。 – hoodaticus