0

我正在尝试在我的 CentOS 机器上使用 dnx 和 kestrel 运行 .Net WebApi,我收到很多“名称空间 'blahblah' 中不存在类型或名称空间 'blah'”错误,这暗示了 dnx出于某种原因,使用了一些旧程序集,这些程序集确实没有定义后者。到目前为止,我已经在同一台机器上成功地运行了与自托管应用程序相同的 WebApi。它也已使用 xbuild 成功编译,但到目前为止,使用 dnx 编译并托管在 kestrtel 上没有运气。这是我第一次使用 dnx,我敢肯定,我做错了什么,但是谷歌搜索和阅读仍然没有帮助我理解,到底出了什么问题。我的 project.json 如下:

    {
"webroot": "./",
"dependencies": {
    "Kestrel": "1.0.0-beta5",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta5",
    "Microsoft.AspNet.Hosting": "1.0.0-beta5",
    "Microsoft.AspNet.Mvc": "6.0.0-beta5",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta5",
    "Microsoft.Framework.ConfigurationModel.Json": "1.0.0.0-beta5",
    "System.Net.Http": "4.0.0-beta5",
    "System.Web.Http": "2.0.0",
    "Autofac": "3.5.2",
    "Autofac.WebApi2": "3.4.0",
    "Microsoft.AspNet.Cors": "5.2.3",
    "Microsoft.AspNet.SignalR": "2.2.0",
    "Microsoft.AspNet.SignalR.Core": "2.2.0",
    "Microsoft.AspNet.SignalR.JS": "2.2.0",
    "Microsoft.AspNet.SignalR.SystemWeb": "2.2.0",
    "Microsoft.AspNet.WebApi": "5.2.3",
    "Microsoft.AspNet.WebApi.Client": "5.2.3",
    "Microsoft.AspNet.WebApi.Core": "5.2.3",
    "Microsoft.AspNet.WebApi.WebHost": "5.2.3",
    "Microsoft.Owin": "3.0.1",
    "Microsoft.Owin.Cors": "3.0.1",
    "Microsoft.Owin.Host.SystemWeb": "2.1.0",
    "Microsoft.Owin.Security": "3.0.1",
    "Newtonsoft.Json": "5.0.4"
},
"commands": {
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001",
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
},
"frameworks": {
    "dnx451": {
    }
}}

最大的错误与 System.Configuration.Configurationmanager 相关,dnx 无法在 System.Configuration 中找到它并从 System.Runtime.Caching 中找到类型,在后一种情况下,dnx 根本找不到 System.Runtime.Caching。错误还说,我使用的 dnx 版本是 v4.5.1,我想应该理解 .Net 4.5.1。dnvm list 命令显示 1.0.0-beta6。是否有可能,我必须手动提供必要的 dll?如果是这样,我应该把它们放在哪里?如果这个问题的原因不同,那可能是什么?如果有人能解释一下关于 dnx 的基础知识,我将不胜感激:即,我在哪里可以找到它的配置文件,它在哪里放置包和 dll,它是否使用单声道,或者它有自己的运行时,它使用什么编译器,以及我应该获取其特定版本等吗?

4

1 回答 1

1

您的目标是 dnx451 框架,它是完整的 .Net Framework SDK。这个框架在 CentOS 上不可用(RedHat Clone 对吗?),但只有 dnxcore。

您的依赖项内部有多个实现,一个用于 dnx,一个用于 dnxcore。如果您编译为 dnx451,则依赖项将使用 dnx451 的实现,它依赖于 .Net Framework SDK。如果您要编译为 dnxcore,则依赖项将使用 dnxcore 实现(可能)不使用 System.Configuration.ConfigurationManager。

System.Configuration 命名空间被重写为 .Net Core 的一部分。

但与 DNX 一样:所有测试版,漏洞无处不在。

于 2015-08-12T07:04:34.233 回答