我想做什么
我目前有一个项目文件,其中包含一个 EF 5 模型,其 .edmx 配置为将元数据嵌入到输出程序集中。
如果我通过 Visual Studio 2012 运行本地包,生成的程序集包含正确的资源。通过 MSBuild 手动运行包也会正确地将资源嵌入到程序集中:
msbuild web.csproj /t:Package /p:Configuration=Release
当我使用 dotPeek 手动检查由 Visual Studio 或通过 MSBuild 包步骤生成的程序集时,我可以确认包中包含 .csdl、.ssdl 和 .msl 资源。
实际问题
我手头有一台运行 Microsoft Windows Server 2012 和 Visual Studio 2012 的构建服务器。如果我使用与上述相同的命令行通过 Visual Studio 2012 命令提示手动运行 MSBuild,则会生成一个程序集不包含嵌入的资源。
为什么当我通过 MSBuild 执行自动化包时,我的 EF 元数据文件没有被嵌入?
简单的自包含正确示例
最佳答案
使用您的示例,在安装的 Windows 8 + VS2012 上,我能够使用 Package.bat 生成包,并且所有生成的程序集都包含所有 EF 元数据文件。 在 Readme.txt 中你提到了 MSDeploy
4) Run MSDeploy /t:package on the project
从您的问题看来,您的 MSBuild 有问题。 当您运行构建时,您能否验证您没有旧的 TestEntityEdmx.Hackaround.dll 位于 TestEntityEdmx\obj\Release... 文件夹中。
关于c# - Entity Framework 不将元数据嵌入到 dll 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16192905/