我已经通过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?
答案 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;
的兄弟姐妹