C# 如何使用dirs.proj?

C# 如何使用dirs.proj?,c#,visual-studio-2013,msbuild,C#,Visual Studio 2013,Msbuild,恐怕我问的是一个非常愚蠢的问题,但我似乎找不到任何东西能清楚地说明这一点。我通常在较小的应用程序上工作,但现在在一个较大的应用程序上工作,在一个基线框架中有几个程序集,在一个产品线域中有几个程序集(还有更多)。我想通过配置MSBuild来管理生成。我在网上做了很多研究(特别是我找到的几篇MSDN文章),现在我觉得自己知识渊博,很危险 我知道在csharp中,*.csproj文件可以卸载并使用属性、项和目标进行修改,以控制构建过程。我还了解,我可以导入自己的目标文件,以帮助分离和组织。在这个lin

恐怕我问的是一个非常愚蠢的问题,但我似乎找不到任何东西能清楚地说明这一点。我通常在较小的应用程序上工作,但现在在一个较大的应用程序上工作,在一个基线框架中有几个程序集,在一个产品线域中有几个程序集(还有更多)。我想通过配置MSBuild来管理生成。我在网上做了很多研究(特别是我找到的几篇MSDN文章),现在我觉得自己知识渊博,很危险

我知道在csharp中,*.csproj文件可以卸载并使用属性、项和目标进行修改,以控制构建过程。我还了解,我可以导入自己的目标文件,以帮助分离和组织。在这个link()中,多级项目构建是用节点级dirs.proj文件组织的。这让我感到困惑,并提出了几个我似乎找不到答案的问题:

  • *.proj和*.csproj文件的区别是什么
  • 是否可以在VS中设置*.proj以在F6构建时加载,或者使用它是否只需要使用命令提示符?(即“msbuild dirs.proj/t:Build”)
  • dirs.proj是否自动加载?如果是这样的话,我的study by无法正常工作,但它在命令提示符下工作
  • 或者我一直忽略了一些关于“dirs.proj”的东西,也许它只是一个project*.csproj文件的替代名?如果是这样的话,那么就不需要根节点的dirs.proj,从我可以看出,它没有与之关联的实际项目 无论如何,我已经在几个论坛上看到dirs.proj提到了一些问题,但是我在哪里也找不到它是如何在VS中加载或使用的(在手动命令提示符构建之外,如果用它来组织构建,这似乎是不合理的,但构建不会真正花费大量时间)。我希望有人能帮我实现这个美好的时刻


    提前感谢。

    Dirs.proj是一种MSBuild约定,通常用于处理非常大的源代码树(>20个项目)。我在以前的一家公司与微软工程师合作过,dirs.proj约定似乎是微软内部开发并用于管理非常大的源代码树的约定

    这方面的一个很好的实现参考是CodePlex上的项目

    这个例子很好地解释了msbuild范例背后的推理,但它没有很好地展示它如何工作的实际示例。Python工具项目是这方面的优秀参考

    使用这种范式背后的想法很简单。我敢打赌,大多数.NET软件工程师在规模有限的项目上工作,一次处理的项目不超过5-10个,他们通过解决方案(.sln)文件在Visual Studio中管理这些项目。他们甚至可以指示构建系统在.sln上运行构建。在您开始考虑将您的产品扩展到更大的平台或将其与更大的平台(例如包含许多项目的平台)相结合之前,这一切都很好。解决方案文件不是MSBuild文件,因此它们不像MSBuild那样具有可扩展性,并且在处理大量项目时会遭受巨大的性能损失

    从MSBuild的角度来看,dirs.proj代表Visual Studio.sln文件。然而,不同之处在于dirs.proj不像.sln那样只包括.csproj(以及类似的内容),相反,它们可以包括源子树(例如其他嵌套的dirs.proj)。因此,构建根dirs.proj可以生成整个源树,或者构建嵌套的dirs.proj将生成该子树

    因此,该范例鼓励您将源代码视为一系列相互依存的节点,这些节点被组织到功能或产品区域中。这样,工程师就可以在非常大的项目中处理不同的源子树,而不必像处理VS解决方案那样处理整个源代码树

    使用此范例还带来了.sln文件所没有的某些好处。例如,如果一个项目从另一个独立的子树引用一个项目,msbuild将首先自动生成该引用。此外,源节点可以携带自己的构建设置,允许根据构建场景使用不同的构建设置动态构建它们。例如,在一个场景下,SharePoint源子树需要WSP打包,C#子树需要在没有.pdb的情况下生成,DB子树需要生成DACPAC,整个源树需要使用myCorp.snk对其程序集进行签名,并将生成输出设置为$(buildRoot)\output目录

    dirs.proj不是通过visual studio打开的-它们是使用msbuild在命令行上构建的。唯一的痛点是这些文件必须手工管理


    因此,长答案短看一下Python工具项目,看看他们是如何使用dirs.proj的。请注意整个源代码树如何具有由common.Build.settings管理的公共设置,以及此.settings文件中的msbuild属性如何在各种.csproj文件中使用。

    没有根本区别,因为它们只是msbuild文件。VisualStudio查看某些元数据/属性并确定如何加载它。然后如何将其与VS解决方案集成或设置以进行构建?那么“dirs.proj”只是配置大型构建的“源代码树”方法的通用术语吗?这取决于它包含的内容。嗯。。。使用项目模板?我试试看,然后告诉你。