【发布时间】:2021-01-27 05:01:24
【问题描述】:
我发现我可以创建一个从 .msix 包部署的 WPF 应用程序但如果它包含 Microsoft.EntityFrameworkCore.SqlServer 包则不会启动。这是一个重现(和其他一些怪癖):
使用 Windows 应用程序打包项目创建 WPF App .NET 5 应用程序。编译并运行。安装(侧面加载)并启动。
无法从包管理器将 Microsoft.EntityFrameworkCore(或 SQLServer 或工具)5.0.0 添加到上述解决方案。获取以下信息:无法安装包“Microsoft.EntityFrameworkCore 5.0.0”。您正在尝试将此包安装到以“UAP,Version=v10.0.17763”为目标的项目中,但该包不包含任何与该框架兼容的程序集引用或内容文件。
如果您首先删除 WAPP 项目,则可以添加所有 EF 包(Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer 和 Microsoft.EntityFrameworkCore.Tools)。编译并运行。
现在可以将 WAPP 添加到已经具有 EF 包的项目并创建一个 .msix。侧载,带有代码签名证书。安装没有明显错误。 不启动。图标安装在开始菜单上。
如果您从 Microsoft.EntityFrameworkCore.Tools 中的 Private Assets 属性中删除“全部”值(此修复在 Core 3.1 中有效)并重建应用程序和 WAPP,.msix 安装时不会出现明显错误。 不启动。图标安装在开始菜单上。
如果您删除 .Tools 包并重新创建应用程序,它会编译并运行,可以重新创建 WAPP,安装 .msix 但应用程序无法启动。
如果您删除 .SQLServer 包并重新创建应用程序,它会编译并运行,WAPP 可以重新创建,.msix 安装但应用程序启动。
如果您删除 WAPP 包,请重新添加 .Tools(现在是 Microsoft.EntityFrameworkCore 和 Microsoft.EntityFrameworkCore.Tools),然后重新创建 WAPP,然后创建 .msix,安装并启动应用程序。
如果您现在添加回 Microsoft.EntityFrameworkCore.SqlServer 版本 3.1.10,它会编译并运行,WAPP 会创建一个 .msix 并且应用程序会安装并启动。但是,如果同时使用 .SqlServer 3.1.1 和 EntityFrameworkCore 5.0.0,您将无法在没有运行时错误的情况下搭建或执行。
因此,Microsoft.EntityFrameworkCore.SqlServer 包似乎有些东西阻止了已安装的应用程序启动。
【问题讨论】:
-
原来您需要将 Microsoft.EntityFrameworkCore.SqlServer 属性的私有资产更改为“全部”。这允许应用程序安装和启动。
-
但是,对上下文的任何调用都会使应用程序崩溃。调试时它会正常工作。但是,使用 .msix 安装后,它会在任何调用上下文时崩溃
标签: .net entity-framework-core