需要一些帮助制作NuGet包。
我们有一个第三方C#managed dll(称之为' Managed.dll')以某种方式使用/引用/包装第三方x86和x64本机dll(将它们称为' Unmanaged.dll' )取决于运行时机器。
只要x86和x64文件夹位于同一目录中,Managed.dll就知道如何找到合适的Unmanaged.dll,如:
我可以制作一个类似的包:
打开包裹,我可以看到文件位于正确的位置,因此它们被包含在内。
我也可以手动"安装"通过将包放在packages目录中,将对Managed.dll的引用添加到csproj,然后预构建事件将已编译的目录和dll复制到项目构建时的适当位置,并且它们都运行等等。现在我们正在尝试使用NuGet使dll更容易分发。此外,如果我将包的一行添加到packages.config文件中,并删除packages文件夹,则会重新提取包,它仍然可以正常工作。
但是,如果我尝试使用NuGet Package Manager进行安装,它会试图找到Unmanaged.dll。 PM安装的输出是:
试图收集包裹的依赖性信息' MyPackage.3.0.0'关于项目' MyProject',定位' .NETFramework,Version = v4.5.2'
收集依赖信息需要3.51毫秒
试图解决包' MyPackage.3.0.0'的依赖关系与DependencyBehavior'最低'
解析依赖信息需要0毫秒
解决安装包' MyPackage.3.0.0'的操作
已解决的安装包' MyPackage.3.0.0'的操作
正在检索包' MyPackage3.0.0'来自' MySource'。
添加包' MyPackage.3.0.0'到文件夹' C:\ MyProject \ packages'
添加了包' MyPackage.3.0.0'到文件夹' C:\ MyProject \ packages'
安装失败。回滚...
套餐' MyPackage.3.0.0'在项目' MyProject'中不存在
删除包' MyPackage.3.0.0'来自文件夹' C:\ MyProject \ packages'
删除了包' MyPackage.3.0.0'来自文件夹' C:\ MyProject \ packages'
执行nuget动作需要895.64毫秒
安装包:无法添加对未管理的'。的引用
请确保该文件可以访问,并且它是有效的程序集或COM组件
在行:1 char:1
+ Install-Package MyPackage -source MySource
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo:未指定:(:) [Install-Package],例外
+ FullyQualifiedErrorId:NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
我尝试使用' Unmanaged.props'在包中添加构建目录。文件但发生相同的错误。我已经尝试过安装一个“Unmanaged.dll”'与' Managed.dll相同的级别'在包中。
所以,请告诉我为什么它找不到' Unmanaged.dll' (对于我自己的启发)以及我需要做些什么来正常工作(可能需要一些手握来引导我完成它)。我需要一个.targets吗?自定义install.ps1?
我使用VS2015和NuGet 3.5
是this still the case吗?如果是这样,有人可以解释如何让2个包一起玩吗?
This link似乎表示托管和非托管可以在同一个包中。
由于
答案 0 :(得分:0)
我刚遇到这个问题。我必须在.nuspec文件中添加references section,其中我只列出了我的托管dll' s。这似乎有助于VS放松,而不是尝试将ref添加到非托管dll。
答案 1 :(得分:0)
如果您要重建软件包并在另一个项目中测试安装, dbrunning's solution 是对的。 但是您必须在 Visual Studio 中清除 nuget 缓存,否则错误会不断发生,即使您将 nuget 推送到私有 nuget 服务器也是如此。
对于 Visual Studio 2019:
这个按钮不会删除解决方案中的“package”文件夹,以防万一女人想知道……我不知道这个按钮到底是做什么的。 如果到目前为止 nuget 包安装失败,则无论如何都不需要清除包文件夹。