尝试将非.NET库添加到NuGet包

时间:2015-05-13 07:44:35

标签: c# visual-studio nuget

我有一个使用非.NET DLL的.NET DLL。我试图用这个创建一个NuGet包,但我似乎没有透过它背后的魔力。我阅读了关于<files><references>的NuGet参考,但这对我来说并不合适 - VS继续拒绝安装软件包,理由是“......无法添加引用NonNETLib1" 。我尝试了一个不同的变体,其中非.NET库与net40文件夹中的.NET库以及没有<files>部分的nusepc文件捆绑在一起,但在这种情况下即使安装了包,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

我在这里缺少什么?

P.S。我知道这有点类似to this question,但是接受的答案并没有多大帮助。

3 个答案:

答案 0 :(得分:2)

  

即使程序包安装好了,代码在运行时抛出异常,因为它找不到DLL

在项目中添加对.Net DLL的引用时,它会自动复制到输出文件夹。但由于您的DLL不是.Net,因此您无法直接在项目中添加对它的引用,因此根本不会复制它。

我会在你的项目中添加一个预构建或后构建步骤,比如xcopy /y /f "$(ProjectDir)..\packages\NonNet.dll" "$(TargetDir)",但我怀疑有更好更清洁的方法。

在任何情况下,它都不是与nuget相关的问题,而是更常见的Visual Studio项目问题。

更新

似乎共识是将原生DLL添加为项目的现有项目(作为链接),如果更新则将其设置为内容/副本:Are there any better ways to copy a native dll to the bin folder?

答案 1 :(得分:0)

有一个基于PowerShell的工具集,用于打包NuGet使用的本机代码。它主要处理有关集成到本机项目的问题,但它应该提供将本机dll插入.NET项目所需的工具。

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

答案 2 :(得分:0)

我有完全相同的问题,我用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>