带有多个DLL的nuget包

时间:2016-06-17 10:10:53

标签: reference nuget nuget-package

我已经通过Nuget Package Explorer创建了一个nuget包,其中包含以下内容。

lib
   -- CPPLib.dll
   -- DotNetWrapper.dll

CPPLib.dll是具有逻辑实现的主库(在本机C ++中),而DotNetWrapper.dll是将在C#项目中引用的包装器。

当我尝试安装此nuget包时,出现以下错误

    Install failed. Rolling back...
    Install-Package : Failed to add reference to 'CPPLib.dll'.
    At line:1 char:16
    + install-package <<<<  -id MyPackage
    + CategoryInfo          : NotSpecified: (:) [Install-Package], InvalidOperationException
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand

我知道包中的“lib”文件夹中的所有内容都将作为参考安装,这解释了为什么原生CPPLib.dll无法安装到C#项目中。

然后我尝试将CPPLib.dll移动到包中的“content”文件夹中,如下所示

   content
       -- CPPLib.dll
   lib
       -- DotNetWrapper.dll

然后可以安装包,但是项目不会构建,因为DotNetWrapper.dll在同一个文件夹中找不到CPPLib.dll。

如何解决这个问题?是否有可能以某种方式将所有内容放入lib文件夹并仅从包中“暴露”DotNetWrapper.dll?

1 个答案:

答案 0 :(得分:0)

您需要使用nuspec文件中的文件和引用:

<?xml version="1.0"?>
<package  xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
    <metadata>
        ...
        <references>
            <reference file="DotNetWrapper.dll" />
        </references>  
    </metadata>
    <files>
        <file src="bin\Release\DotNetWrapper.dll" target="lib" />
        <file src="bin\Release\CPPLib.dll" target="lib" />
    </files>
</package>

所以你定义文件放在你的包中用&#34;文件&#34;,然后告诉nuget你唯一的add是对包装DLL的引用&#34;引用&#34;。

请注意这些标签位于不同的级别 - &#34;参考&#34;必须在&#34;元数据&#34;,但&#34;文件&#34;是#34;元数据&#34;

的兄弟姐妹