Visual Studio 2017无法更新Microsoft.NETCore.App程序包(“被项目阻止”)


82

我有一个针对Microsoft.NETCore.App 1.1.2的dotnet核心应用程序。我创建了一个测试项目以对该项目进行测试,但是在构建时我注意到了以下警告: 在此处输入图片说明

我打开NuGet软件包管理器,看到警告是正确的,正在测试的项目具有不同版本的Microsoft.NETCore.App: 在此处输入图片说明 在此处输入图片说明

我的问题是Visual Studio不允许我更新该版本,所以我对如何解决此问题感到困惑: 在此处输入图片说明 理想情况下,我只是单击下拉列表并选择正确的版本,但是Visual Studio声称由于“项目或packages.config中的其他约束”。我应该如何更新该软件包?Visual Studio指的是什么“附加约束”?


看起来测试项目正在阻止降级。您是否尝试右键单击该解决方案并选择管理该解决方案的nuget程序包,然后将所有项目同时移至不同版本?
肯·塔克

我没有想到这一点,但我只是尝试了一下,却收到了同样的“被项目阻止”错误。另外,另一个项目也被禁止从1.1.2迁移。我还安装了VS的最新更新,但没有帮助。
riqitang


我已经收集了在此问题/答案中找到的所有信息:stackoverflow.com/questions/52518059/…因为此问题似乎确实是一个问题。对于我的情况,这里的答案并不完整
Joshit

当我在解决方案中的不同项目中错误地针对不同版本的.net核心框架时,发生了相同的错误。确保每个目标的项目属性都具有相同的版本。
obaylis '19

Answers:


51

EDIT 2018:如果您真的知道自己在做什么,请仅按照说明更新软件包。在大多数情况下,您无需手动更新此程序包或其他标记为“被项目阻止”的程序包。依赖于框架的应用程序将使用可用的最新运行时,而独立的应用程序将自动使用此程序包的较新版本执行额外的构建。(在某些情况下,您需要在测试项目中升级此软件包。在这种情况下,请添加<TargetLatestRuntimePatch>true</…>查看此问答以了解其他选项)

隐式包引用Microsoft.NET.Sdk推断不能通过NuGet更新。

如果从project.json迁移,则具有1.1.0引用的项目可能包含

<RuntimeFrameworkVersion>1.1.0</RuntimeFrameworkVersion>

在csproj文件或类似这样的项目中(如果您以前可能使用过程序包管理器来设置版本):

<PackageReference Update="Microsoft.NETCore.App" Version="1.1.0" />

删除上述条目,所有包将自动引用1.1.2(或安装的SDK认为最新的包)。替代地,RuntimeFrameworkVersion在所有项目中设置。


2
您说对了:我打开了.csproj文件并删除了该<RuntimeFrameworkVersion>1.1.0</RuntimeFrameworkVersion>行。VS仍然不允许我手动更改版本,但至少现在它是正确的版本(如您所说的那样已更新为1.1.2)
riqitang

48

我在尝试在.NET Core 2 Web应用程序中安装Entityframework.Core包时遇到类似的问题。为了解决该问题,我已通过软件包管理器控制台强制安装:

Install-Package Microsoft.NETCore.App -Version 2.0.5

(2.0.5是当时的最新版本)

我希望它有用。和平。


7
这有助于我升级到2.1.1->很好的答案,找不到所有我能找到的文章。
保罗

这最终也对我有用。在VS2017的pmc中为每个项目调用此命令后,我从v2.1.0升级到v2.1.3
Paul Meems

1
安装软件包Microsoft.NETCore.App
Dorathoto

5
为什么它完全被项目“阻止”?这是某种错误还是有充分的理由?如果有充分的理由,也许执行上述操作不是一个好主意?还是可以解决上述问题?
niico

感谢您的提示。因此,“被项目阻止”原来是“被VS NuGet GUI阻止”。
格林

19

对我来说

<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>

做到了

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
</PropertyGroup>

因此,这将针对当前计算机上框架的最新版本。如果对本地计算机打了补丁,然后主机服务器就不会出现问题?
jonmeyer

我实际上不知道,因为我们正在进行独立的部署。但是我想像一个大胆的猜测,因为它说的是“最新”,没有特定的版本,即使不存在它也不会使用。@jonmeyer
gsharp

我的解决方案中安装了不同的版本。我编辑了所有这些内容以添加此行。将它们带到相同的版本,然后再次删除该行。但是,当我管理解决方案的nuget软件包时,我仍然收到消息被项目阻止的消息。
萨姆

@sam您是否也尝试了其他解决方案?看来30票以上的两个答案也对某些人有用。
gsharp

是的 是的 我想做的是在UI中使用“管理解决方案的nuget程序包”选项,然后单击鼠标进行安装/卸载。不必手动编辑csproj文件。而且我还不能使用UI来做到这一点。您的方式和其他选项有效,但UI不起作用。
SAM

7

简短答案

Microsoft.AspNetCore.App在您的.csproj文件中的软件包引用中添加显式版本。

长答案

我有一个全新的netcoreapp2.1项目。以下是.csproj文件中的文件。请注意,没有与Microsoft.AspNetCore.App软件包参考相关联的版本。

<ItemGroup>
  ...
  <PackageReference Include="Microsoft.AspNetCore.App" />
  ...
</ItemGroup>

我添加了对该Microsoft.Extensions.Logging.Abstractions程序包的显式引用,以解决依赖项不匹配(构建错误)的问题。Micorsoft.AspNetCore.App需要此依赖项的2.1.0版本,但另一个软件包则需要版本2.1.1。我的.csproj文件现在看起来像这样。

<ItemGroup>
  ...
  <PackageReference Include="Microsoft.AspNetCore.App" />
  <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.1.1" />
  ...
</ItemGroup>

这样就将生成错误减少为警告,提示您Micorsoft.AspNetCore.App需要Microsoft.Extensions.Logging.Abstractions软件包的2.1.0版本,但是当然可以解决版本2.1.1。

Micorsoft.AspNetCore.App如OP所述,程序包管理器阻止了尝试更新至2.1.1版以修复警告的问题。

我更新了Micorsoft.AspNetCore.App程序包参考,以明确使用2.1.1版。

<ItemGroup>
  ...
  <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" />
  <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.1.1" />
  ...
</ItemGroup>

这修复了构建警告,并取消了Microsoft.AspNetCore.AppPackage Manager中所有版本的阻止。我什至可以删除显式引用,Microsoft.Extensions.Logging.Abstractions而无需重新引入原始错误。最终的.csproj看起来没有问题。

<ItemGroup>
  ...
  <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" />
  ...
</ItemGroup>

3

我遇到了同样的问题,我认为问题出在包装上。

<PackageReference Include="Microsoft.AspNetCore.App" />

我完全指定了版本后,问题已解决。

<PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.0" />

据我所知,当版本号出现该错误


2

另一个可能的解决方案。在csproj文件中,将目标框架更新为要升级到的版本。进行更改后,按照以下代码片段,可以通过解决方案NuGet软件包管理器升级软件包。

之前:

<PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>

后:

<PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>

0

我通过简单地解决了它:右键单击Project(或ALT + Enter)-> Properties-> Application-> Target Framework(选择.NET Core框架(在本例中为1.1))


0

最好的建议是,在升级SDK和运行时间后,重新创建项目,然后将旧代码和配置放入新项目中。除此之外,您将在无用的调整和未知的配置上花费太多时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.