【问题标题】:Nuget won't install Entity Framework into C++/CLI projectNuget 不会将实体框架安装到 C++/CLI 项目中
【发布时间】:2014-06-27 14:02:17
【问题描述】:

我认为这个问题已经解决了。我正在使用 Visual Studio 2013,它是 Entity Framework 6.1。我收到错误消息:PublicKeyToken=xxxxxx 未标记为可序列化。

我认为这已解决。是不是又坏了,如果是,有解决办法吗?

谢谢。

这是尝试安装到 win32 C++ 控制台应用程序时的完整错误消息。 (使用默认设置构建,没有其他添加到新构建。) 错误:类型 程序集中的“Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCProjectShim” 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine,版本=12.0.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a' 未标记为可序列化。

以下是尝试安装到 C++ CLR 时的完整错误消息: (其实是一模一样的错误信息。)

以下是尝试安装到通用空 C++ 项目时的完整错误消息: (同样,同样的错误信息。)

【问题讨论】:

  • 呃,文档不清楚,但我不确定这是否可能。为什么投反对票? FWIW,MSDN 实际上指向 SO 来回答问题:msdn.microsoft.com/en-us/data/ef.aspx
  • 避免假设 SO 是为有例外的程序员提供的约会服务。在 C++/CLI 应用程序中使用 EF 的人数与难以选择防晒油品牌的爱斯基摩人的人数相当。您需要正确记录错误消息,您只发布了部分消息。 “PublicKeyToken”左侧的类型名称是必不可少的信息。当然还有异常的堆栈跟踪。当然还有生成它的代码的 sn-p。
  • @HansPassant,我已经记录了完整的错误。它们被安装到空项目中,因此不涉及新代码。我正在运行 VS 2013。如果 EF 不能在 C++ 中工作,那很好,但他们应该记录下来。我的解决方法是将它放入 dll/程序集中并让 C++ 访问它。
  • 是否提出了任何 ORM 替代方案?
  • ORM 是什么意思?

标签: entity-framework visual-studio c++-cli


【解决方案1】:

好吧,我终于可以弄清楚你在做什么了。您正在尝试运行 Nuget 以将实体框架下载并安装到 C++ 项目中。是的,这将是一个失败的鲸鱼。 Nuget 在 2.5 版本中获得了安装 C++ 库的能力,但这仅适用于 native 库。纯 C++,而不是像 EF 这样的托管代码。作为一个相对较新的功能,它不会阻止您出错,它不会将可用的包过滤到可以在 C++ 项目中工作的类型。

失败的步骤是最后一步,下载和复制文件工作正常,但随后 Nuget 运行 Powerscript 脚本来修改项目属性。对于 EF,它是为在 C# 或 VB.NET 项目中工作而编写的。 C++ 项目的 VS 扩展模型(由错误消息中报告的 VCProjectEngine 类实现)差异太大,无法让该脚本成功完成。

请记住,在本机 C++ 项目中使用 EF 的几率为零。在 C++/CLI 项目中,您只会对它有一点了解。从 CLR 节点中的项目模板开始是必需的第一步。

下一个是欺骗 Nuget 安装程序,将一个虚拟 C# 项目添加到您的解决方案并运行 Nuget 以将 EF 安装到该项目中。你会看到它在项目中添加了一个 app.config 文件,你需要在你的 C++/CLI 项目中做同样的事情。它还添加了两个 EF 程序集,您还需要将它们添加到您的 C++/CLI 项目中:

  • 右键单击解决方案资源管理器窗口中的项目,属性
  • 选择常用属性 + 参考
  • 单击“添加新参考”按钮
  • 点击浏览按钮
  • 导航到虚拟 C# 项目的 packages\EntityFramework.6.1.0\lib\net45 目录
  • 选择您在此处看到的 EntityFramework.dll
  • 重复添加EntityFramework.SqlServer.dll。

一定要编写 C++/CLI 代码来使用它。请注意,您将有机会找到爱斯基摩人。更明智的方法是创建一个使用 EF 的 C# 库,并在 C++/CLI 项目中使用该库。

【讨论】:

  • 好的,这是有道理的。我对 Nuget 似乎允许它加载(或尝试)这一事实感到困惑,而 Entity Framework 文档没有提到它不能与 C++/CLI 一起使用(尽管它也没有说它可以。)将 Nuget 加载到 C++/CLI 项目中听起来很冒险,而且主项目可能必须是原生 C++。所以我现在肯定会采用 C# 库方法。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
相关资源
最近更新 更多