【问题标题】:EntityFramework Commands in ASP.Net 5 Class Library Package?ASP.Net 5 类库包中的 EntityFramework 命令?
【发布时间】:2016-03-26 01:31:05
【问题描述】:

我正在尝试开发我的第一个 ASP.Net Web 应用程序,在我的解决方案中我有两个项目。一个Web ApplicationClass Library (Package)。当我构建此应用程序的 ASP.Net 4.5 版本时,我将 Entity Framework 6 实体放入类库中,因此我在 ASP.Net 5 版本中这样做。问题是当我将EntityFramework.Commands 安装到类库时出现错误:

Project DBEntities 中的依赖EntityFramework.Command 7.0.0-rc1-final 不支持framework .NetPlatform, Version = 5.4

我对@9​​87654321@ 的理解是dotnet5.4 是应该由EF7 支持的新的.Net 5。

这是我的project.json 文件:

{
  "version": "1.0.0-*",
  "description": "FFInfo.DAL Class Library",
  "authors": [ "Mathew" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",
    "frameworks": {
        "dotnet5.4": {
            "dependencies": {
                "Microsoft.CSharp": "4.0.1-beta-23516",
                "System.Collections": "4.0.11-beta-23516",
                "System.Linq": "4.0.1-beta-23516",
                "System.Runtime": "4.0.21-beta-23516",
                "System.Threading": "4.0.11-beta-23516"
            }
        }
    },
    "dependencies": {
        "EntityFramework.Commands": "7.0.0-rc1-final",
        "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"
    }
}

我是否安装了错误的包,EF7 是否发生了很大变化以至于我构建的类错误,或者我的 json 文件中缺少某些内容?

编辑: 基于建议的新 project.json 文件

{
    "version": "1.0.0-*",
    "description": "FFInfo.DAL Class Library",
    "authors": [ "Mathew" ],
    "tags": [ "" ],
    "projectUrl": "",
    "licenseUrl": "",
    "frameworks": {
        "dotnet5.4": {
            "dependencies": {
                "Microsoft.AspNet.Hosting.Abstractions": "1.0.0-*",
                "Microsoft.Dnx.Runtime": "1.0.0-*",
                "Microsoft.Extensions.CommandLineUtils.Sources": {
                    "version": "1.0.0-*",
                    "type": "build"
                },
                "Microsoft.Extensions.PlatformAbstractions": "1.0.0-*",
                "System.Console": "4.0.0-*",
                "System.IO.FileSystem": "4.0.1-*"
            }
        },
        "netcore50": {
            "bin": {
                "assembly": "lib\\netcore50\\_._"
            }
        },
        "dependencies": {
            "EntityFramework.Commands": "7.0.0-rc1-final",
            "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"
        }
    }
}

【问题讨论】:

  • 框架dotnet5.4dnxcore50 而不是dnx451 的同义词(参见the official announcement)。我个人发现名称的变化各不相同。 我建议您首先将 dotnet5.4 重命名为 dnxcore50 如果您的类库用于 ASP.Net 4.5,您可能应该使用 net451dnx451 而不是 "frameworks"."dotnet5.4"."dependencies"大多?无论如何,我建议您将"dnx451": { }(或"net451": { })添加回"frameworks"。如果您能够重现该问题,我可以尝试提供更多帮助。
  • @Oleg 我不希望它针对 .Net 4.5 我希望它针对 .Net 5.0 core 这个Class Library 用于我的网络应用程序的ASP.Net 5 版本。
  • 我认为您的问题可以通过"dotnet5.4"重命名为"dnxcore50"来解决。如果可行,我会发布我的答案并附上更详细的解释。我认为您可以另外删除包含在"frameworks"."dotnet5.4" ("frameworks"."dnxcore50") 中的所有"dependencies",并可能使用常见的"dependencies",但只包含真正需要的依赖项。 `"frameworks"``的优化与你的主要问题无关。

标签: asp.net-core .net-core entity-framework-core


【解决方案1】:

我想你的问题的原因是纯技术性质的。 The announcement 声明将 dnx451 重命名为 net451,将 dnxcore50 重命名为 dotnet5.4,但有人建议仅将此类重命名用于类库(例如,您可以在 NuGet 上公开以与其他人共享)。如果我理解正确,您开发的应用程序 使用类库,因此您应该使用dnxcore50 而不是dotnet5.4。因此您只需将字符串“dotnet5.4”重命名为字符串"dnxcore50" in the fileproject.json` 即可解决问题

独立于上述建议,我想补充一下我对您的问题的理解,为什么您会收到有关 EntityFramework.Command 7.0.0-rc1-final 的错误。

我理解框架的重命名是朝着微软计划的未来变化迈出的一步。另一方面,框架的所有名称都将被解释为不同的名称。建议你对比https://www.nuget.org/packages/EntityFramework.Commands/7.0.0-rc1-final页面上显示的依赖信息和https://www.nuget.org/packages/EntityFramework.MicrosoftSqlServer/7.0.0-rc1-final的对应信息。 EntityFramework.MicrosoftSqlServer的依赖(dotnet5.4的使用没有问题)如图

我标记阅读负责dotnet5.4的部分。另一方面,EntityFramework.Commands 的依赖关系如下图所示:

其中没有与新名称 dotnet5.4 对应的“.NETPlatform 5.4”部分。

我想这是the partproject.jsonEntityFramework.Commands 中的一个错误

"netcore50": {
  "bin": {
    "assembly": "lib\\netcore50\\_._"
  }
}

我想必须将行中的netcore50 更改为dotnet5.4 才能正确支持新的框架名称dotnet5.4。可以将"netcore50" 的内容替换为dnxcore50 的副本(参见the lines):

"dotnet5.4": {
  "dependencies": {
    "Microsoft.AspNet.Hosting.Abstractions": "1.0.0-*",
    "Microsoft.Dnx.Runtime": "1.0.0-*",
    "Microsoft.Extensions.CommandLineUtils.Sources": {
      "version": "1.0.0-*",
      "type": "build"
    },
    "Microsoft.Extensions.PlatformAbstractions": "1.0.0-*",
    "System.Console": "4.0.0-*",
    "System.IO.FileSystem": "4.0.1-*"
  }
}

可能有人应该增加上面引用的 dll 的一些版本号,但在新的固定版本发布之前,您仍然无法在 "dotnet5.4" 下使用 EntityFramework.Commands

更新:我向 EntityFramework 开发团队提交了the issue。收到后我会附上微软对此问题的回复。

【讨论】:

  • 但是EntityFramework.Commands 不是类库,它是application...
  • @StaffordWilliams:我认为目前的术语存在一些差异。对我来说 DLL 不是应用程序。独立于“EntityFramework.Commands”的分类,如果想要允许在应用程序中使用它,它必须在project.json 中使用"dotnet5.4" 编译为"frameworks",它也使用它并为dotnet5.4 编译。您可以尝试在某些使用 EntityFramework 的项目中重现该问题。将dnxcore50 重命名为dotnet5.4 会出现错误。
  • 我试图复制你链接到的谎言,但现在我得到了The dependecny Microsoft.Extensions.CommandLineUtils.Sources >= 1.0.0-* could not be resolvedMicrosoft.Dnx.Runtime 也出现同样的错误,所以我不认为只是替换是解决方案
  • @MatthewVerstraete:在哪里您试图复制这些行(在EntityFramework.Commands 的源代码中或在您的项目中)?我的意思是EntityFramework.Commands 的开发人员必须创建支持dotnet5.4 的新版本,但你没有机会这样做。我向您推荐的方式:在您的project.json 中将"dotnet5.4" 重命名为"dnxcore50"
  • @MatthewVerstraete:只需获取您最初发布的project.json,并将字符串"dotnet5.4" 重命名为"netcore50"。而已。我在答案的第一段中提出了建议。我的答案中包含的所有其他长文本都只是描述了问题的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
相关资源
最近更新 更多