升级.NET Core应用到1.1时出现错误

3
所以,我有一个正常运行的ASP.NET Core 1.0应用程序,目标是net461框架。今天我尝试将其升级到新的ASP.NET Core 1.1(根据此页面上的说明,您只需要进行Nuget包升级)。这导致了一系列以下错误:
error: Unable to resolve 'Microsoft.AspNetCore.Diagnostics.Abstractions (>= 1.1.0)' for '.NETFramework,Version=v4.6.1'.
error: Unable to resolve 'Microsoft.AspNetCore.Hosting.Abstractions (>= 1.1.0)' for '.NETFramework,Version=v4.6.1'.
error: Unable to resolve 'Microsoft.AspNetCore.Http.Extensions (>= 1.1.0)' for '.NETFramework,Version=v4.6.1'.
error: Unable to resolve 'Microsoft.AspNetCore.WebUtilities (>= 1.1.0)' for '.NETFramework,Version=v4.6.1'.
error: Unable to resolve 'Microsoft.Extensions.FileProviders.Physical (>= 1.1.0)' for '.NETFramework,Version=v4.6.1'.
error: Unable to resolve 'Microsoft.Extensions.Logging.Abstractions (>= 1.1.0)' for '.NETFramework,Version=v4.6.1'.
error: Unable to resolve 'Microsoft.Extensions.Options (>= 1.1.0)' for '.NETFramework,Version=v4.6.1'.
error: Unable to resolve 'System.Diagnostics.DiagnosticSource (>= 4.3.0)' for '.NETFramework,Version=v4.6.1'.
error: Unable to resolve 'System.Reflection.Metadata (>= 1.4.1)' for '.NETFramework,Version=v4.6.1'.
error: Unable to resolve 'Microsoft.AspNetCore.Mvc.ApiExplorer (>= 1.1.0)' for '.NETFramework,Version=v4.6.1'.
error: Unable to resolve 'Microsoft.AspNetCore.Mvc.Cors (>= 1.1.0)' for '.NETFramework,Version=v4.6.1'.
...

我这里缺少了什么吗?这个不应该直接就能工作吗?

为了参考,这是 project.json 的相关部分(在运行 Nuget 升级之前):

  "dependencies": {
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.AspNet.WebApi.Client": "5.2.3"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "net461": {
       "imports": [
      ]
    }
  }

编辑:升级Nuget后,Visual Studio将依赖项部分更改为以下内容:

  "dependencies": {
    "Microsoft.AspNet.WebApi.Client": "5.2.3",
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.StaticFiles": "1.1.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Logging": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.Extensions.Logging.Debug": "1.1.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.1.0"
  },

1
你下载了1.1版的SDK/工具吗? - Tseng
在命令提示符中输入dotnet restore会告诉您什么? - Henk Mollema
尝试创建一个新项目,更新到1.1.0并检查是否正常工作。我刚刚在这里做了这个,它可以正常工作。我安装了.Net core 1.1.0.NET Core 1.0.1 - VS 2015 Tooling Preview 2 - Fabricio Koch
@chaiwalla 不要删除 Microsoft.AspNetCore.Server.IISIntegration.Tools 1.1.0-preview4-final,只需将其移动到 tools 部分而非 dependencies。 (只需创建一个新项目,您就可以看到 project.json 文件的情况) - Jérôme MEVEL
@JérômeMével VS2017不会创建带有project.json的项目吗?我也删除了Microsoft.AspNetCore.Server.IISIntegration.Tools 1.1.0-preview4-final,现在一切都正常工作了。当我只在工具部分中使用它时,我的EF Core迁移将不再起作用。 - Alex Hope O'Connor
显示剩余6条评论
2个回答

9

如果有人遇到同样的问题,我终于弄清楚了。

需要三个步骤才能使它工作:

  1. 由于某种原因,标准的"Microsoft和.NET"Nuget Feed没有包括这些软件包。我必须打开Nuget设置,并勾选"nuget.org"Feed。完成后它就可以恢复v1.1的软件包

  2. 我参考的博客文章没有提到你需要打开你的global.json文件并将SDK版本更改为"1.0.0-preview2-1-003177"(由于某种原因,v1.1仍然有一个名为v1.0.0的SDK,请问这是怎么回事?!)

  3. 完成这两个步骤后,尝试运行应用程序会产生500错误,但是在web.config中启用stdoutLogEnabled后,您可以看到异常如下:

System.IO.FileLoadException:无法加载文件或程序集 'System.Collections.Immutable, Version=1.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'或其任何依赖项。该 所定位的程序集清单定义与程序集引用不匹配。

要解决这个问题,您需要删除应用程序的bin文件夹,然后重新构建(由于某种原因,“重新构建解决方案”还不够)。当您部署到生产环境时,可能还需要删除那里的bin文件夹,否则可能会遇到同样的问题。


#1 对我来说单独这个就可以工作了 - 尽管出于某些原因我不得不重新启动VS。 - Jim W says reinstate Monica

0

我怀疑与@gallivantor在他的#1中提到的类似,但某种方式会有东西在UI后面重写NuGet.config文件,当我按照@jim-w的建议重新启动Visual Studio时,NuGet.org项目将返回未选中状态。

因此,我决定查看NuGet.config文件,并注意到有两个部分:<packageSources><disabledPackageSources>。而具有NuGet.org键的源在两者中都存在。我尝试从禁用的软件包部分中删除它,然后一切开始正常工作。

之前:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="NuGet.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
  <disabledPackageSources>
    <add key="nuget.org" value="true" /> <!-- This is what I was referring to -->
  </disabledPackageSources>
</configuration>

之后:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="NuGet.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
</configuration>

警告:我省略了一些细节(特别是关于环境),以保持答案简单。在将此解决方案应用于您的情况之前,请确保它适合您的情况。


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