[英]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.