C# 如何使用dirs.proj?
恐怕我问的是一个非常愚蠢的问题,但我似乎找不到任何东西能清楚地说明这一点。我通常在较小的应用程序上工作,但现在在一个较大的应用程序上工作,在一个基线框架中有几个程序集,在一个产品线域中有几个程序集(还有更多)。我想通过配置MSBuild来管理生成。我在网上做了很多研究(特别是我找到的几篇MSDN文章),现在我觉得自己知识渊博,很危险 我知道在csharp中,*.csproj文件可以卸载并使用属性、项和目标进行修改,以控制构建过程。我还了解,我可以导入自己的目标文件,以帮助分离和组织。在这个link()中,多级项目构建是用节点级dirs.proj文件组织的。这让我感到困惑,并提出了几个我似乎找不到答案的问题:C# 如何使用dirs.proj?,c#,visual-studio-2013,msbuild,C#,Visual Studio 2013,Msbuild,恐怕我问的是一个非常愚蠢的问题,但我似乎找不到任何东西能清楚地说明这一点。我通常在较小的应用程序上工作,但现在在一个较大的应用程序上工作,在一个基线框架中有几个程序集,在一个产品线域中有几个程序集(还有更多)。我想通过配置MSBuild来管理生成。我在网上做了很多研究(特别是我找到的几篇MSDN文章),现在我觉得自己知识渊博,很危险 我知道在csharp中,*.csproj文件可以卸载并使用属性、项和目标进行修改,以控制构建过程。我还了解,我可以导入自己的目标文件,以帮助分离和组织。在这个lin
提前感谢。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”只是配置大型构建的“源代码树”方法的通用术语吗?这取决于它包含的内容。嗯。。。使用项目模板?我试试看,然后告诉你。