NuGet包安装失败,出现未指定的错误

时间:2016-10-12 12:37:25

标签: c# c++ nuget

我创建了一个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 ...

1 个答案:

答案 0 :(得分:0)

尝试在您的.Net dll中嵌入C ++ dll,这样您就只能部署.Net dll。

Costura.Fody可以帮助你做到这一点。

谈论引用:你不应该添加对c ++ dll的引用。您的问题可能有原因。 阅读&#34;未指定&#34;以上几行:&#34;无法添加对&#39; MyLib&#39;。&#39;

的引用

在VS中获取.Net项目并尝试手动添加对C ++库的引用:它应该失败,这就是你的包装器的用途。

看看这几个元素,它应该会有所帮助。