为什么我不应该在我的CI服务器上安装Visual Studio?

maf*_*afu 6 continuous-integration visual-studio ci-server

许多CI新手(持续集成)在他们的CI服务器上安装VS(Visual Studio)"因为需要编译代码".MSTest是这里提到的常见参考.

为什么我不应该在我的CI服务器上安装VS(或者一般来说,任何不是开箱即用的软件)?

(这个问题显然没有被问过,所以我加入它作为参考.如果它已经存在,抱歉,我错过了,请合并.如果在一段时间内没有提供这个问题的答案,我可以自己添加一个)

bkw*_*ign 7

出于实用性,您可能还需要安装Visual Studio

我打算试着反驳@TomasLycken在评论中发表的接受的答案,但发现我需要更多的空间来讨论.虽然我在技术上同意@TomasLycken所声称的内容,但在这里,我将列出一些我发现很难在我的CI服务器上安装的依赖项 - 并留给你来决定接受的答案是多么正确......

1 - 'mshtml'主要互操作程序集

你可以在我创建和回答的这个问题中看到我在构建输出中遇到的问题.请注意,我花了几个小时搞清楚如何获得所需的PIA注册 - 这是在我的V.Studio安装服务器上运行一些.exe的结果 - 嗯嗯

背景:我有一个使用Web浏览器控件的win表单项目..在'WebDocumentCompleted'事件中,我正在转换DomDocumenthshtml.IHTMLDocument2..这就是我Microsoft.mshtml在项目中引用的原因.

结果:现在@TomasLycken建议我通过修复我的代码来解决这个问题.起初,我想对这个建议嗤之以鼻.我的代码已部署并正常运行!但是,当我进行网络搜索时,我发现微软并不真正推荐在他们开发的Visual Studio环境之外使用他们的mshtml PIA.

违规的10行代码有效地代表我们的用户进行了一些屏幕抓取,这些用户在几个着名的门户网站上研究技术主题.但是,当我在2009年编写这段代码时,看来它曾经被操纵过的DOM现在在2016年发生了变化.我知道这很令人震惊.可能不是我最聪明的代码.可能是时候退出这个功能 - 换句话说,修复代码并重新发布它.

@TomasLyken我认为这是正确的.

2 - Win Forms Project构建后脚本

上下文:所以我在SO上遇到了这种很酷的后期构建技术,它允许我的WinForms项目中的app.config文件进行类似于我的web项目的web.config文件转换方式的XDT转换.好吧,如果您从SO复制到.csproj或.vbproj源文件中,它就可以正常工作OOTB.但是,一旦将所有这些放在没有Visual Studio的构建服务器上,关键部分就会因为依赖于以下内容而失败:

 $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets
Run Code Online (Sandbox Code Playgroud)

现在这已经足够纠正了..我只是复制到CI服务器我的C:\Program Files (x86)\MSBuild\Microsoft目录.但是,我应该吗?因为我对Visual Studio 通常支持的内容有所了解.有人可能会认为,@ TomasLycken接受的答案在这一点上仍然是正确的.

3 - 刚刚获得所有.NET框架和多目标包

上面的第1点和第2点,实际上是我在尝试让我的第一个构建作业运行时所征服的最后一件事.我的第一个构建工作是我在过去8年中创建和维护的解决方案堆栈.所以它已经经历了一些框架并且会有一些非平凡的纹理.我知道这并不容易.事实上,我希望通过制作一个可以构建这个 .sln 的CI服务器,它实际上已经准备好构建我们投入的大多数其他解决方案.

当我第一次收到干净的"Windows 2012 R2"服务器时,它只是丢失了很多东西..我想知道我是否先安装了Visual Studio,如果它能直接纠正其中的一些内容?

以下是我必须做的事情的概要 - 但它没有显示出所有的痛苦和痛苦以及错误的开始.不过,也许它会帮助别人.

> First, uninstalled 4.6.1 framework
-- (find Update for Microsoft Windows (KB3102467) and click Uninstall.)
-- also uninstalled anything from MS labeled with C++ redistributable (a later step will restore these)

> Then, install Windows 7 SDK (installs critical "reference assemblies" and a proper baseline 4.0 framework)
-- Then, install Multi-Targeting Pack for Framework 4.0.1 (netfx_401mtpack.exe)
-- Then, install Multi-Targeting Pack for Framework 4.0.3 (netfx_403mtpack.exe)

> Then, reinstalled 4.6.1 framework for 2012 R2 (KB3102467) 

> Then, installed Microsoft .NET Framework 4.6.1 Developer Pack (DP461-DevPack-KB3105179-ENU.exe)

> Then, installed "Visual Studio 2015 Build Tools" (BuildTools_Full.exe)

> Downloaded a copy of nuget.exe and put it in the C:\Windows directory
Run Code Online (Sandbox Code Playgroud)

4 - 摆脱"缺失规则集"警告MSB3884

来自@kevinbosman在这个GitHub帖子上的帖子

如果您不想编辑Microsoft.CodeAnalysis.Targets文件,请注意仅仅将文件夹复制C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets\到构建服务器是不够的.

您还需要创建注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\Setup\EDev并添加字符串value StanDir=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\

5 - 让MSTest正常运行

  • 需要将dll复制到您的构建计算机中,有些必须在此处注册具有更多信息的 GAC :
    • Microsoft.VisualStudio.QualityTools.Resource.dll
    • Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
  • 需要将dev机器的注册表中的配置单元复制到构建服务器中
  • 一些警告,如果你想让它们消失,根据这个微软视觉工作室帮助论坛需要安装VS 2010和功能包2.


Tom*_*han 6

因为你不需要.Visual Studio许可证非常昂贵,所以让一个人只是躺在没有人使用它的服务器上只是一个浪费.有几个争论为什么你仍然需要在你的持续集成上安装一个完整的Visual Studio实例服务器 - 但这是他们的反驳论点:

原因1:我需要它来编译.
现实:不,你没有.您需要MSBuild进行编译,但在Windows SDK中可以免费使用.请注意,不同的操作系统和.NET版本有多个版本,因此请务必下载正确的版本.

原因2:我需要它来快速修复服务器.
现实:不,你没有.您不应该在服务器上快速修复 - 您应该从您的版本控制系统中检出,进行修复,在本地构建和运行测试,直到它工作,签入,并让CI系统为您完成剩下的工作.这就是你有CI系统的原因.

原因3:没有Visual Studio,我无法运行MSTest没有我的CI服务器.
现实:错了.据我所知,在MSTest的亚军也是SDK的一部分(至少这就是它似乎像我们这里的CI服务器上-虽然我无法验证它,因为我们没有在目前任何测试......).然而,一篇快速的谷歌搜索发现这篇博文文章解释了如何在没有SDK的情况下做到这一点.我没有仔细阅读它,所以我不能保证它有效,或者它是合法的.你被警告了.

随意在评论中添加更多理由,我会反驳他们.