【问题标题】:.NET Core Dependencies and Frameworks Understanding.NET Core 依赖和框架理解
【发布时间】:2016-03-18 04:51:53
【问题描述】:

我从几个星期以来一直在研究 .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();

我从原来的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

我已经阅读了很多博客和 stackoverflow 的答案。谁能以非常高级的方式告诉我我们如何:

  • 有效地找到适合我们目标框架的有效包。
  • 有效地使所有框架(如果在 project.json 中列出)都对依赖符号感到满意? (有时我得到一个错误,它适用于dnx451,但不适用于dnxcore50)(我应该使用#if dnxcore50...等符号吗?)

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

【问题讨论】:

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


    【解决方案1】:

    静态文件依赖是 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,名称为 dnx451(或 dnx452dnx46),用于完整的 .NET Framework 目标,dnxcore50 用于 .NET Core。但是,对于类库,对于完整的 .NET Framework 目标,您必须使用 net451(或 net452/net46),对于 .NET Core,您必须使用 dotnet5.x(x=1-4,i RC2 也是 5)。

    【讨论】:

    • 我将IISKestrel 更新为以下内容:"1.0.0-*" 软件包已成功恢复,并附带了RC2 软件包。老问题没有得到解决,而是在列表中添加了另一个错误:Error CS0103 The name 'WebApplication' does not exist in the current context QMS.UI.DNX Core 5.0 ...\QMS.UI\src\QMS.UI\Startup.cs
    • 我对 project.json 做了以下更改:{"Microsoft.AspNet.IISPlatformHandler": "1.0.0-*""Microsoft.AspNet.Server.Kestrel": "1.0.0-*""Microsoft.AspNet.StaticFiles": "1.0.0-*" } 现在那些旧错误已经消失了。但是Startup.cs 报告WebApplication.Run 不存在。
    • 我还看到它仍在使用解决方案资源管理器中的参考树中的所有 RC2 包。奇怪的! :S
    • 您仍在使用过时的软件包。正如我在上面发布的,RC2 的新名称命名为Microsoft.AspNetCore.*,而不是Microsoft.AspNet.*。见公告github.com/aspnet/Announcements/issues/144。一些较旧的 RC2 软件包仍然使用旧名称,但较新的软件包使用新名称,但由于它们也有重大更改,您需要最新的并希望幸运的是 ci 提要已更新 :) dnx 上的 MVC6 也需要一个要运行的附加包,请参阅此公告github.com/aspnet/Announcements/issues/154
    • 如果你想使用 RC2,最好修复你的版本号(一旦 oyu 找到一个工作设置)而不是使用1.0.0-*,因为第二天你重新启动 Visual Studio(它会做一个包恢复),您的依赖关系可能会再次中断
    猜你喜欢
    • 1970-01-01
    • 2010-09-05
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2018-12-24
    • 1970-01-01
    • 2018-07-13
    相关资源
    最近更新 更多