【问题标题】:Use MSBuild to build Entity Framework Model without using the Project File?使用 MSBuild 构建实体框架模型而不使用项目文件?
【发布时间】:2010-01-31 20:57:17
【问题描述】:

我正在为一个相当大的项目构建脚本。其中一个项目需要将实体框架模型编译到库中。由于构建服务器的工作方式,所有构建都是手工制作的,可以在不影响开发人员和项目文件的情况下管理各种部署场景。

在不使用 Visual Studio 生成的项目文件的情况下,是否可以使用 MSBuild 任务生成 EF 模型?目前实际程序集使用 CSC 任务进行编译,但实际部署的应用程序失败,因为 EF 模型未包含在编译的程序集中。

任何指向目标或构建任务的指针可用于生成模型并创建所需资源以嵌入到程序集中?

请注意

项目在 Visual Studio 中编译得很好,但是不能在构建服务器上使用项目文件,因为在部署时需要对项目进行各种更改,这可以通过自定义构建来控制开发团队控制之外的脚本。这已经成功地用于一些项目,但是 EF 模型在这种特定情况下引起了一些麻烦。

更新

当前的解决方案并不理想,但有效。已修改项目文件以将 EF 模型资源复制到新版本构建的项目中的文件夹中,然后将其签入源代码控制。当构建脚本在服务器上运行时,EF 模型将嵌入到程序集中。目前这似乎是一个可行的解决方法。

【问题讨论】:

    标签: entity-framework deployment msbuild compilation msbuild-task


    【解决方案1】:

    实际上我今天处理了这个问题,因为我的项目的源代码树没有正确设置来运行实体框架的构建任务,该任务生成并将资源嵌入到输出 dll 中。

    我研究了以下选项:

    使用 EntityDeploy msbuild 任务

    如果您在记事本中打开 .csproj 文件,您应该会看到一些类似 XML 的内容

     <EntityDeploy Include="MyEntities.edmx">
      <Generator>EntityModelCodeGenerator</Generator>
      <LastGenOutput>MyEntities.Designer.cs</LastGenOutput>
     </EntityDeploy>
    

    这是使用 Microsoft.Data.Entities.Build.targetsMicrosoft.Data.Entities.Build.dll 读取 edmx 文件的 msbuild 任务,生成ssdl、csdl 和 msl 文件,然后将它们嵌入到目标 dll 中。 (这些文件可以在 C:\Windows\Microsoft.NET\Framework\v3.5 中找到)。

    使用 EdmGen

    正如 Craig 指出的那样,您也许可以使用框架附带的EdmGen.exe。我试了一下,但我对我的 edmx 文件中的数据进行了一些自定义,并且 EdmGen.exe 似乎真的想从原始数据库进行初始生成。

    使用 EdmGen2

    EdmGen2.exe 是一个开源项目,比 EdmGen 做得更多。我最终使用它来生成 ssdl、csdl 和 msl 文件。您只需将其指向您的 edmx 文件,它将生成必要的 ssdl、csdl 和 msl 文件。然后我将这些与我的 dll 一起包含并从

    修改了连接字符串
    connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|res://*/MyEntities.msl;
    

    connectionString="metadata=./MyEntities.csdl|./MyEntities.ssdl|./MyEntities.msl;
    

    请注意,我告诉实体框架这些文件与我的 dll 位于同一目录中,而不是作为资源嵌入。

    所有这三个,构建任务、EdmGen 和 EdmGen2 都是瘦包装器,它们调用 System.Data.Entity.dll 来处理所有困难的事情。作为最后的手段,您可以查看反射器中的构建任务 dll,看看它在做什么。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      是的,有一个名为EdmGen 的命令行实用程序可以执行此操作。使用EdmGen /? 进行可能的切换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-18
        • 1970-01-01
        • 2017-08-01
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 2012-02-23
        • 1970-01-01
        相关资源
        最近更新 更多