繁体   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