gpt4 book ai didi

nuget - 如何使用托管项目中的 native NuGet 包?

转载 作者:行者123 更新时间:2023-12-05 01:37:25 27 4
gpt4 key购买 nike

我有一个托管项目,它通过 P/Invoke 使用 C 风格的 native DLL。

打包 native DLL 以便将其作为 NuGet 包添加到托管项目并将 DLL 自动复制到输出文件夹的正确方法是什么?

我目前使用 CoApp 为 native DLL 创建了一个包,但我无法从托管项目中使用它;尝试添加包时出现以下错误:

Could not install package 'foo.redist 1.0.0'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.5.1', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.



目前我在 autopkg 文件中只有这些“枢轴”:
[Win32,dynamic,release] {
bin: release\foo.dll;
}
[Win32,dynamic,debug] {
bin: debug\foo.dll;
}

...我需要添加其他东西吗?

最佳答案

我处于类似的情况。我选择不对这个项目使用 CoApp,而是创建一个新的 nuspec/.targets 文件组合。

在 nuspec 文件中,我使用了 <files>元素来列出我的 native dll。

在 .targets 文件中,您可以访问 msbuild Condition 属性,该属性允许基本配置透视。在我们的例子中,我们总是部署 64 位二进制文​​件,因此不需要 Platform pivot,但如果需要,您也可以添加它。

我在运行 nuget pack 时收到警告,因为二进制文件不在 lib 内,但否则它可以正常工作。

脚步:

  • 运行 nuget spec在包含您的 vcxproj 的文件夹中
  • 创建 .build文件夹,在该文件夹中创建一个空 mydll.targets文件(匹配 nuspec 文件名)
  • 类似于下面的示例手动填充文件;

  • 示例 mydll.nuspec:
    <?xml version="1.0" encoding="utf-8"?>
    <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
    ...your metadata here
    </metadata>
    <files>
    <file src="x64\Release\my.dll" target="x64\Release\my.dll" />
    <file src="x64\Debug\my.dll" target="x64\Debug\my.dll" />
    </files>
    </package>

    示例 mydll.targets:
    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
    <None Include="$(MSBuildThisFileDirectory)\..\x64\Release\my.dll" Condition="'$(Configuration)'=='Release'">
    <Link>my.dll</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="$(MSBuildThisFileDirectory)\..\x64\Debug\my.dll" Condition="'$(Configuration)'=='Debug'">
    <Link>my.dll</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    </ItemGroup>
    </Project>

    关于nuget - 如何使用托管项目中的 native NuGet 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28875363/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com