如何在不检查依赖项的情况下构建C#项目?

时间:2010-08-27 20:21:01

标签: c# visual-studio msbuild

给出一个解决方案:

  • 项目P1引用P2
  • P2引用P3
  • P3参考P4

当你用这种方式调用msbuild时:

msbuild.exe /v:m "c:\mysolution\p1\p1.csproj"

msbuild检查所有项目依赖项是否必要时构建依赖项。典型的输出是:

Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

  P4 -> c:\mysolution\P4\bin\Debug\P4.dll
  p3 -> c:\mysolution\p3\bin\Debug\p3.dll
  p2 -> c:\mysolution\p2\bin\Debug\p2.dll
  p1 -> c:\mysolution\p1\bin\Debug\p1.dll

就我而言,我知道存在依赖关系并且没有问题。

有没有办法只构建项目p1.csproj而不验证依赖项?解决方案可以使用msbuild或其他内容。

5 个答案:

答案 0 :(得分:4)

你可以将/p:BuildProjectReferences=false传递给msbuild,这将跳过构建项目的refence .. 但这有一个限制,如果您的解决方案配置和引用项目的配置不匹配,msbuild将无法解析引用项目的目标输出文件......

这是一个免费的vs扩展包,你可以下载并试试 http://visualstudiogallery.msdn.microsoft.com/98de4058-8dc7-435b-9e01-c0f71dace808

vs package:Sharp Build Utility

我是这个扩展的作者,我对当前的工作有相同的要求,享受这个工具...

本质上,这个扩展可以处理上面的情况,它将生成构建项目文件的卷影副本,将所有项目引用更改为dll文件引用,并使用影子项目文件启动msbuild。

答案 1 :(得分:2)

目标是什么(你为什么关心)?

您可以使用程序集引用而不是项目引用(但要注意debug v release path difference)。

答案 2 :(得分:1)

也许您可以在Visual Studio中使用配置管理器,并取消选中除要构建的项目之外的所有项目。

答案 3 :(得分:0)

查看Microsoft构建解决方案和项目的最佳实践:

  

<强> Microsoft Patterns & Practices: Structuring Solutions and Projects

您目前拥有的是单一解决方案。这是理想的情况,应尽可能使用。但是,对于像您这样的非常大的解决方案,单一解决方案可能会变得不切实际。

您可能需要考虑对解决方案进行分区,即对依赖关系树的分区使用单独的解决方案。或者您甚至可以考虑使用所谓的多解决方案。查看链接的文章,了解此类更改的后果和弊端。也许使用更快的硬件可能是更好的选择。

答案 4 :(得分:0)

您应该查看名为OpenMake的产品。我的首席构建工程师告诉我他们已经完成了很多依赖性检查并构建了并行化。

OpenMake