将 .NET Core 应用程序升级到 1.1 时出错
Errors upgrading .NET Core app to 1.1
所以,我有一个工作愉快的 ASP.NET Core 1.0 应用程序,目标是 net461 框架。
今天我尝试将它升级到新的ASP.NET Core 1.1(根据说明on this page你只需要升级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"
},
我终于弄明白了,以防其他人遇到同样的问题。
实现它需要三个步骤:
出于某种原因,标准 "Microsoft and .NET" Nuget 提要不包括这些包。我不得不打开 Nuget 设置并勾选"nuget.org" 也供稿。完成后它能够恢复 v1.1 包
我引用的博客 post 没有提到您需要打开 global.json
文件并将 SDK 版本更改为 "1.0.0-preview2-1-003177"
(对于出于某种原因,v1.1 仍然有一个名为 v1.0.0 的 SDK——知道那里发生了什么吗?!?)
完成这两件事后,尝试 运行 应用程序产生了 500 错误,但是在 web.config 中启用 stdoutLogEnabled
之后,您可以看到异常是:
System.IO.FileLoadException: Could not load file or assembly
'System.Collections.Immutable, Version=1.2.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The
located assembly's manifest definition does not match the assembly
reference.
要解决此问题,您需要删除应用程序的 bin
文件夹,然后重建(由于某些原因 "Rebuild Solution" 还不够)。当您部署到生产环境时,大概您还需要删除那里的 bin 文件夹,否则您可能会遇到同样的问题。
我怀疑与@gallivantor 在他的 #1 中提到的类似,但不知何故,某些东西一直在重写 UI 后面的 NuGet.config
文件,当我 re-started Visual Studio 根据@jim-w 的建议,NuGet.org
项将返回到 un-checked。
所以我决定查看 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>
警告:我省略了一些细节(特别是关于环境的细节)以使答案简单。在将此解决方案应用于您的情况之前,请确保它适合您的情况。
所以,我有一个工作愉快的 ASP.NET Core 1.0 应用程序,目标是 net461 框架。
今天我尝试将它升级到新的ASP.NET Core 1.1(根据说明on this page你只需要升级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"
},
我终于弄明白了,以防其他人遇到同样的问题。
实现它需要三个步骤:
出于某种原因,标准 "Microsoft and .NET" Nuget 提要不包括这些包。我不得不打开 Nuget 设置并勾选"nuget.org" 也供稿。完成后它能够恢复 v1.1 包
我引用的博客 post 没有提到您需要打开
global.json
文件并将 SDK 版本更改为"1.0.0-preview2-1-003177"
(对于出于某种原因,v1.1 仍然有一个名为 v1.0.0 的 SDK——知道那里发生了什么吗?!?)完成这两件事后,尝试 运行 应用程序产生了 500 错误,但是在 web.config 中启用
stdoutLogEnabled
之后,您可以看到异常是:
System.IO.FileLoadException: Could not load file or assembly 'System.Collections.Immutable, Version=1.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.
要解决此问题,您需要删除应用程序的 bin
文件夹,然后重建(由于某些原因 "Rebuild Solution" 还不够)。当您部署到生产环境时,大概您还需要删除那里的 bin 文件夹,否则您可能会遇到同样的问题。
我怀疑与@gallivantor 在他的 #1 中提到的类似,但不知何故,某些东西一直在重写 UI 后面的 NuGet.config
文件,当我 re-started Visual Studio 根据@jim-w 的建议,NuGet.org
项将返回到 un-checked。
所以我决定查看 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>
警告:我省略了一些细节(特别是关于环境的细节)以使答案简单。在将此解决方案应用于您的情况之前,请确保它适合您的情况。