【问题标题】:Entity Framework metadata artifact not embeded when using xbuild and mono使用 xbuild 和 mono 时未嵌入实体框架元数据工件
【发布时间】:2016-02-23 21:22:35
【问题描述】:

当我尝试在 Linux 或 Windows 环境中使用 EntityFramework 和 MySQL 时,我遇到了以下问题:

项目 1:包含 EntityFramework edmx 和使用 dbcontext 类插入更新数据的逻辑 项目2:参考项目1。

当我使用 msbuild 构建解决方案时,EntityFramework 元数据文件嵌入在 Project1.dll 中

当我在 Linux 环境或 Windows 环境中使用 xbuild 进行干净构建时,缺少 EntityFramework 元数据文件

当您运行应用程序时,您会收到以下错误:

无法加载指定的元数据资源。

我使用的是单声道版本4.2.2

有人知道在使用 xbuild 时嵌入 EntityFramework 元数据文件的解决方案吗?

【问题讨论】:

  • 你用的是什么版本的单声道?
  • @knocte mono --version = Mono JIT 编译器版本 4.2.2

标签: c# mysql entity-framework mono xbuild


【解决方案1】:

在 mono 嵌入实体框架元数据工件之前,我已经实施了以下解决方法

  1. 第 1 步 - 将 EntityFramework 模型的元数据工件处理属性从 “嵌入输出程序集” 更新为 “复制到输出目录”

这会将元数据工件文件复制到包含 .edmx(Project1) 的项目的 bin 文件夹中

  1. Step2 - 将以下构建后事件添加到引用项目 (Project2) 以将元数据工件文件复制到其 bin。您可以将它们添加到 .csproj 项目文件的末尾。将 Project1 替换为您的项目名称。

    <PropertyGroup>
       <PostBuildEvent Condition=" '$(OS)' != 'Unix' ">copy /Y   "$(ProjectDir)..\Project1\bin\Debug\Models\*" "$(ProjectDir)\bin\Debug\"  </PostBuildEvent>
       <PostBuildEvent Condition=" '$(OS)' == 'Unix' ">cp -a "$(ProjectDir)../Project1/bin/Debug/Models/." "$(ProjectDir)bin/Debug/"  </PostBuildEvent>
    </PropertyGroup>
    
  2. Step3 - 更新你的连接字符串

    来自

    <add name="EntityframeworkTestEntities" connectionString="metadata=res://*/EntityFrameworkTestModel.csdl|res://*/EntityFrameworkTestModel.ssdl|res://*/EntityFrameworkTestModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=EntityframeworkTest;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    

    <add name="EntityframeworkTestEntities" connectionString="metadata=EntityFrameworkTestModel.csdl|EntityFrameworkTestModel.ssdl|EntityFrameworkTestModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=EntityframeworkTest;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多