.NET Core 依赖和框架理解

.NET Core Dependencies and Frameworks Understanding

几周以来我一直在研究 .NET Core。起初,这是从 Microsoft 到旧的 .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();

我从原来的 project.json 中删除了 dnx451,并将 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

我看了很多博客和Whosebug的回答。谁能以非常高层次的方式告诉我我们如何:

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

静态文件依赖项是 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-*"
  • Effectively find a valid package, that will suite our target framework.

第一步是只定位相同的版本。如果您需要稳定的环境,请在发布 RC2 之前使用 RC1。但是,请注意有很多重大变化。查看 ASP.NET Core GitHub annoucements(主要是重大更改)以获取更多信息。

  • Effectively make all frameworks (if listed in the project.json) happy with that dependency notation? (Sometimes I get an error, its available for dnx451 but not dnxcore50) (Should I use the #if dnxcore50... etc notations?)

取决于您需要的程序集。有些与两个目标平台兼容 api,但大多数不兼容。通常这就是您切换平台相关 assemblies/code 的方式。

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

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