【问题标题】:How to use a native NuGet package from a managed project?如何使用托管项目中的本机 NuGet 包?
【发布时间】:2015-05-06 16:12:39
【问题描述】:

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

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

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

无法安装软件包“foo.redist 1.0.0”。你正试图 将此包安装到目标项目中 '.NETFramework,Version=v4.5.1',但包中不包含任何 与之兼容的程序集引用或内容文件 框架。如需更多信息,请联系包作者。

目前我在 autopkg 文件中只有这些“枢轴”:

[Win32,dynamic,release] {
    bin: release\foo.dll;
}
[Win32,dynamic,debug] {
    bin: debug\foo.dll;
}

...我需要添加其他内容吗?

【问题讨论】:

  • 你用 CoApp 解决过这个问题吗?

标签: nuget nuget-package


【解决方案1】:

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

在 nuspec 文件中,我使用 <files> 元素列出我的原生 dll。

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

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

步骤:

  • 在包含您的 vcxproj 的文件夹中运行 nuget spec
  • 创建一个.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>

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2013-09-12
    • 1970-01-01
    • 2017-02-27
    • 2019-12-15
    • 2011-11-21
    • 2017-04-25
    相关资源
    最近更新 更多