我创建了一个NuGet包,其中包含一个C#(MyLibIF.dll)DLL,它是C ++ DLL(MyLib.dll)的包装器。它们必须彼此相邻地部署。
这是NuSpec:
<?xml version="1.0"?>
<package>
<metadata>
<id>MyLibIF.dll_x86</id>
<version>8.0.0.1</version>
<title>MyLib library for 32-bits</title>
<authors>J.Doe</authors>
<owners>Our Company</owners>
<licenseUrl>https://localhost/license.html</licenseUrl>
<projectUrl>https://localhost/GitWeb/MyLibIF.git</projectUrl>
<iconUrl>http://localhost/images/favicon.ico</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Library for some functionality and a type of integration</description>
<releaseNotes></releaseNotes>
<copyright>Copyright 2016</copyright>
<tags>MyLib MyLibIF 32-bits</tags>
</metadata>
<files>
<file src="bin\release\MyLibIF.dll" target="lib\net45"/>
<file src="..\MyLib\Release\MyLib.dll" target="lib\net45"/> <!-- It's not a .NET dll, but should be alongside MyLibIF.dll in deployment -->
</files>
</package>
这样构建包就好了。当我部署它时使用PowerShell获取额外信息我得到了这个: `
PM> install-package mylibif.dll_x86
Installing 'MyLibIF.dll_x86 8.0.0.1'.
Successfully installed 'MyLibIF.dll_x86 8.0.0.1'.
Adding 'MyLibIF.dll_x86 8.0.0.1' to ConsoleApplication1.
Uninstalling 'MyLibIF.dll_x86 8.0.0.1'.
Successfully uninstalled 'MyLibIF.dll_x86 8.0.0.1'.
Install failed. Rolling back...
install-package : Failed to add reference to 'MyLib'.
At line:1 char:1
+ install-package mylibif.dll_x86
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Install-Package], InvalidOperationException
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand
PM>
`
可怕的NotSpecified
,这对我来说绝对没有意义。
我认为MyLibIF.dll正在安装,但MyLib.dll(C ++)被拒绝了。我没有足够的NuGet知识来解决这个问题。
有谁知道这里发生了什么?
另外,当您不关心.NET框架的版本时,如何部署?
更新
我已经更新了nuspec以包含引用。
<references>
<reference file="MyLib.dll" />
<reference file="MyLibIF.dll" />
</references>
但它仍然失败并出现同样的错误。如果我为MyLib.dll
指定lib
的目标,我可以让它工作。忽略NuGet给出的警告,将包加载到以下文件夹结构中。
.\packages\MyLibIF.dll_x86.8.0.0.1\lib\MyLib.dll
.\packages\MyLibIF.dll_x86.8.0.0.1\lib\net45\MyLibIF.dll
因此有一些情报决定在net45内不允许MyLib.dll ...
答案 0 :(得分:0)
尝试在您的.Net dll中嵌入C ++ dll,这样您就只能部署.Net dll。
Costura.Fody可以帮助你做到这一点。
谈论引用:你不应该添加对c ++ dll的引用。您的问题可能有原因。 阅读&#34;未指定&#34;以上几行:&#34;无法添加对&#39; MyLib&#39;。&#39;
的引用在VS中获取.Net项目并尝试手动添加对C ++库的引用:它应该失败,这就是你的包装器的用途。
看看这几个元素,它应该会有所帮助。