代码之家  ›  专栏  ›  技术社区  ›  Bostone

使用msbuild简化.NET项目

  •  1
  • Bostone  · 技术社区  · 15 年前

    不好意思说得有点含糊,但我现在领导的项目也是如此。我继承了大量的内部工具,并试图将统一的构建系统放在每一个工具的周围。我们拥有的一些项目(几十个)是基于.NET的Web项目C大多数,其中一些是Web服务和一些Web应用程序。这些应用程序是在过去6年内开发的,因此.NET版本从2到3.5不等。最糟糕的是,所有的应用程序都是使用vs构建的,没有一个应用程序有命令行构建。

    要求是:我应该能够从SVN中检出代码,并且完全从命令行中构建任何或所有项目,而不需要输入提示,这样它就可以最终集成到 TeamCity (持续集成工具)

    我有C/C++,Java背景,所以我做了一点研究,一切似乎都指向了 MSBuild 作为工具。在过去的两周里,我从我们的.NET开发人员那里听到的所有信息都是:“这很难,不可能,我们不知道如何做到”,所以现在有问题:

    1. 是否可以使用仅限命令行的内部版本对任何现有的.NET项目进行改造?如果有限制,那会是什么?
    2. 我是否需要一个完整的VS版本来执行构建和部署,或者是否有一些较小的替代方案(同样,最终项目将构建在没有GUI的持续集成盒上)
    3. 我可以(从SVN)将代码签出到任何目录中吗?目前有人告诉我,我需要把代码放在“特殊位置”,配置成被vs“监视”。
    4. 如何管理外部依赖关系?目前,我从团队得知,任何第三方库都需要在使用UI构建之前“预安装”,团队提供的最佳解决方案是“安装并创建虚拟机”。

    谢谢你的建议

    1 回复  |  直到 15 年前
        1
  •  3
  •   Jon Skeet    15 年前

    这完全取决于你的依赖是什么和什么,但是:

    • msbuild是Visual Studio 2005及更高版本使用的“本机”文件格式,因此您可以构建一个vs解决方案 一个vs项目很容易
    • msbuild是.NET框架以及各种编译器的一部分。你不需要安装vs.
    • 是的,您可以在任何地方从SVN签出代码。它不像VSS/VST那样服务器“知道”代码在哪里
    • 在可能的情况下,外部依赖项应该是仅存储在源代码管理中并通过相对路径引用的DLL。如果你有东西 要在GAC中安装,这会稍微困难一些。

    就我个人而言,我已经成功地使用了 NAnt 作为编译“控制器”,然后对msbuild进行解压,以执行实际的编译位。对于控制器位来说,它比msbuild(imo)更好,但在实际编译方面不如Visual Studio好。

    你可以在我的 Protocol Buffers port .