在TeamCity Linux代理上构建F# Xamarin项目:无法导入指定targets文件
这个错误其实很典型——MonoDevelop作为IDE确实支持Xamarin的F#绑定,但IDE层面的交互支持和无头构建环境(比如TeamCity代理)所需的SDK组件是完全分开的。你需要在代理上补充安装几个关键组件,才能让MSBuild找到缺失的目标文件:
安装完整的Xamarin Android SDK
MonoDevelop默认可能只安装了基础IDE组件,而构建F# Android项目必需的Xamarin.Android.FSharp.targets属于Xamarin Android SDK的核心扩展部分。在Linux代理上,你可以通过Mono官方包源安装xamarin-android包(不同发行版包名略有差异,比如Ubuntu上可执行apt-get install xamarin-android)。这个包会自动将F#相关的MSBuild目标文件部署到$(MSBuildExtensionsPath)\Xamarin\Android目录下。指定正确的MSBuild版本
TeamCity代理可能默认调用系统自带的简化版MSBuild,而非Mono附带的完整版本。你需要在TeamCity的构建配置中,将MSBuild路径指定为Mono安装目录下的版本,比如/usr/lib/mono/msbuild/Current/bin/MSBuild。这个版本的MSBuild会自动识别Xamarin Android的扩展组件路径。验证F# SDK的兼容性
确保代理上安装了最新的F# SDK包(比如fsharp或mono-fsharp),旧版本的F# SDK可能和Xamarin Android的目标文件存在兼容性问题。安装完成后,你可以手动检查$(MSBuildExtensionsPath)\Xamarin\Android目录下是否存在Xamarin.Android.FSharp.targets文件,确认组件安装到位。
如果以上步骤完成后仍然报错,可以尝试在项目根目录执行msbuild /t:Restore命令,确保所有NuGet依赖(包括Xamarin相关的F#绑定包)都已正确恢复——部分较新的项目可能需要通过NuGet补充构建依赖。
内容的提问来源于stack exchange,提问作者Rob Lyndon

