试图non-.NET库添加到NuGet包(Trying to add non-.NET librar

2019-09-28 04:45发布

我有一个使用non-.NET的DLL一个.NET的DLL。 我试图创建一个NuGet包出来的,但我似乎并没有被穿透这背后的魔力。 我读到有关的参考的NuGet <files><references>但是这并没有真正制定出适合我- VS保持在拒绝对” ......无法添加引用NonNETLib1"为由安装软件包。 我尝试了不同的变种,其中non-.NET库都与.NET库捆绑在一起net40文件夹,并没有在nusepc文件<files>部分,但即使安装OK包这种情况下,代码抛出异常的运行时,因为它无法找到的DLL。

这里的.nuspec我有:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>PackageName</id>
    <version>1.0.3</version>
    <authors>me</authors>
    <owners>some guys</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>description</description>
    <references>
        <reference file="NonNETLib1.dll" />
        <reference file="NonNETLib2.dll" />
        <reference file="NonNETLib3.dll" />
    </references>
  </metadata>
    <files>
        <file src="lib\NonNETLib1.dll" />
        <file src="lib\NonNETLib2.dll" />
        <file src="lib\NonNETLib3.dll" />
    </files>
</package>

文件夹结构如下:

[lib]
  \- NonNETLib1.dll
  \- NonNETLib2.dll
  \- NonNETLib3.dll
  \- [net40]
        \- Net40Lib.dll

我缺少的是在这里吗?

PS我知道这有点类似这个问题 ,但接受的答案给它没有太大的帮助。

Answer 1:

即使软件包安装好,代码在运行时抛出一个异常,因为它无法找到的DLL

当您在您的项目添加到净DLL的引用,它会自动复制到输出文件夹。 但由于你的DLL不净,你不能对它的引用,直接在项目中添加,所以它不会复制的。

我想补充的预编译或生成后步骤在您的项目,如xcopy /y /f "$(ProjectDir)..\packages\NonNet.dll" "$(TargetDir)" ,但我怀疑有一个更好,更清洁的方式来做到这一点。

在任何情况下,它不是一个的NuGet相关的问题,但更普遍的Visual Studio项目的问题。


更新

它似乎是共识是将它添加本机DLL作为现有项目(如链接)到项目,设置内容/复制如果更新: 有没有更好的方法来本地的dll复制到bin文件夹?



Answer 2:

有用于包装原生代码的NuGet消费基于PowerShell的工具集。 它主要与问题涉及周围融入本地项目,但它应该提供您需要本机DLL插入.NET项目,以及模具。

http://coapp.org/news/2013-04-26-Announcing-CoApp-Tools-For-NuGet.html



Answer 3:

我有完全一样的问题,我发现了一个很好的解决方案,我用的NuGet 3.3。 只有这样,.NET的LIB将参考项目和non-.Net LIB只复制到bin文件夹。

<references>
   <reference file="Net.dll">
<references>

<files>
   <file src="..\bin\NonNet.dll" target="lib/452">
   <file src="..\bin\Net.dll" target="lib/452">
<files>


文章来源: Trying to add non-.NET libraries to NuGet package