2012-01-09 86 views
1

當您構建.Net項目時,輸出將被複制到輸出文件夾(例如:bin文件夾)中;不僅複製了項目源代碼發佈的二進制文件,還複製了標記爲CopyLocal = True選項的所有依賴項(文件引用)。如何檢索.Net項目的輸出而不依賴關係

對於定製構建任務(即:在Team Build上編譯時),我想知道如何從沒有這些依賴關係的構建中發佈二進制列表(我可能不會 - 也不想要 - 設置CopyLocal = False)。

我的問題是,我沒有找到一個乾淨的方式來確定這個輸出。我最接近的解決方案是在項目文件上循環,讀取AssemblyName並檢查是否有預見的pdb,xml,resx文件。但是,我仍然缺少資源文件(?)和其他輸出,因爲我不知道所有可能的項目。

所以我的問題是:你知道任何方法/技巧/算法來獲得構建發佈的二進制列表;即組件,衛星組件(子文件夾的+路徑),pbd,xml(即:文檔),但沒有依賴關係?

+0

不需要回答這個問題是非常重要的。 – 2012-01-09 14:34:14

+0

將** CopyLocal **設置爲false是解決方案。你明白沒有本地目錄中的依賴項,那麼你的應用程序不可能正常運行? – 2012-01-09 19:47:01

+0

對不起,但我可能不會設置CopyLocal = False,否則我沒有bin文件夾中的可用依賴項,也無法在Team Build上運行單元測試。這些不在GAC中,但在Drop文件夾中。另外,我最好不要修改源代碼。我只管理生成服務器,不對源代碼負責。如果沒有其他乾淨的方法來確定確切的輸出,我可以解析項目文件並更新CopyLocal,但我不知道是否有MSTest的選項(如MSBuild的「referencepath」選項)傳遞ot Drop文件夾到MSTest – 2012-01-10 07:52:12

回答

0

我有一個(也許是非常愚蠢的)想法..

在構建期間(在Team Build上)使用在「obj」文件夾中生成的FileListAbsolute.txt如何?它精確地包含了構建的輸出(dll,resx,xml,...),沒有依賴關係。我可以使用構建環境變量(路徑等)輕鬆地檢索它,並循環它以獲取從「obj」文件夾放入「bin」文件夾的文件的名稱。

0

您可以將它添加到您的所有裝配的後生成事件:

copy "$(TargetDir)$(TargetName).???" "C:\TargetDir" 

您將獲得在C程序集:\ TARGETDIR

+0

是的,但我會遺漏一些附屬程序集(由resx發佈) xml文檔(如果這個是生成的)。 – 2012-01-10 11:56:20

+0

你的resx在dll裏面,並且爲你的xml文檔你可以添加「複製」$(TargetDir)$(TargetName).dll.XML「」C:\ TargetDir「」 – 2012-01-10 11:59:08

+0

不是所有的resx都在dll中!你忘了IMO衛星組件 – 2012-01-10 13:34:28

相關問題