使用Msbuild优化.NET项目

使用Msbuild优化.NET项目,.net,msbuild,build-process,.net,Msbuild,Build Process,抱歉说得有点含糊,我现在领导的项目也是如此。我继承了大量的各种内部工具,并试图在每一个工具周围安装统一的构建系统。我们的一些项目(几十个)是基于.NET的web项目C#大部分是web服务和一些web应用程序。这些应用程序是在过去6年中开发的,因此.NET版本从2到3.5不等。最糟糕的是,所有应用程序都是使用VS构建的,没有一个具有命令行构建 要求是:我应该能够从SVN中检出代码,并完全从命令行构建任何或所有项目,无需输入提示,以便最终将其集成到TeamCity(持续集成工具) 我有C/C++,J

抱歉说得有点含糊,我现在领导的项目也是如此。我继承了大量的各种内部工具,并试图在每一个工具周围安装统一的构建系统。我们的一些项目(几十个)是基于.NET的web项目C#大部分是web服务和一些web应用程序。这些应用程序是在过去6年中开发的,因此.NET版本从2到3.5不等。最糟糕的是,所有应用程序都是使用VS构建的,没有一个具有命令行构建

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

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

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

  • 您的建议将非常受欢迎

    这完全取决于您的依赖关系和内容,但是:

    • MSBuild是Visual Studio 2005及其更高版本使用的“本机”文件格式,因此您可以非常轻松地构建VS解决方案或VS项目
    • MSBuild是.NET framework以及各种编译器的一部分。您不需要安装VS
    • 是的,您可以在任何地方从SVN检出代码。它不像VSS/VSTS那样,服务器“知道”代码在哪里
    • 外部依赖关系应该——只要可能——是DLL,只存储在源代码管理中,并通过相对路径引用。如果你必须在GAC中安装一些东西,那就稍微难一点
    就我个人而言,我已经成功地将其用作构建“控制器”,但随后将其剥离到MSBuild来执行实际的编译位。在控制器位方面,它比MSBuild更好(IMO),但在实际编译方面不如它跟上Visual Studio


    您可以在my.

    中看到这是如何工作的示例。我正在使用Maven(exec Maven插件)使用各种开关调用MSBuild。我还可以使用Maven获取DLL并将它们放在项目文件夹下(比如proj/lib)。如何“激活”这些?是否有一些MSBuild命令会有所帮助?顺便说一句,如果MSBuild使用VS解决方案文件,我是否仍然可以签出该解决方案并仅使用.NET framework构建它,而不实际安装VS?只要从VS项目中正确引用了这些库,就无需“激活”它们。是的,你仍然可以在不安装VS.Jon的情况下进行构建,你能定义“适当引用”吗?我将源代码拉到某个目录中,唯一可以预定义的是相对路径——这就足够了吗?如果没有-我可以在运行时使用MSBuild注册DLL吗?“是的,您仍然可以在不安装VS”的情况下进行生成。。。只要您不想构建安装项目(生成MSI)-这需要VS:(