代码之家  ›  专栏  ›  技术社区  ›  Pete Morgan

如何使用Visual Studio进入自动生成?

  •  9
  • Pete Morgan  · 技术社区  · 15 年前

    我在一家小型的.NET商店工作,目前我们使用Visual Studio IDE构建所有解决方案。我们希望发展到完全控制用于构建、测试、部署的msbuild脚本的程度——利用msbuild社区任务等。

    我想我的问题是: 在Visual Studio开发体验中有什么不同?

    如果我们正在创建自己的msbuild.proj文件,这是否意味着我们不再有.csproj文件?现在项目在vs中是如何看的?

    我错过了什么很明显的东西吗?

    更新 感谢大家抽出时间作出回应。 我知道一些构建工具:CruiseControl、TeamCity等等,而且vs项目(.csproj等)只是msbuild文件。 我想了解的是那些决定自己编写脚本和自己的.proj文件的人。他们是否使用vs.csproj文件作为“容器”将代码文件保存在IDE中?它们如何触发自己的开发人员构建?他们只是从命令行启动msbuild吗?在工具栏上有一个按钮可以有效地执行相同的操作?

    总之——是的,您确实可以通过调用.sln文件或.csproj文件来使用其他工具来驱动构建,但还有另一种方法——这是如何工作的?

    6 回复  |  直到 15 年前
        1
  •  6
  •   jamesaharvey    15 年前

    我们使用msbuild进行自动生成,您只需将msbuild指向解决方案文件而不进行任何更改。

    另外,为了澄清这一点,我们还使用了一个自动构建服务器(带有.NET插件的Hudson),该服务器使用msbuild来自动化流程。

        2
  •  2
  •   JP Alioto    15 年前

    你应该看看 CruiseControl.NET 而不是滚动您自己的自动构建和CI过程。它使之变得更容易,并且可以做额外的工作,比如运行直到测试或代码覆盖工具,或者作为构建过程的一部分。

        3
  •  2
  •   John Feminella    15 年前

    在Visual Studio开发体验中有什么不同?

    没有,通常。 事实上,如果您做得对,这应该是透明的;您的IDE不应该关心您使用的构建管理器。这就是为什么像CruiseControl.net和Hudson这样的解决方案很好。

    如果我们正在创建自己的msbuild.proj文件,这是否意味着我们不再有.csproj文件?现在项目在vs中是如何看的?

    您的解决方案结构保持不变。在Visual Studio中,解决方案和项目作为项目组织/打包指南和IDE便利性具有双重作用。您的构建管理器将对此进行反思,以了解需要构建什么。

        4
  •  2
  •   marc_s    15 年前

    有几个很好的自动和连续的构建工具可用,它们构建在msbuild上。您的项目文件已经 msbuild文件-实际上,自vs2005以来,您一直在本地工作站上使用msbuild来创建构建-您可能不知道它:-)

    除了CruiseControl.net(JP提到),它绝对值得一看,我还推荐了另外两种产品:

    • FinalBuilder Server 对于绝大多数开发人员来说,这几乎是未知的(但它确实值得更多的关注!出色的工具)。它们还有一个独立的桌面版本 FinalBuilder 如果你需要的话。这不是免费的——但是一个用户100美元(5个用户450美元),这真的不是一笔巨大的支出。

    • TeamCity 由JetBrains提供,也因其在.NET世界中的Resharper产品而闻名,它为多达20个用户/构建计划的团队提供免费的专业版,如果您已经长大了,还提供更昂贵的企业版:—)

    与CruiseControl.net相比,两者都提供了友好的GUI,既可以配置构建,也可以监视构建。

    正如我所提到的,两者都建立在您现有的项目和解决方案文件结构之上,所以根本不需要更改其中的任何内容。

    你真的不能错在持续集成上!我不能再没有即时的构建反馈了……

    马克

        5
  •  1
  •   TrueWill    15 年前

    我们在工作中使用TeamCity;我们从CruiseControl.net开始,但当另一个开发人员向我指出,否则我将永远维护CC构建时就切换了。;)说真的,TeamCity很容易学习和使用。

    当我第一次听说持续集成时,我问了类似的问题。您是否需要手动重写(和维护)所有解决方案和项目?是否需要学习msbuild命令?简短的回答是不。

    正如哈维先生所提到的,您可以简单地在一个vs创建的解决方案或项目文件上调用msbuild,它将为您构建它。TeamCity将自动处理此问题。

    如果你想要更多的灵活性,我建议 NAnt . 我曾经用手工编写过msbuild脚本,这是一个让人沮丧的练习。nant的语法更清晰,而且(对我来说)更容易使用和阅读。我们将nant用于花哨的东西,当我们想要构建一个项目或解决方案时,再次从nant调用msbuild。Teamcity支持南特。

    总之,对我们来说,在Visual Studio中没有什么真正的变化。我们仍然以同样的方式创建和维护我们的项目和解决方案。当我们将它们签入源代码管理(TFS)时,TeamCity会自动获取这些信息,构建解决方案,并运行我们的(nunit)测试。我们还设置了一键部署构建(在TeamCity中使用nant)。

        6
  •  1
  •   Pete Morgan    15 年前

    感谢大家的回答,但通过一些研究,我发现了一些不同的方法:

    • 将生成过程扩展到.sln&.csproj文件的约束之外
    • 但仍然使用Visual Studio
    • 尽可能保持在最高层建筑的世界里。
    • 在需要时添加构建服务器(如TeamCity和Hudson)的功能
    • 但不依赖这些服务器来获得构建脚本应该提供的功能。

    所以我发现: 这篇来自Scott Hanselman的旧博客文章 code organisation . 在这里,他使用的是nant而不是msbuild,但其基本概念是通过.bat批处理文件执行所需的nant/msbuild项目。

    “在这个源目录中,我们有build.bat和buildpatch.bat之类的东西。目标是人们可以从源代码管理和类型构建中获取内容,并在某个地方发挥作用。能够可靠地简单地构建一个完整的系统是非常令人欣慰的。”

    从这里我可以看到他(很明显)仍然在使用.sln和.csproj为vs保存他的文件-如果需要,可以通过vs构建-但实际上是通过nant.build文件进行构建,通过.bat执行。

    另一篇文章(也是斯科特·汉塞尔曼的)展示了你如何 execute external tools (如msbuild或.bat文件)。因此,我创建了一个build.bat文件,如下所示:

    @echo off
    echo Building %1 solution from build.bat
    echo Directory: %~p1
    C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe %~f1 %2
    

    (我从 here ;%~f1将mysolution.sln扩展到sln的完全限定路径);-)

    然后,我设置了Visual Studio“外部工具”对话框,以便: -命令为“build.bat” -参数为“$(solutionFileName)/v:m” -初始目录为“&(solutiondir)”

    然后我在工具栏上添加了一个按钮来执行它。 我可以进一步映射F5键来运行它,而不是标准的Visual Studio内部版本。

    不管怎样,这些只是一些想法(不可否认是别人的想法!)但它让我对构建以及如何完成它们有了更多的了解。有一些限制(例如错误列表窗口中不会出现错误),但我相信如果需要,可以克服这些限制。

    我将尝试一下,看看我能在msbuild上单独实现什么,然后尝试连接到哈德逊,看看什么厨师!:-)

    顺便说一句,如果有人在这一点上仍在阅读,并且对我在自己的答案中所呈现的内容是否是好的/坏的/对的/错的/杀戮过度的/过时的/有缺陷的/无论什么,请随时发表意见。

    好一个, Pete。