.NET核心依赖关系和框架理解

时间:2016-03-17 20:39:52

标签: c# asp.net-core .net-core asp.net-core-1.0

我几周以来一直在研究.NET Core。起初,这是微软对旧的.NET做事方式的彻底改革。但现在它让我感到紧张。以下是我原来的global.json

{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-rc1-update1",
  }
}

这是我的project.json

{
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0-*",
    "Microsoft.NETCore.Platforms": "1.0.1-*"
  },

  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
  },

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

  "exclude": [
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ]
}

这是我的hosting.json

{
  "webroot": "wwwroot"
}

我创建了一个空的ASP.NET Core 1.0 Web应用程序项目,我要做的就是创建一个AngularJs应用程序。但我无法访问wwwroot目录,因为我无法:

app.UseDefaultFiles();
app.UseStaticFiles();

我从原始dnx451中删除了project.json,并将global.json更改为:

{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-rc1-update1",
    "runtime": "coreclr",
    "architecture": "x64"
  }
}

错误: Error NU1002 The dependency Microsoft.AspNetCore.StaticFiles 1.0.0-rc2-20248 in project QMS.UI does not support framework DNXCore,Version=v5.0. QMS.UI ..\QMS.UI\src\QMS.UI\project.json

我已经阅读了很多博客和stackoverflow答案。任何人都能以非常高的方式告诉我们我们是怎么做的:

  • 有效地找到一个有效的包,它将包含我们的目标框架。
  • 有效地使所有框架(如果在project.json中列出)对该依赖符号表示满意吗? (有时我会收到一个错误,它可用于dnx451而不是dnxcore50)(我应该使用#if dnxcore50 ......等符号吗?)

请帮忙!我在另一个基于.NET Core的项目中遇到了类似的麻烦。

1 个答案:

答案 0 :(得分:2)

静态文件依赖项是表单RC2,与您在项目其余部分使用的RC1不兼容。

要么使用RC1中的所有软件包,要么使用RC2中的所有软件包,但请注意RC2依赖项经常中断(一个软件包需要版本xyz,其他软件包尚未更新,需要旧库但由于API更改无法工作使用较新版本。)

这是RC1包

"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",

这是RC2包(您可以在其名称上识别它们,Microsoft.AspNet.*包在RC2周期的某个时间重命名为Microsoft.AspNetCore.*

"Microsoft.AspNetCore.StaticFiles": "1.0.0-*",
"Microsoft.NETCore.Platforms": "1.0.1-*"
  
      
  • 有效地找到一个有效的包,它将包含我们的目标框架。
  •   

第一步是仅针对相同的版本。如果您需要稳定的环境,请使用RC1直到RC2释放。但是,请注意,有很多重大变化。查看ASP.NET Core GitHub annoucements(主要是重大更改)以获取更多信息。

  
      
  • 有效地使所有框架(如果在project.json中列出)对该依赖符号表示满意吗? (有时我得到一个错误,它可用于dnx451而不是dnxcore50)(我应该使用#if dnxcore50 ......等符号吗?)
  •   

取决于您需要的装配体。有些api与两个目标平台兼容,但大多数都没有。通常,这就是你如何切换平台相关的程序集/代码。

请注意,如果使用类库(包)或.NET Core应用程序(Web项目,单元测试项目),则会有所不同。

对于RC1,mon dnx451(或dnx452dnx46)用于完整的.NET Framework定位,dnxcore50用于.NET Core。但是对于类库,您必须使用net451(或net452 / net46)来获取完整的.NET Framework目标和dotnet5.x(x = 1-4,我也是RC2) 5)用于.NET Core。