- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
今天,ASP.NET Core 的 RC1 版本可与 DNX 配合使用。据我了解,RC2 的主要变化是 ASP.NET Core 将开始使用 .NET Core CLI。
现在这让人们对以下问题感到疑惑:如果 DNX 和 .NET CLI 只是工具,为什么此迁移需要更改代码?
果然今天有公告Microsoft.AspNetCore.Mvc.Dnx is required to allow Mvc in RC2 to work with Dnx我们看到要将 ASP.NET Core MVC 与 DNX 一起使用,我们需要添加一个包和更多包,我们需要更改我们的代码,以便我们在 Startup< 的
调用 ConfigureServices
方法上使用services.AddMvcDnx();
这让我很困惑。我了解到 DNX 和 .NET Core CLI 只是用于运行 .NET Core 应用程序的工具。如果这只是工具,为什么从一个工具迁移到另一个工具需要更改代码?
最佳答案
This confuses me. I understood that DNX and .NET Core CLI were just tooling for running .NET Core apps. If this is just tooling why the migration from one to the other is requiring code changes?
DNVM/DNU/DNX 不仅仅是工具。 DNX 也是运行时。它负责引导 CLR 和调用您的应用程序。这也意味着它有很多关于运行时和应用程序的信息,例如依赖项、环境等。这些信息通过您可以注入(inject)的各种服务提供给应用程序,例如 IRuntimeEnvironment
、IApplicationEnvironment
和 ILibraryManager
。
反过来,MVC 有一个名为 IAssemblyProvider
的服务。它负责提供 MVC 应在其中搜索 Controller 等的程序集。此功能的默认实现基于 ILibraryManager
,这是一项特定于 DNX 的服务。这意味着当您切换到基于 dotnet 的运行时时,它将不再工作,它由包关闭,而不是使用单独的工具,如 DNVM。
为了解决这个问题,MVC 团队首先依赖 DNX 服务和更新的 dotnet 替代方案 (Microsoft.Extensions.DependencyModel
)。可以看到代码here .它主要检查 DNX 特定的 ILibraryManager
是否可用,如果不可用,它会回退到替代的 dotnet-API。
这种方法的问题在于,它会在 MVC 中引入额外的、在大多数情况下是冗余的依赖项 (Microsoft.Extensions.PlatformAbstractions.Dnx
),而此时大多数人将开始使用它dotnet 工具和运行时。记住; DNX 等仍处于测试阶段,将被 RTM 淘汰。
相反,他们选择了当前的解决方案;有一个单独的包 Microsoft.AspNetCore.Mvc.Dnx
,其中包含用于 MVC 的基于 DNX 的 IAssemblyProvider
。您可以看到 AddMvcDnx
方法的作用 here .
这意味着跟随预发布的少数人将不得不对他们的代码进行一些更改,以便仍然在 DNX 上运行(尽管我会尽快转移到 dotnet),而新人只会必须像往常一样调用 AddMvc
。
我希望其中一些是有道理的。这真的很令人困惑 :)
关于c# - 为什么从 DNX 迁移到 .NET CLI 需要更改代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35689952/
我想删除所有测试版的 clr 和 coreclr 我在程序和功能中看不到它们。 我正在运行 Windows 7 我删除了 %USERPROFILE%.dnx\packages 中的所有文件 但是当我跑
我在 VS2015 中启动了一个非常简单的“尝试一下”ASP.Net MVC(测试版)项目,但我在 DNX 和 DNX Core 引用资料上遇到了一个问题。 在此示例中,我尝试使用 DateTime.
当我在我的 Visual Studio 中打开一个 (dnx46) 项目时,我(大多数情况下)收到以下错误: The following error occurred attempting to ru
我在类库中使用 DNX 实现 log4net 时遇到问题。我的 project.json 中有以下内容 - ... "dependencies": { "log4net": "2.0.
我在 Ubuntu 14.04(在我的 VMWare 上)上使用 Visual Studio Code 创建了一个简单的 WEB API 应用程序。我完成了安装和配置 .NET 核心、VS 代码 (V
在我和其他人的许多项目中,如果我使用的对象属于不同的 asp.net5 项目,就会弹出一个不明确的引用错误。有趣的是,它仍然可以编译和工作,但没有智能感知,我的代码被红线覆盖。 这方面的一个例子是我有
我已在包管理器控制台中运行此命令来升级 dnx。 "dnvm upgrade -u default" 一旦它得到更新,我可以看到(C:\Users\Chandrasekar.dnx\runtimes)
我克隆了一个基于 ASP.NET 5 Mvc 6 Beta 8 的存储库。Visual Studio 无法安装最新的 DNX SDK。 这是错误信息:“DNX SDK 版本‘dnx-clr-win-x
当我尝试在本地打开 .Net core RC2 迁移项目时,收到以下错误消息 --------------------------- Microsoft Visual Studio ---------
我已经安装了 Visual Studio 2015 Update 1。然而,尽管选择了安装 Web 应用程序,但它并没有安装。然后我从get.asp.net安装了网站安装程序 asp.net 5 RC
我试图在我的 Arch Linux 系统上安装 .NET 核心。我遵循了这个简单的教程:http://dotnet.github.io/core/getting-started/但是当我尝试执行命令
我有一个项目存在于名为Oracle的目录中,我希望创建的 Artifact 称为MyCompany.MyApp.Oracle而不是Oracle,除了更改目录名之外,更改输出程序集名称和nuget包名称
(现在提高为 DNX issue 3206 ...) DNX 环境:1.0.0-rc1,Windows 10 x64。 想象一下,我有三个解决方案: 申请1 申请2 普通 这些解决方案中的每一个都有多
更新:DNX 不再存在。请忽略这个问题。 当前的 WindowsAzure.ServiceBus (3.0.4) nuget 包 ( http://nuget-preprod-0-v2gallery.
我想将我的框架移植到新的 .net 核心,所以我创建了一个空应用程序,添加了一个静态成员来感受行为,每个请求增加一个 int,但它运行了两次,一次是请求和请求之后一次,所以不是得到 1,2,3,4..
我真的对新的 Dot Net Execution SDK 和新的跨平台 .net 应用程序/库的共享库形式感到困惑。 我有一些可移植类库,我计划在 Mono 环境下使用它们(将来可能会使用 xamar
我有一个引用类库项目的 DNX 控制台应用程序。我正在尝试发布它并将其安装为全局命令。 我在 Windows 10 操作系统上执行此操作。 控制台项目 Program.cs namespace Ver
目标 对于集成测试,我想加载自定义 XML 配置。此 XML 位于我的集成测试项目中的一个文件夹中。 对于进一步的目标,我想使用新的 DNX 项目。我知道它们仍在预览中。 本地测试工作正常。现在的问题
当我发布我的项目时 dotnet publish 它输出到一个文件夹 bin/Debug/dnxcore50/osx.10.11-x64/publish (或者可能是 Release 等价物) 是否可
我在使用 dnx/k 版本 1.0.0-beta3 设置的 ASP.NET 5 项目工作。最近我对操作系统和 VS 进行了全新安装,但丢失了 beta3 软件包,我只安装了 beta4。是否可以安装特
我是一名优秀的程序员,十分优秀!