【问题标题】:Can't create a migration with EF Core 1.1无法使用 EF Core 1.1 创建迁移
【发布时间】:2016-12-09 20:17:13
【问题描述】:

我花了整整两天时间尝试为我的项目的数据库创建初始迁移。这太令人沮丧了。文档的每个预览版本都指向不同的方向,并且有很多未解决的问题在一段时间内徘徊。

我的项目是一个在完整框架 (net462) 上运行的 AspNetCore 应用程序,尽管我认为我已经尝试了预览版本的所有组合,甚至在这个问题上提出的解决方法:EF Tools 1.1.0-preview4 Unrecognized option '--config' 或在这个:https://github.com/aspnet/EntityFramework/issues/7083 但是都不行。

这是我的 project.json 的摘要以及相关部分:

{
    "version": "1.0.0-*",
    "buildOptions": {
        "platform": "x86",
        "debugType": "full",
        "preserveCompilationContext": true,
        "emitEntryPoint": true
     },

     "dependencies": {
        ....
        "Microsoft.EntityFrameworkCore": "1.1.0",
        "Microsoft.EntityFrameworkCore.Design": "1.1.0",
        "Microsoft.EntityFrameworkCore.SqlServer": "1.1.0",
        "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.1.0",
        ....
       },

      "tools": {
         "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final",
         "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final"
       },

       "frameworks": {
            "net462": {
            }
        },

    ...
}

在我的情况下,建议的解决方法不起作用,既不使用夜间构建也不将工具降级到 1.0.0-preview3。

如果我使用 1.1.0-preview4-final 版本的工具,我会遇到这个错误:

Unrecognized option --config

如果我使用每晚构建,我会得到这个,这有点荒谬,因为我的应用只有一个项目,而不是 dll(它也有 emitEntryPoint:true 集)

Could not load assembly 'Sales'. Ensure it is referenced by the startup project 'Sales'

但这是我最喜欢的一个,当我降级到工具的 1.0.0-preview3-final 时,我得到了这个超现实的:

error: Package Microsoft.EntityFrameworkCore.Tools.DotNet 1.0.0-preview3-final is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package Microsoft.EntityFrameworkCore.Tools.DotNet 1.0.0-preview3-final supports: netcoreapp1.0 (.NETCoreApp,Version=v1.0)

我不得不读了五遍,才能确定第二句话的意思与第一句话正好相反……这似乎是个笑话!

此外,无论我安装什么版本的工具,无论我是否恢复软件包以及是否重新启动计算机,命令都不再在 PMC 上运行......

我对这么多版本的所有东西都感到很疯狂,我只想创建一个迁移,我必须使用哪个版本的工具都没关系......现在有有效的配置还是我正在尝试不可能的事? 是否有人能够使用任何版本的 ef 工具在针对完整 .net 框架 (net462) 的 asp.net 核心应用程序中创建迁移?

如果是这样,怎么做?

编辑:

在将项目定位到 .netcoreapp1.0 并删除不兼容的引用后,现在我遇到了这个错误:

A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'C:\Program Files (x86)\dotnet\shared\Microsoft.NETCore.App\1.0.1'

这里发生了什么???我真的厌倦了.net Core,它仍然是第一个版本。在它处于测试阶段时,我遇到了很多这样的问题,但现在事情应该是稳定的......他们已经改变了 20 次所有可以改变的东西,API、程序集名称、命名空间、包名称、约定。 .. 现在让我们等待工具的预览版 5、6 或 25,也许到 2035 年 EF Core 将拥有适当的工具和程序,同时我该死的一百万次我决定押注这项技术!

编辑 2:

根据 cmets global.json 可能是相关的:

{
  "projects": [ "src", "test" ],
    "sdk": {
        "version": "1.0.0-preview2-1-003177"
    }
}

并添加 1.0.0-preview2-1-003177 文件夹存在并且是 C:\Program Files (x86)\dotnet\sdk\ 和 C:\Program Files\dotnet\sdk\ 中唯一的一个

【问题讨论】:

  • 有什么问题/异常/错误?
  • @Dmitry - 有足够的错误吗?
  • 是和否 :) 您在项目文件夹中遇到了一些噩梦,需要更多细节来理解“为什么”。 1) 请出示您的global.json 文件。 2)修改框架后手动删除binobj子文件夹,重启VS,执行dotnet restore。通过这种方式,我的机器上的一些“奇怪”问题得到了解决 :) 无论如何,我在许多使用 EFCore 1.0.0 和 1.1.0、net46 和 netstardart1.3 以及 netcoreapp1.0 和 1.1 的项目中成功迁移(但从未尝试过 net462) .你能做一个小的非工作演示项目并将其推送到 github 上的某个地方吗?
  • @Dmitry - 我已经删除了该文件夹并重新启动并恢复了所有内容......现在我唯一的赌注可能是重新安装我所有的开发机器,因为这可能与安装有关Visual Studio 15 RTM 并排(尽管文档说它可以正常完成)。请看我的编辑,我已经发布了 global.json 文件。谢谢!

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


【解决方案1】:

我不想回答我自己的问题,但我想不会有太多人进入这条小巷......所以对于那些正在为类似问题苦苦挣扎的人,我会告诉我我的来自这个项目的配置。 json:

...
"buildOptions": {
    "platform": "x86", <- THIS!!!
    "debugType": "portable",
    "preserveCompilationContext": true,
    "emitEntryPoint": true
},

删除“平台”键后,迁移再次开始工作......

我不确定我何时引入该设置,因为在升级到 .NET Core SDK 1.1 版之前我没有尝试创建迁移。也许它是从互联网上的一个示例中复制的,也许是从以前的版本中复制的,我不知道,但这让我疯狂了好几天,我希望它可以帮助那里的人。

【讨论】:

  • 好消息!一旦这可能是(或可能不是,谁知道)EF 中的错误 - 我建议您在 Github 上创建小项目(删除额外的东西,只需要最少的东西),这将证明这个问题并创建问题 in EF repo - 可能是这将对将来的某人有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 2017-04-12
  • 2021-12-25
  • 2020-12-03
  • 1970-01-01
  • 2021-05-04
相关资源
最近更新 更多