【问题标题】:VS 2015. Setting right target framework for ASP.NET 5 web projectVS 2015. 为 ASP.NET 5 web 项目设置正确的目标框架
【发布时间】:2015-10-18 17:54:08
【问题描述】:

我在 Visual Studio 2015 中创建了新的 ASP.NET 5 MVC 项目。在项目创建向导中,我选择显示 .NET Framework 4.6 的模板,然后在下一个屏幕上从 ASP 中选择“Web 应用程序”。 NET 5 预览模板。

但是,在创建后,项目似乎在 project.json 的“框架”部分中仅列出了“dnx451”和“dnxcore50”:

  "frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  },

我尝试将“dnx451”更改为“dnx46”。该项目已构建良好,但当我尝试运行它时,我收到以下错误消息:

当前运行时目标框架与'...'不兼容。

当前运行时目标框架:'DNX,Version=v4.5.1 (dnx451)' 类型: CLR 架构:x86 版本:1.0.0-beta5

如何更改 ASP.NET 5 项目的“目标框架”?

现在这是我的 global.json:

{
  "projects": [
    "src",
    "test",
    "wrap"
  ],
  "sdk": {
    "version": "1.0.0-beta5",
    "runtime": "clr",
    "architecture": "x86"
  }
}

但那里列出的内容并不重要。我已经尝试过不同版本的 1.0.0-beta5 和最新的 1.0.0-beta6

【问题讨论】:

  • 你在 global.json 中有什么?如果您右键单击项目并选择属性,您是否在那里检查了特定的框架?查看更多 project.json 以查看主要依赖项可能有助于诊断错误
  • 我已经更新了最初的帖子并将 global.json 的内容添加到其中。但是我已经尝试更改那里列出的“sdk”版本 - 但它没有帮助。
  • 您没有显示 project.json 的依赖项部分。 beta6 应该是昨天发布的,它似乎在 nuget 提要中,但还没有发布公告,我认为应该有 VS 2015 的相应工具更新。现在我会使用beta5 直到更多关于 beta6 发布的消息
  • 依赖关系中的内容很重要,我已经看到一些错误发生在需要将主要部分的一些依赖关系移动到 dnxcore50 下的依赖关系中
  • 我遇到了同样的问题。将 "Microsoft.AspNet.Server.IIS": "1.0.0-beta6" 添加到我的 project.json 解决了这个问题。然而我不知道为什么。也许它也对你有帮助。

标签: .net visual-studio-2015 asp.net-core


【解决方案1】:

问题在于 DNX 知道您的项目针对的是 dnx46,但 IIS 不是:)。因此,IIS 从 .NET 4.5.1(默认情况下)开始并尝试加载与 4.5.1 不兼容的项目。

在 VS Tooling 的未来版本中,我们将更好地检测到这一点,但在那之前,对于想要针对 .NET 版本以上的 Web 应用程序来说,情况有些困难> 4.5.1。目前,我建议在此之前只使用dnx451(如果您不依赖 .NET 4.5.2/4.6 功能),但如果您需要使用,我将在下面提供一些说明,说明如何在今天完成这项工作4.5.2 或更高版本。

注意:dnx452dnx46 在控制台应用程序中以及在使用 IIS 以外的服务器(例如 Kestrel 或 WebListener)时完全受支持。基本上,您可以使用本机 dnx.exe 引导程序启动的任何内容都可以与 dnx451dnx46 一起使用,但其他托管环境(IIS、IIS Express)需要额外的提示才能启动正确的框架。

今天要完成这项工作,您需要将环境变量DNX_IIS_RUNTIME_FRAMEWORK 设置为您要使用的目标框架。您可以在 Web 应用程序的“项目属性”页面的“调试”选项卡上执行此操作。只需选择 IIS Express 配置文件并添加环境变量,如下所示:

我们将把它添加到Known Issues,因为看起来我们错过了它,正如我上面所说,我们将改进 VS 中的默认体验,所以这不是必需的 :) .

【讨论】:

  • 谢谢你这么详细的解释。很高兴知道这不是我的错:)
  • @Andrew Nurse 我需要卸载 beta5 才能使用吗?显然,尽管我努力使用特定的运行时(beta6),但它一直在尝试使用 dnx 451 启动 iis
  • 今天我试图创建一个新项目,但这个错误一直在发生(beta6)。这个解决方案对我没有用。
  • 如果有人还没有偶然发现这个——对于生产,IIS 不会看到这个设置,除非环境变量是在服务器上手动设置的。实际上,我一直在 vs2015 之外构建更多内容并编写发布 powershell 脚本;这为我解决了这个问题,同时让我可以防止管理员从我冰冷、死气沉沉的手上抓取 ef7 和 DI
  • 简而言之,我有针对 .NET 4.5.2 的类库,而我刚刚更新的从头开始创建的 ASP.NET 5 框架项目包含 DNX 4.5.1。由于我不依赖 4.5.2+ 的功能,我将所有类库都定位到 .NET 4.5.1 - 重建它们(非常重要) - 然后终于可以引用它们了。
【解决方案2】:
"DNX_IIS_RUNTIME_FRAMEWORK" : "DNX46"

值区分大小写

【讨论】:

猜你喜欢
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多