如何使用nuget .targets文件将许多dylib(保留目录结构)捆绑在macOS .app可执行文件中?

时间:2018-06-11 04:16:08

标签: xamarin nuget dllimport dylib xamarin.mac

我目前正在尝试将~350个原生C dylib打包到单个nuget for macOS中。 .targets文件应该在最终的mac .app中捆绑dylib,同时保持这些dylib的特定文件夹架构。

如果相关,那么大多数dylib都是Mach-0 64-bit bundle x86_64,这就是为什么我认为NativeReference不起作用的原因。这是正确的假设吗?

我需要使用C#for P / Invoke加载Objc运行时的几个Mach-0 64-bit dynamically linked shared library x86_64(它们将处理捆绑的那些,并期望它们位于特定的相对位置)。

我的尝试在https://github.com/mfkl/libvlc-nuget/pull/5/files。您可以随意忽略MSBuild插件cherry-picking work

我无法让所有的dylib成为里面的<。em> mac .app包并在那里创建文件夹。

编辑:添加更多信息。

尝试NativeReferenceContentEmbeddedResourceBundleResource。这些文件要么不被包含在内,要么最终放在.app捆绑包旁边的bin/debug中,如果我错了,那么这个文件就更正了,这不是您在发送图书馆时想要的。不确定使用什么或路径是否错误,但VS中的MSBuild反馈似乎不存在。

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:0)

在不调试构建的情况下,很难分辨(因为我没有看到构建日志),但是我敢打赌,您将NativeReference项目添加到项目中太晚了,以至于mmp都看不到它们。 / p>

从理论上讲,可以动态生成项目NativeReference供Xamarin.Mac项目处理,但是需要在之前 this.clearForces = function(force) { ball.xVelocity = 0; //ball.yVelocity = 0; } 进行,我们在此处处理这些项目。我不确定,它甚至可能需要在<ConstraintLayout> <Other TextView> </Other TextView> <ListView> </ListView> </ConstraintLayout> 之前发生。

但是,是的,通常,您希望使用NativeReference将您的项目添加到最终捆绑包中。根据您的库,可能必须添加install_name_tool游戏来修复相对的依赖路径。 MMP(打包工具)知道如何使用NativeReference来处理其中的一些问题。

如果需要进行构建后调整,则可以使用MSBuild示例(CreateAppBundleDependsOn)中显示的路由。 https://github.com/xamarin/mac-samples/blob/master/UseMSBuildToCopyFilesToBundleExample/UseMSBuildToCopyFilesToBundleExample/CustomBuildActions.targets