我可以使用MSBUILD脚本替换SLN文件



我想将构建从使用Visual Studio SLN文件转移到使用MSBUILD SRIPTS(我们正在SLN文件中接近100个项目),但我不想dual-在Visual Studio中编辑代码时,维护SLN文件。

我想要的是创建MSBuild脚本的依赖关系树,然后能够从Visual Studio中选择任何一个MSBUILD脚本,以便使用它是SLN文件,包括自动的所有依赖项目。

Visual Studio可以这样做吗?是否有任何现有工具可以通过MSBUILD脚本动态创建SLN文件?是否有人试图编写一个工具来执行此操作?而不是编译DLL),如果您有一些XML经验。您将解析初始的CSPROJ文件(即XML),并阅读对项目的所有参考。他们看起来像这样:

<ProjectReference Include="....srcTestTest.csproj" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Project>{ab709f59-aa17-4297-b827-101d086586e1}</Project>
  <Name>Test</Name>
</ProjectReference>

您可以看到您有通往相关CSPROJ文件的路径。您将收集所有相关项目的途径,并为每个文件进行相同的操作,直到您处理所有文件(请谨慎使用Mutliple Projects(重复)引用的项目 - 否则,您将进入无限循环)。请注意,CSPROJ元素属于非空名称空间,因此解析XML时需要考虑到这一点(.NET XML API可以处理这些空间)。您可以收集所有项目(路径,名称,GUID),然后创建SLN文件,也可以飞行 - 每次找到新的参考。

您可以按原样构建CSPROJ,如果您创建了所有CSPROJ的项目组并将其传递给MSBuild,则依赖订单是为您确定的(如您所拥有的项目参考而不是DLL引用)。自动。

项目参考可以使构建较慢,如果您使用DLL引用构建,则可以更快地构建,但折衷是您必须知道或确定依赖订单,然后混乱可以确保。

SLN中的100个项目很多,将使您与慢速相比。我倾向于每个实体具有SLN,例如网站,Web服务,而不是单片构建和SLN。

我写了一个动态生成 * *的工具。SLN文件早在2011年12月。不幸的是,由于工作中的政治,我无法部署它。我们为我们的构建系统维护600多个项目文件,对于解决方案而言,这太大了。好吧,至少您实际上会尝试在IDE中加载的解决方案。

尽管如此,我们确实使用了由MSBuild加载的动态生成的解决方案文件(不是Devenv.exe)。据我所知,没有人试图将该解决方案文件加载到IDE中。

无论如何,我编写的工具作为参数包含我们的源代码的目录。它递归搜索并找到所有 *.vcxproj和 *.csproj文件。然后,对于每个项目文件,它使用MSBUILD API解析文件。当它解析每个文件时,它会在其他项目文件中寻找依赖项。它足够聪明,可以找到 *.lib文件的本机依赖关系。它足够聪明,可以找到托管的C /CLI的依赖项,该依赖项用类似的内容指定代码文件本身中的依赖项。它也足够聪明,可以使用汇编引用找到正常的托管依赖关系。它还以其他方式找到了依赖性。

然后将所有这些依赖项占用并生成解决方案文件。如果您有疑问,请随意使用我,我们可以谈谈。

我不知道任何现有工具。我知道这也许不是直接回答您的问题,但是我可以分享我从事大型项目的经验。

我们总是将大型解决方案文件分为许多相关项目。然后,您可以打开一个或两个视觉工作室来查看您想从事的项目。

然后,我们有一个MSBUILD脚本,该脚本依次构建每个解决方案以生成整个产品和安装程序。

不需要动态解决方案生成。我担心要维护类似的东西可能需要大量工作,而且您会经常在动态生成的解决方案上不断地工作,因此您永远不会记住事物的位置。有了一些固定的解决方案文件,您可以将项目整理到一些文件夹中,然后您在脑海中有某种组织的组织。有了一个体面的组织,我发现我只需要同时开放并在两个解决方案上工作。

我们有一个或多个基础/核心解决方案,其中包含具有其他解决方案之间共享定义的项目。但是,我没有发现有必要与使用它们的较高项目一起从基础上复制所有依赖项目。您仍然可以通过依赖项目进行调试,而无需将它们进入解决方案。如果您确实需要进行更改,请打开基本解决方案并进行编辑和构建并进行。

请查看GYP(生成您的项目),由Google(创建项目和解决方案文件)为此目的创建,并在必要时自动化构建。

来自他们的Wiki:

GYP最初是为了生成用于构建铬的本机IDE项目文件(Visual Studio,Xcode)的创建。

[..]

另外,GYP的某些设计是通过经验来告知的Google拥有大型项目,由来源[..]。

完全构建

我当前在使用Chromium Embedded Framework时使用它,该框架用于生成 *.vcxproj和 *.sln文件,用于Visual Studio 2012。在这种情况下,它将生成一个带有259个项目的解决方案文件。如果使用旧版本的Visual Studio。

,它还生成 *.vcproj文件。

作为旁注,这是将项目文件置于版本控制系统中并快速为任何新开发设置设置的好方法。

编辑:再次阅读您的问题后,我认为您可以从msbuild脚本中生成 *gyp文件,但仍然值得转换工作。

编辑2:请查看另一个答案,这也可能有所帮助,尤其是gypfy.py,这似乎很有希望:https://stackoverflow.com/a/9387350/1412348

最新更新