我正在尝试构建一个本机 nuget 包,它提供了调用约定的支点,为 x86 构建提供了具有 cdecl 和 stdcall 约定的 DLL。 (大多数用户更喜欢 cdecl 调用约定,但 P/Invoke 这个库的 .NET 用户出于各种原因更喜欢 stdcall。)
My .autopkg
包含 cdecl 和 stdcall 枢轴:
nuget
{
[nuspec omitted for brevity]
files {
[Win32,cdecl] {
lib: build\x86-cdecl\Debug\git2-0_21_0.lib;
bin: build\x86-cdecl\Debug\git2-0_21_0.dll;
symbols: build\x86-cdecl\Debug\git2-0_21_0.pdb;
}
[Win32,stdcall] {
lib: build\x86-stdcall\Debug\git2-0_21_0.lib;
bin: build\x86-stdcall\Debug\git2-0_21_0.dll;
symbols: build\x86-stdcall\Debug\git2-0_21_0.pdb;
}
};
}
建设.nupkg
使用本机 nuget 脚本似乎会成功,并且在标准 C 项目(具有 cdecl 调用约定的项目)中安装和使用 nuget 包也会成功。
但是,如果我创建一个新的 C 项目并将调用约定设置为 stdcall 并安装 nuget 包,则我不会获得库的 stdcall 版本。相反,安装了 cdecl 版本,但我无法链接。
我很乐观地认为 nuget 包管理器会检测我的项目的配置并使用适当的调用约定枢轴(就像它对处理器类型所做的那样),但这似乎并没有发生。我也没有提供手动选择调用约定的选项。然而事实是有isautopkg 配置中的一个枢轴让我认为我could选择一个。
我如何利用这个支点?
据我所知,这是完全不可能的。可悲的是,同样不可能获得帮助。
遗憾的是,Native Nuget 是一个几乎没有经过测试、几乎无法操作且完全不受支持的错失机会的荒地。唯一的答案就是根本不使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)