簡體   English   中英

NuGet包安裝失敗,出現未指定的錯誤

[英]NuGet package installation fails with unspecified error

我創建了一個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 ...

嘗試在您的.Net dll中嵌入C ++ DLL,這樣您只需要部署.Net dll。

Costura.Fody可以幫助你做到這一點。

談論引用:您不必添加對c ++ dll的引用。 您的問題可能有原因。 閱讀“未指定”上方的幾行:“無法添加對'MyLib'的引用。”

在VS中獲取.Net項目並嘗試手動添加對C ++庫的引用:它應該失敗,這就是你的包裝器的用途。

看看這幾個元素,它應該有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM