微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果com-interop在内置vs的项目属性下设置,则无法注册用于.db迁移的.Net程序集

如何解决如果com-interop在内置vs的项目属性下设置,则无法注册用于.db迁移的.Net程序集

我想在Visual Studio中创建一个C#.Net dll作为Enterprise Architect的加载项。 该dll必须注册才能用于Enterprise Achitect使用的com-interop。

在此dll中,我还想使用代码优先和nuget包microsoft.entityframework.core进行数据库迁移。 如果未选中项目属性构建中的com-interop复选框,则此数据库迁移可与Visual Studio中的paket管理器控制台一起正常工作。 如果选中,我的dll无法编译。 错误消息是:

程序集“ .... dll”无法注册。程序集“ Microsoft.EntityFrameworkCore,版本3.1.8 ...”的类型“ Microsoft.EntityFrameworkCore.DbContext”中的方法disposeAsync” 没有实现。

在我的原始代码中,我没有具有任何dispose或类似功能函数。这是一个简单的项目,只有几行代码。 我尝试使用旧版本的Microsoft.EntityFrameworkCore在nuget包管理器中对其进行管理,但没有帮助。 另外,我在代码中覆盖了disposeAsync函数,但这也无济于事。

相关代码位于上下文类中与DbContext对应的行:

using Microsoft.EntityFrameworkCore;

namespace ...

{

        public class .. : DbContext
   
        {

在Google中我什么都找不到,所以请帮助我。

解决方法

该问题可能是由您的项目和集成了您的加载项的产品中的不同程序集版本引起的。

示例:

  • 您在项目中使用了一些名为 System.dll 版本 2.0 的 NuGet 包
  • 使用相同程序集安装插件的产品,但版本不同(System.dll 版本 1.0)。
  • 当您的插件加载到目标产品时,它会加载所有必需的引用程序集,但如果已加载同名程序集,它会使用已加载的程序集(而不是您在构建时使用的实际程序集)。
  • 如果版本不同,您会得到一些奇怪的例外,例如您问题中的例外或任何其他奇怪的事情。

尝试发现您需要在项目中更改哪个程序集版本,以避免 dll 版本不匹配。尝试使用 FusionLog 进行调查。请注意,问题 dll 可能不是 Microsoft.EntityFrameworkCore,而是 EntityFramework 依赖的任何程序集。不幸的是,没有直接说明如何解决您的问题。将程序集动态添加到第 3 方程序集是一件非常棘手的事情。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。