【问题标题】:Can't upgrade or downgrade NuGet package无法升级或降级 NuGet 包
【发布时间】:2017-07-26 10:39:26
【问题描述】:

我有一个 ASP.NET Core 网站,它依赖于 2 个类库。

它们都引用了 Microsoft.NETCore,但版本以某种方式混淆并导致我收到警告:

检测到的包降级:Microsoft.NETCore.App 从 1.1.0 到 1.0.3

NuGet 不允许我更改 Microsoft.NetCore.App 的版本:

如果我尝试升级或降级,我会收到错误提示

由于项目或 packages.config 中的其他限制,以下版本不可用

我该如何解决这个错误?

我的 csproj 文件:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp1.0</TargetFramework>
    <PreserveCompilationContext>true</PreserveCompilationContext>
    <AssemblyName>AutomotiveWebPortalCore</AssemblyName>
    <OutputType>Exe</OutputType>
    <PackageId>AutomotiveWebPortalCore</PackageId>
    <UserSecretsId>aspnet-AutomotiveWebPortalCore-20170223120414</UserSecretsId>
    <RuntimeFrameworkVersion>1.0.3</RuntimeFrameworkVersion>
    <PackageTargetFallback>$(PackageTargetFallback);dotnet</PackageTargetFallback>
  </PropertyGroup>

  <ItemGroup>
    <Content Update="wwwroot\**\*;Views\**\*;Areas\**\Views;appsettings.json;web.config">
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </Content>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="AutoMapper" Version="5.2.0" />
    <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="1.2.0" />
    <PackageReference Include="DevExtreme.AspNet.Core" Version="16.2.4" />
    <PackageReference Include="DevExtreme.AspNet.Data" Version="1.2.4" />
    <PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="1.0.1" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.0.2" />
    <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.0.1" />
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="1.0.2" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.0.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="1.1.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.0.1" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.0.1" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.0.1" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.0.1" />
    <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.0.1" />
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink.Loader" Version="14.0.1" />
    <PackageReference Include="bootstrap" Version="3.3.7" />
    <PackageReference Include="HubSpot.Tether" Version="1.1.1" />
  </ItemGroup>

  <Target Name="PrepublishScript" BeforeTargets="PrepareForPublish">
  </Target>

  <ItemGroup>
    <DotNetCliToolReference Include="BundlerMinifier.Core" Version="2.2.301" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\AutomotiveDAL\AutomotiveDAL.csproj" />
    <ProjectReference Include="..\AutomotiveDTO\AutomotiveDTO.csproj" />
  </ItemGroup>

</Project>

编辑:

这里是我的类库的参考:

数据访问层:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp1.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="AutoMapper" Version="5.2.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="1.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.0-msbuild3-final" />
  </ItemGroup>

</Project>

数据传输对象:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp1.0</TargetFramework>
  </PropertyGroup>

</Project>

【问题讨论】:

  • 你能把所有的依赖都贴出来吗?
  • 我该怎么做?
  • @Smithy 您的项目是否使用project.json 或.csproj 来引用包?你能发布那个文件的内容吗?
  • @NateBarbettini 我已经添加了显示所有包引用的两个文件的内容
  • @Smithy 你的类库应该针对netstandard1.X,而不是netcoreapp1.0。尝试将TargetFramework 更改为netstandard1.3。

标签: asp.net-core nuget .net-core visual-studio-2017


【解决方案1】:

即使在全新的空 ASP.NET Core 项目中,似乎也会出现“以下版本由于其他限制而不可用”消息。我认为这是 NuGet GUI 的错误或功能。 (我使用的是 Visual Studio 2017 的最终发布版本)

您可以通过直接编辑 .csproj 文件来解决此问题:在解决方案资源管理器中右键单击项目并选择 Edit (projectname).csproj。

您可以在第一个 PropertyGroup 中提升 Microsoft.NETCore.App(和目标框架)的版本:

<PropertyGroup>
  <TargetFramework>netcoreapp1.1</TargetFramework>

  <!-- snip -->

  <RuntimeFrameworkVersion>1.1.0</RuntimeFrameworkVersion>

  <!-- snip -->
</PropertyGroup>

然后,关闭文件并重建项目。我使用您在问题中提到的所有(公共)依赖项对此进行了测试,没有发现任何包版本冲突。

【讨论】:

  • 你是明星伴侣! VS 仍然使用狡猾的工具!
  • 我直接编辑了 .csproj,这解决了关于降级的警告,我检查了我的其他类库,它们也指向 netcoreapp1.0。我已经编辑了答案以显示,这是好是坏?
  • 是 netcore2.0 中的有效标签吗?我问是因为 Intellisense 不知道。
  • @EoRaptor013 根据docs仍然有效,但通常不需要。
  • 而不是需要指定确切版本号的&lt;RuntimeFrameworkVersion&gt;x.y.z&lt;/RuntimeFrameworkVersion&gt;,您可以使用&lt;TargetLatestRuntimePatch&gt; true &lt;/TargetLatestRuntimePatch&gt; 看到这篇文章:stackoverflow.com/a/51404441/2803565
猜你喜欢
  • 2022-12-18
  • 2016-07-29
  • 2017-07-22
  • 2019-09-02
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多