dnx无法加载正确的.Net库

时间:2015-08-06 11:14:24

标签: c# .net linux dnx kestrel-http-server

我正在尝试在我的CentOS机器上使用dnx和kestrel运行.Net WebApi,并且我得到了很多“类型或命名空间'blah'在命名空间'blahblah'中不存在错误”,这提示,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的基础知识:ie,我在哪里可以找到它的配置文件,它在哪里放置包和dll,它是否使用mono,或者它有自己的运行时,它使用什么编译器,以及我应该获取其特定版本等。

1 个答案:

答案 0 :(得分: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一样:所有测试版都存在错误。