簡體   English   中英

MSBuild在指定絕對路徑時復制依賴關系,並在相對時忽略

[英]MSBuild copies dependencies when absolute path is specified and ignores when relative

我嘗試構建引用解決方案中某些項目的.csproj 這些引用標有CopyLocal=False 這是理想的行為。

我使用MSBuild為CI構建它,所以我通過/p:OutputPath="some output dir"設置輸出文件夾/p:OutputPath="some output dir" 我還設置/p:SolutionDir="path to the solution"以正確解析一些NuGet引用。

問題是:當我指定OutputPath與輸出目錄的絕對路徑(如d:\\solution\\build\\buildgroupsubfolder )時,MSBuild d:\\solution\\build\\buildgroupsubfolder每個依賴項復制到輸出目錄中,我不知道為什么會這樣做。 如果我指定具有相對路徑的輸出路徑(如..\\..\\..\\..\\..\\build\\buildgroupsubfolder ),則MSBuild正確處理CopyLocal=false ,並且不會將引用復制到輸出目錄。

我們在解決方案中有一些嵌套,項目分為幾組,因此我們希望將它們構建到子文件夾中。 我希望能夠指定相對於基本構建路徑的構建路徑,而不是項目本身的路徑。

為什么MSBuild在指定絕對路徑時忽略CopyLocal = false並在指定相對路徑時正確處理它?

好吧,我進一步挖掘了。 我發現MSBuild行為不端,但我不知道它在哪里。

我認為MSBuild的行為不正常,正如我在問題中描述的那樣。 如果我將OutputDir設置為相對路徑,它確實會處理CopyLocal=false 如果我將OutputDir設置為絕對路徑,它會出錯。 我在MSDN中找到了答案:

OutputPath - 指定輸出目錄相對於項目目錄的路徑,例如“bin \\ Debug”。

所以事實上,當我將OutputPath設置為絕對路徑時,MSBuild應該警告我甚至失敗,但事實並非如此。 這就是為什么我的印象是絕對路徑沒問題,並且CopyLocal處理存在錯誤。 實際的錯誤是MSBuild在失敗時工作。

我將項目和MSBuild從Visual Studio 2005切換到Visual Studio 2010后,我遇到了同樣的問題。但是,我想避免使用相對路徑,所以我轉而使用.NET中的新Web發布管道(WPP)。 4.0將以下內容添加到我的MSBuild命令行:

/p:UseWPP_CopyWebApplication=True /p:PipelineDependsOnBuild=False

現在輸出恢復正常,仍然可以在輸出目錄中使用絕對路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM