许多不熟悉 CI(持续集成)的人在他们的 CI 服务器上安装 VS(Visual Studio),“因为它需要编译代码”。MSTest 是这里提到的常见参考。
为什么我不应该在我的 CI 服务器上安装 VS(或者一般来说,任何不是开箱即用的软件)?
(这个问题显然之前没有被问过,所以我添加它以供参考。如果它已经存在,对不起,我错过了,请合并。如果在一段时间内没有提供这个问题的答案,我可以自己添加一个)
许多不熟悉 CI(持续集成)的人在他们的 CI 服务器上安装 VS(Visual Studio),“因为它需要编译代码”。MSTest 是这里提到的常见参考。
为什么我不应该在我的 CI 服务器上安装 VS(或者一般来说,任何不是开箱即用的软件)?
(这个问题显然之前没有被问过,所以我添加它以供参考。如果它已经存在,对不起,我错过了,请合并。如果在一段时间内没有提供这个问题的答案,我可以自己添加一个)
因为你不需要。Visual Studio 许可证非常昂贵,因此在没有人使用它的服务器上放置一个只是浪费。有几个论点为什么您仍然需要在持续集成上安装完整的 Visual Studio 实例服务器 - 但这是他们的反驳论点:
原因1:我需要它来编译。
现实:不,你没有。您需要MSBuild进行编译,但它在 Windows SDK 中是免费提供的。请注意,对于不同的操作系统和 .NET 版本,有多个版本,因此请小心下载正确的版本。
原因2:我需要它在服务器上进行快速修复。
现实:不,你没有。你不应该在服务器上进行快速修复——你应该从你的版本控制系统中签出,进行修复,在本地构建和运行测试,直到它工作,签入,然后让 CI 系统为你完成其余的工作。这就是为什么你有一个 CI 系统。
原因 3:没有 Visual Studio,我的 CI 服务器无法运行 MSTest。
现实:错。AFAIK,MSTest 运行器也是 SDK 的一部分(至少在我们的 CI 服务器上看起来是这样的——尽管我无法验证它,因为我们目前没有任何测试......)。然而,通过谷歌搜索发现这篇博文也解释了如何在没有 SDK 的情况下进行操作。我没有详细阅读它,所以我不能保证它有效,或者它是合法的。你被警告了。
随意在评论中添加更多理由,我会反驳他们。
我打算尝试反驳@TomasLycken 在评论中发布的已接受答案,但发现我需要更多空间来讨论。尽管我在技术上同意@TomasLycken 所断言的内容,但在这里,我将列出一些我发现难以在我的 CI 服务器上安装的依赖项 - 并由您决定接受的答案有多正确......
1 - 'mshtml' 主互操作程序集
您可以在我创建并回答的这个 SO question中看到我在构建输出中遇到的问题。请注意,我花了几个小时弄清楚如何注册所需的 PIA - 这是在我的 V.Studio 安装的服务器上运行一些 .exe 的结果 - 嗯嗯嗯
上下文:我有一个使用 Web 浏览器控件的 win 表单项目。在“WebDocumentCompleted”事件中,我将其转换DomDocument
为hshtml.IHTMLDocument2
..,这就是我Microsoft.mshtml
在项目中引用的原因。
结果:现在@TomasLycken 建议我通过修复我的代码来解决这个问题。起初,我想对这个建议嗤之以鼻。我的代码已部署并正在运行!但是,当我进行网络搜索时,我发现 Microsoft 并不真正建议在他们开发的 Visual Studio 环境之外使用他们的 mshtml PIA。
冒犯性的 10 行代码实际上是代表我们的用户对数据进行了一点屏幕抓取,这些用户在几个著名的门户网站上研究技术主题。但是,当我测试这段 2009 年编写的代码时,它曾经操作的 DOM 现在似乎在 2016 年发生了变化。我知道令人震惊。可能不是我最聪明的代码。可能是时候停用这个功能了——换句话说,修复代码并重新提交它。
@TomasLyken 我认为这是正确的。
2 - Win Forms Project 构建后脚本
背景:所以我在 SO 上遇到了这种很酷的后期构建技术,它允许我的 WinForms 项目中的 app.config 文件进行 XDT 转换,类似于我的 Web 项目的 web.config 文件的转换方式。好吧,如果您从 SO 复制到 .csproj 或 .vbproj 源文件中,可以这么说,它只适用于 OOTB。但是,一旦您将所有这些放到没有 Visual Studio 的构建服务器上,关键部分会由于依赖于以下内容而失败:
$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets
现在这很容易纠正。我刚刚将我的C:\Program Files (x86)\MSBuild\Microsoft
目录复制到 CI 服务器。但是,我应该吗?由于我已经对 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
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
并添加字符串值StanDir
=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\
5 - 让 MSTest 正确运行