我知道你說你不想使用發佈後的事件,但你的理由爲什麼不吸引我。這聽起來像你可能很難編寫您的後構建事件中的.dll的名稱。這很容易避免。
xcopy "$(TargetDir)*" "c:\common\" /Y
的*
只會導致一切在你的bin /調試/文件夾被複制到您的共同文件夾。如果你願意,你也可以複製dll。或者,如果您使用$(TargetPath)
,則只需複製項目結果的1個dll,而不是任何其他相關的依賴項。
UPDATE
我們這樣做的方式是整個bin文件夾複製到子文件夾中每個項目。假設您有2個項目,WebUtil
和HtmlParser
,其中WebUtil依賴於HtmlParser。對於這兩個項目,請使用xcopy "$(TargetDir)*" "c:\common\$(ProjectName)" /Y
。這將創建c:\ common \ WebUtil \和c:\ common \ HtmlParser。在WebUtil中,添加對c:\ common \ HtmlParser \ HtmlParser.dll的引用。現在在c:\ common中會有2個HtmlParser.dll副本。
c:\ common \ HtmlParser \ HtmlParser.dll //最近的版本。 c:\ common \ WebUtil \ HtmlParser //什麼是 WebUtil建成時的最新版本
這有各種優點。如果您更改HtmlParser的API,WebUtil將繼續工作,因爲它將具有較早的HtmlParser.dll,直到您嘗試重新構建WebUtil(此時由於更改後的API而會出現構建錯誤)。現在
,如果第三個項目在這取決於WebUtil混了,你正在使用WebUtil的某一部分暴露在HTMLParser的類,那麼你需要參考上增添都您的項目新項目。當您添加對HtmlParser.dll的引用時,請使用c:\ common \ WebUtil中的引用。你這樣做是因爲你只是將它作爲WebUtil的一個必要條件來包含它。現在您將始終擁有與當前版本的WebUtil.dll相匹配的HtmlParser.dll版本。
我希望這是有道理的。這絕對是一個棘手的事情來管理。等到你必須開始使用svn拉下所有的依賴關係時:externals = P
我的項目主要是VB.NET項目,所以屬性頁看起來不像C#項目。 – 2010-07-21 09:00:15
反正找到了它=)但是,這是在項目級別上。如果兩個項目依賴於相同的第三方或第三方DLL,會發生什麼情況 - 它們是否會覆蓋,重命名或尖叫尋求幫助(即拋出異常)?我所追求的是 - 在解決方案層面上而不是在項目層面上有沒有辦法做到這一點? – 2010-07-21 09:04:30
@Thomas - 是的,在項目層面。異常不會被拋出,通常依賴的dll將被覆蓋。這不是一個問題,因爲編譯項目是連續的。 – Oded 2010-07-21 09:10:12