无法安装包“--”。您正在尝试将此包安装到针对“.NETFramework, Version=v4.5”的项目中。

52

我创建了这个包,需要在项目中使用,但是安装时出现了以下错误:

无法安装' Mshwf.NiceLinq 1.0.9'。您正在尝试将此程序包安装到以 '.NETFramework,Version=v4.5' 为目标的项目中,但该程序包不包含任何与该框架兼容的程序集引用或内容文件。有关详细信息,请联系程序包作者。

我不知道为什么会发生这种情况,在另一个项目(Console)中,我将框架更改为4.6和其他版本,并没有出现问题,但是在这个项目(MVC和Web API)中却发生了问题:

这是nuspec文件:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>Mshwf.NiceLinq</id>
    <version>1.0.9</version>
    <title>Nice LINQ</title>
    <authors>MShawaf</authors>
    <owners>Mshawaf</owners>
    <projectUrl>https://github.com/mshwf/NiceLinq</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/mshwf/NiceLinq/master/logo.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>See it as: WHERE ID IN (1, 2, 3, 7, 9, 22, 30, 101)</description>
    <releaseNotes>Minor changes.</releaseNotes>
    <copyright>Copyright 2016</copyright>
    <tags>LINQ IEnumerable Where Contains Search Filter</tags>
  </metadata>
</package>
13个回答

37

前往文件夹:

C:\Users\[username]\.nuget\packages\[package name]\1.0.0.4\lib
将项目的文件夹重新命名为与 .net 版本对应的名称。 假设我使用的是 .net framework 4.6.1,我的文件夹名称应该是 net461

这种方法有什么缺点? - Parsa_Gholipour
1
这个解决方案是目前为止唯一适用于我绕过Microsoft.ServiceHub.Analyzers包无法安装在项目或使用此包作为依赖项的任何包的工作方法!只需添加相应的目标版本(对我来说是lib\net472),然后将根“未定位”的文件夹复制到这个新文件夹中,一切都像魔术般地运行,即使是需要此作为依赖项的包,如Microsoft.VisualStudio.Shell.15.0。感谢这个技巧! - Guillaume ZAHRA
那对我来说似乎是一个获胜的解决方案,谢谢你。 - evry1falls
它是有效的,但是重命名这些文件夹可能会导致软件包解析和兼容性方面的问题。因此,在安装完成后,最好将其重新命名回原始名称。 - undefined

36

您的包目标是NETFramework,版本为v4.5.2。这意味着程序集文件夹为lib\net452。 您正在尝试将该软件包安装到更高版本(大于4.5)的项目中。创建一个框架为4.5.2的项目或将软件包的lib文件夹从net452重命名为您想要定位的版本,如net45或net46。

您也可以从单个软件包中同时定位多个框架。

请像这样编辑您的csproj文件:

<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>

参见: https://learn.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks

有关目标框架名称的完整、最新列表,请参见https://learn.microsoft.com/en-us/nuget/reference/target-frameworks#supported-frameworks


Mshwf.NiceLinq 1.0.9软件包针对.NET 4.5.2,因此无法安装到.NET 4.5项目中。因此,他们需要创建一个.NET 4.5.2项目。但是你的答案几乎正确。我修改了你的答案以使其正确 - 希望你不介意。 - Matt Ward

6
您可以安装早期版本,例如:Install-Package AutoMapper -Version 7.0.1。

3

.NET目标框架版本很可能太旧了。我使用的是VS 2017,新建.NET Framework项目的默认目标框架是4.0。我最初尝试安装RestSharp包,但是它失败了,出现了与此帖子中几乎相同的错误消息“无法安装包...”。然而,当我去到项目|属性|应用程序时,我能够将目标框架更改为.NET Framework 4.6.1,然后它就安装成功了。


2
在我的情况下,我试图将该软件包安装到WPF App (.Net Framework)中,而我的同事则为.Net Core项目准备了该软件包。
尝试创建一个.Net Core项目(或目标项目类型),并以相同的方式安装软件包:
解决方案资源管理器>右键单击解决方案>管理解决方案的Nuget包>搜索所需软件包>安装
在尝试其他解决方案之前检查此项可能会节省时间。

0

我曾经遇到类似的问题,通过删除 packages.config 文件(如果您不想删除,可以编辑该文件)并确保我使用的包是使用与我使用它的项目相同的 .net 版本构建的(对我来说,该包是使用 4.6 构建的,而我的控制台项目则针对较早版本的 .net)。


0

更新应用程序的.NET目标框架可以解决问题。在我的情况下,我正在安装EmguCv 4.2包。当尝试使用4.5.1 .NET目标框架构建时,我遇到了相同的错误。将.NET目标框架更新为4.6.2后,我可以成功安装EmguCv 4.2 Nuget包。


0

从 "C:\ Users \ [用户名] \ .nuget \ packages \ [软件包名称]\1.0.0.4\lib" 检查支持的版本。 前往项目 > 右键单击选择属性 > 应用程序 > 目标框架 将目标框架更改为支持的版本

在我的情况下,库的受支持版本是 net462。


0
在我的情况下,我试图插入我们自己制作并放入我们自己的Nuget feed中的一个包,因此我可以访问该项目。这是我为解决问题所做的。在项目解决方案窗口中,单击packages.config。在属性窗口中,将构建操作更改为“内容”。再次推送到我们的feed后,我就能够将其安装到主项目中了。

0
在我的情况下,我尝试在我的项目中安装Itext7包,我的.NET框架是4.5。我通过以下步骤将我的项目.NET框架更改为.NET 4.6.1,然后成功安装了该包:
1- 右键单击项目,选择属性 2- 在应用程序选项卡下,将目标框架更改为您的包所需的框架

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接