![](/img/trans.png)
[英]MSBuild: How to get the relative path to a file, given an absolute one?
[英]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.