VS2017与MsBuild下Xamarin Mac Agent自定义端口连接NAT Mac问题
当然可以配置VS和MsBuild使用自定义端口连接外网的Mac,针对你遇到的两种场景(Visual Studio 2017和MsBuild命令行),分别有不同的解决方法:
一、Visual Studio 2017 配置步骤
你遇到的指纹匹配问题,是因为VS缓存了路由器22端口的SSH指纹,而且默认可能没有正确识别你指定的自定义端口。可以按以下步骤修复:
清除旧的指纹缓存
关闭Visual Studio,删除%LOCALAPPDATA%\Xamarin\MonoTouch\known_hosts文件——这个文件保存了所有曾连接过的SSH主机指纹,删除后VS会重新请求新的指纹验证。手动修改Mac连接配置
同样在关闭VS的状态下,打开%LOCALAPPDATA%\Xamarin\MonoTouch\devices.json文件,添加或修改你的Mac设备条目,明确指定端口:{ "Id": "external-mac-1", "Name": "外网Mac设备", "Address": "1.1.1.1", "Port": 6535, "Username": "user", "LastConnection": "2024-05-20T12:00:00" }保存文件后重新打开VS,在Mac Agent的设备列表里选择这个新增的设备,尝试连接——此时VS应该会通过6535端口连接,并提示你验证Mac的SSH指纹,确认即可。
二、MsBuild 命令行配置步骤
你看到的Ignoring server port when the build is not running inside Visual Studio警告是Xamarin的默认行为:非VS环境下,MsBuild不会直接使用ServerPort参数。这时候可以通过SSH配置文件来绕开这个限制:
创建SSH配置文件
在Windows用户目录(C:\Users\你的用户名\.ssh\)下创建一个名为config的无扩展名文件,添加以下内容:Host external-mac HostName 1.1.1.1 Port 6535 User user这里的
external-mac是你自定义的主机别名,后续可以用它代替完整的IP和端口。修改MsBuild命令
将原来的ServerAddress替换为这个别名,去掉ServerPort参数,修改后的命令如下:msbuild mySolution.sln /t:Clean;Build /p:Configuration="Release";IpaPackageDir=C:\t\;Platform=iPhone;ServerAddress=external-mac;ServerUser=user;ServerPassword=password执行这个命令时,MsBuild会通过SSH配置里指定的6535端口连接Mac,而不是默认的22端口。
提前验证SSH连接
先在命令行执行ssh external-mac,确保能正常连接到Mac并通过验证(输入密码或使用密钥),再运行MsBuild命令,避免因SSH连接问题导致构建失败。
额外注意事项
- 确认路由器的NAT映射规则正确:公网IP的6535端口必须准确转发到Mac本地的22端口,且Mac的防火墙允许22端口的入站SSH请求。
- 如果你的Mac使用SSH密钥登录,可以在SSH配置文件中添加
IdentityFile C:\路径\到\你的密钥文件,这样MsBuild构建时无需输入密码,更安全高效。
内容的提问来源于stack exchange,提问作者Anton Kuryan




