迁移Xamarin原生绑定库到net6-macos时遭遇MM0140错误
迁移Xamarin.Mac原生绑定库到net6-macos时遇到链接器错误
我有一个基于旧版Xamarin.Mac(Xamarin.Full .NET Framework 4.8)、由Mono构建的原生绑定库,绑定的是ScriptingBridge.framework(非静态库),可正常构建运行。
迁移操作步骤
- 将主应用项目转换为SDK风格,目标框架设为net6-macos,移除绑定依赖后可正常构建;
- 将绑定库项目转换为SDK风格,针对编译错误做了以下修复:
- 修改版本号,避免使用通配符;
- 用
AssemblyMetadata("IsTrimmable", "True")替换[assembly: LinkerSafe]; - 添加对目标框架的
NativeReference。
绑定库项目最终csproj内容
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6-macos</TargetFramework> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> <RootNamespace>NativeBindingsLib</RootNamespace> <AssemblyName>NativeBindingsLib</AssemblyName> <IsPackable>false</IsPackable> <AllowUnsafeBlocks>false</AllowUnsafeBlocks> <IsBindingProject>true</IsBindingProject> <NoBindingEmbedding>true</NoBindingEmbedding> </PropertyGroup> <ItemGroup> <ObjcBindingApiDefinition Include="ApiDefinition.cs" /> <ObjcBindingCoreSource Include="StructsAndEnums.cs" /> <NativeReference Include="/System/Library/Frameworks/ScriptingBridge.framework" Kind="Framework" /> </ItemGroup> </Project>
错误信息
单独使用dotnet build构建绑定库无错误,但构建引用该绑定库的应用项目时,出现以下链接器错误:
ILLINK: Error MM0140: File '/Users/user/work/MonoBindingTest/net6/app/obj/Debug/net6.0-macos/osx-x64/linker-cache/NativeBindingsLib.resources/ScriptingBridge.framework/ScriptingBridge' is not a valid framework. (MM0140) (app) ILLINK: Error MM2342: The linker step 'Extract Binding Libraries' failed during processing: File '/Users/user/work/MonoBindingTest/net6/app/obj/Debug/net6.0-macos/osx-x64/linker-cache/NativeBindingsLib.resources/ScriptingBridge.framework/ScriptingBridge' is not a valid framework. (MM2342) (app)
我已确认框架路径正确,也尝试将ScriptingBridge.framework加入XCode项目验证路径一致,希望能获取基于net6-macos的框架类原生绑定库工作示例用于自行测试。
内容的提问来源于stack exchange,提问作者Serg
相关产品推荐
相关产品推荐

