2012-10-13 70 views
2

簡而言之,我有一個單獨的WCF VisualStudio項目,來編譯CLient和Contract dll。一旦我使用MS-BUILD(命令行)構建項目,我有一個後期構建的nant任務,將客戶端和合同dll複製到另一個位置。在VisualStudio項目中是obj/debug嗎,一個臨時位置?

現在我更容易從obj/Debug文件夾中選擇這些dll(因爲它們只有CLient和Contract DLL而不依賴它們)。

但是我聽說obj/Debug文件夾是臨時的..我們需要依靠bin/Debug來獲取dll。

是否有必要從bin/debug中取出而不是obj/Debug,爲什麼?

回答

3

obj的作用\調試是的MSBuild的無證實現細節。它存在是因爲MSBuild喜歡根據項目設置有條件地複製文件。確切的規則是錯綜複雜的,爲了說清楚,你只能通過研究框架目錄中的.targets文件來獲得洞察力。它本身高度依賴於你的目標.NET版本。

如果你真的想知道是什麼讓它打勾然後從obj \ Debug複製文件,看看有什麼命中粉絲。請注意,這可能會在創建項目後很久纔會發生,因此當構建失敗或產生錯誤的文件時,將永遠存在FUD。如果這聽起來不太有效率,那就不是,然後避免打破保修並從項目的輸出目錄複製。 bin \ Debug和bin \ Release默認。如果產生問題,那麼至少你可以在SO上提出一個問題。

+0

感謝Hans的詳細撰寫。 –

2

是的。你應該從bin/Debug,或在更具體的MSBuild上下文中的變量OutputPath拿起二進制文件,

http://msdn.microsoft.com/en-us/library/bb629394.aspx

+0

但爲什麼不是obj/Debug? –

+0

如果微軟決定明天不使用'obj/Debug'會怎麼樣?根據文檔,只有'OutputPath'是您與Microsoft之間的可靠合同。 –

+0

在這種情況下,我甚至不應該使用bin/Debug,對吧? –

相關問題