Entity framework 是否在不使用项目文件的情况下使用MSBuild生成实体框架模型?

Entity framework 是否在不使用项目文件的情况下使用MSBuild生成实体框架模型?,entity-framework,deployment,msbuild,compilation,msbuild-task,Entity Framework,Deployment,Msbuild,Compilation,Msbuild Task,我正在为一个相当大的项目编写脚本。其中一个项目需要将实体框架模型编译到库中。由于构建服务器的工作方式,所有构建都是手工构建的,以在不影响开发人员和项目文件的情况下管理各种部署场景 是否仍然可以使用MSBuild任务生成EF模型,而不使用Visual Studio生成的项目文件?当前,实际程序集使用CSC任务进行编译,但是实际部署的应用程序失败,因为EF模型未包含在编译的程序集中 目标或构建任务可用于生成模型和创建嵌入程序集中所需资源的任何指针 请注意 项目在VisualStudio中可以很好地编

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

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

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

请注意

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

更新


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

是的,有一个名为
EdmGen的命令行实用程序可以做到这一点。使用
EdmGen/?
查找可能的开关。

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

我调查了以下选择:

使用EntityDeploy msbuild任务

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

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

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

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

希望这有帮助

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