CI 服务器上的 .NET 4.0 构建问题

Posted

技术标签:

【中文标题】CI 服务器上的 .NET 4.0 构建问题【英文标题】:.NET 4.0 build issues on CI server 【发布时间】:2020-06-15 09:09:19 【问题描述】:

是否有人设法在 CI 服务器上编译 .NET 4.0 应用程序,而无需在 CI 服务器上安装 Visual Studio 2010?

.NET 4.0 不存在 SDK。已在 CI 服务器上安装了 .NET 4.0。 Msbuild.exe 适用于简单项目并给出以下警告:

(GetReferenceAssemblyPaths 目标)-> C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(847,9):警告 MSB3644:框架的参考程序集“.NETFramework,Version=v4 .0" 未找到。要解决此问题,请为此框架版本安装 SDK 或 Targeting Pack,或者将您的应用程序重新定位到已安装 SDK 或 Targeting Pack 的框架版本。请注意,程序集将从全局程序集缓存 (GAC) 中解析,并将用于代替引用程序集。因此,您的程序集可能无法正确定位于您想要的框架。

【问题讨论】:

我怎样才能使它成为致命错误而不是警告?它隐藏在我们的构建日志中,而是进一步失败并带有一些关于 mscorlib.dll 的神秘消息 【参考方案1】:

您不再需要安装 VS,您现在可以安装“Microsoft Windows SDK for Windows 7 and .NET Framework 4”。

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b

【讨论】:

默认安装为 1.7 GB,但这些文件中的大部分都是不必要的。如果您取消选中除 .NET Development > Intellisense and Reference Assemblies 之外的所有内容,它们仍会为您提供所需的 .NET 4 目标包(大约 450 MB)。 您可能还需要检查 .NET Development > Tools,因为这将引入一些实用程序,例如 sn.exe,这些实用程序可用于处理已签名的程序集。 还有一个网络安装程序,因此您只需下载所需的部分。可以在这里下载:microsoft.com/download/en/confirmation.aspx?id=8279 虽然这被命名为“for Windows 7”,但值得注意的是支持的操作系统:Windows 7、Windows Server 2003 R2 Standard Edition (32-bit x86)、Windows Server 2003 R2 Standard x64 Edition、 Windows Server 2008、Windows Server 2008 R2、Windows Vista、Windows XP Service Pack 3 那个答案对我有帮助。我在安装 sdk 7.1 时遇到了一个不同的问题,如下所示mathworks.com/matlabcentral/answers/95039【参考方案2】:

适用于 .NET 4.5 的 SDK 可用 here。安装程序适用于具有基本授权的代理。支持的操作系统:Windows 8、Windows Server 2012、Windows 7、Windows Server 2008 R2

附:我的回答更像是对Jeremy answer 的评论,但我没有足够的声誉来评论这些答案。

【讨论】:

来自参考页面:“Windows SDK 不再附带完整的命令行构建环境。Windows SDK 现在需要单独安装编译器和构建环境。”所以我认为这不足以运行构建服务器。 这为我解决了问题。您只需选择选项“.NET Framework 4.5 软件开发工具包”,它只需要 62.3 MB 并且在安装在 Windows Server 2012 R2 上的 TFS Build 2013 服务器上运行良好,用于 SharePoint 应用程序部署。无需覆盖 FrameworkPathOverride 参数。【参考方案3】:

其他选择:不安装 Net 4.0 SDK 或 vs 2010

从您的开发机器复制参考程序集文件夹以构建服务器(190MB)。

使用 msbuild -p:FrameworkPathOverride 选项指向引用程序集文件夹

参考程序集位置:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0 要么 C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0

从以下位置找到这个:

.NET 4.0 build server reference assemblies warnings MSB3644

如果您收到此错误:“未找到 Microsoft.WebApplication.targets” - 只需从开发机器 https://***.com/a/5344246/423356 复制目标即可

如果构建服务器中没有安装 mvc3; “添加可部署程序集”到 mvc 项目 http://haacked.com/archive/2011/05/25/bin-deploying-asp-net-mvc-3.aspx

如果您在未安装 sdk 或 Visual Studio 的情况下构建 MSTest 项目时出错;有几篇关于此的博客文章,糟糕的是,解决方案对我来说太复杂了。 我使用 NUnit 而不是 MSTest

【讨论】:

因为我的 2012 服务器不允许我安装 .Net 4,因为安装程序说有更高版本。我按照@kite 所说的做了,并从我拥有的 PC 上复制了 VS 2012。这解决了我的问题。【参考方案4】:

此页面列出了每个 Visual Studio 版本的 .NET SDK。 http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx

对于较小的下载,请选择“开发包”或“目标包”而不是完整的 Windows SDK。

【讨论】:

安装开发包或目标包可以是一般提示,但特定于.NET Framework 4.0(这个问题是关于)没有这样的包,Windows SDK是不可避免的。

以上是关于CI 服务器上的 .NET 4.0 构建问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows Server 2012 上的 .NET 4.0 上运行服务构建时出现 System.Configuration.ConfigurationException

哪个基于云的 CI/构建服务器与 .net 一起使用

安装了 .NET 4.5 的构建服务器能否成功地将针对 4.0 的项目部署到仅安装了 .NET 4.0 的服务器?

CI CD TFS 2013 - TFS 服务器构建上的 Nuget 自动恢复

在 WCF 和 .NET 4.0 中使用 TLS 1.1 或 1.2?

Gitlab CI - Docker 推送到 AWS ECR