如何使用VSTS托管代理构建面向.NET 3.5的.csproj项目?
解决VSTS托管代理上.NET 3.5 Profile构建错误的方案
我懂你现在的烦恼——用VSTS托管代理构建Unity相关项目时,碰到了.NET 3.5 Profile引用程序集找不到的错误,又不想折腾自建代理。下面给你几个不用自建代理就能搞定的方法:
1. 移除项目中的.NET 3.5 Profile配置
错误里提到的.NETFramework,Version=v3.5,Profile=v3.5是问题核心,很多时候这种特定的Profile版本在托管代理上没有预装对应的Targeting Pack。你可以直接修改项目文件来解决:
- 打开你的项目文件(
.csproj或.vbproj) - 找到类似以下的代码行,将其删除或注释掉:
<TargetFrameworkProfile>v3.5</TargetFrameworkProfile> - 保存后重新提交代码到VSTS,再触发构建
修改后项目会以标准的.NET 3.5框架为目标,托管代理通常已经预装了标准.NET 3.5的Targeting Pack,构建就能正常跑起来了。
2. 使用NuGet安装.NET 3.5引用程序集包
微软提供了专门的NuGet包来提供.NET框架的引用程序集,完全不用依赖代理机器上的本地安装:
- 在你的项目中安装
Microsoft.NETFramework.ReferenceAssemblies.net35这个NuGet包 - 确保VSTS构建流程里包含NuGet还原步骤,让代理自动下载这个包
- 构建时MSBuild会自动使用NuGet包中的引用程序集,不再依赖全局安装的Targeting Pack
这个方法不用改项目框架目标,也不用碰代理机器,非常适合自动化构建的场景。
3. 构建时临时部署.NET 3.5 Targeting Pack
如果你的项目必须保留.NET 3.5 Profile配置,可以通过构建步骤临时在托管代理上部署所需的引用程序集:
- 提前准备好.NET 3.5 Targeting Pack的压缩文件(从官方渠道获取后自行打包)
- 将压缩文件上传到VSTS的工件库(比如Azure Artifacts)
- 在构建流程中添加以下步骤:
- 从工件库下载压缩包到代理机器
- 解压到路径
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5
- 之后再执行构建任务
虽然这个方法每次构建都要重复下载解压,但不用自建代理,也能满足特定Profile的需求。
内容的提问来源于stack exchange,提问作者Storm Muller
相关产品推荐
相关产品推荐

