提供了我的类型的完全限定名称,但是当我运行程序时,它会在错误的程序集中查找类型

Posted

技术标签:

【中文标题】提供了我的类型的完全限定名称,但是当我运行程序时,它会在错误的程序集中查找类型【英文标题】:The fully qualified name for my type is provided but when I run the program it looks for the type in the wrong assembly 【发布时间】:2021-07-14 17:10:37 【问题描述】:

当我运行 WCF 服务时,出现错误

"无法加载类型 'CompanyName.Services.WCF.GenericNotes.Entities.GenericNote' 来自 程序集'CompanyName.Services.WCF.GenericNotes, Version=1.2.0.7,Culture=neutral,PublicKeyToken=null'。

确实,GenericNote 类型不在 CompanyName.Services.WCF.GenericNotes 中,但在 CompanyName.Services.WCF.GenericNotes.ENTITIES 程序集中,其 dll 包含在我的程序目录中。我通过从元数据中查看客户端的定义来确定我正在实例化的客户端需要这种类型,因此我无法触摸实际查找该类型的文件。那里提供了正确的“使用”指令。即使提供了全名,.NET 怎么会在错误的程序集中寻找类型?它如何确定在哪里寻找类型?

【问题讨论】:

【参考方案1】:

这种情况通常出于以下两个原因之一:

    在配置文件中指定了不正确的程序集(作为文本) - 检查您的应用程序正在使用的配置文件 类型已在程序集之间移动;含义:当SomeAssembly.dll被编译时,类型CompanyName.Services.WCF.GenericNotes.dll中,但是它已经移动到CompanyName.Services.WCF.GenericNotes.Entities.dll并且你SomeAssembly.dll没有被重建那个依赖;为此,有两种选择:
      使用更新的依赖项重建SomeAssembly.dll,或者 将[TypeForwardedTo(typeof(CompanyName.Services.WCF.GenericNotes.Entities.GenericNote))] 添加到'CompanyName.Services.WCF.GenericNotes.dll 并重建它(注意,这需要对现在具有该类型的项目的依赖);运行时使用此属性来解析已移动的类型(请注意,在某些框架中也有 [TypeForwardedFrom(...)],其工作方式类似但方向不同)

【讨论】:

你救了我,谢谢!原来 #2 是发生了什么

以上是关于提供了我的类型的完全限定名称,但是当我运行程序时,它会在错误的程序集中查找类型的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript Compiler API:如何在没有绝对路径的情况下获取类型的完全限定名称?

jOOQ 内置方法生成具有完全限定的“列”名称的不确定查询

应用程序名称附加了 -temp-caseinsensitive-rename

在Windows身份验证的上下文中是否存在“完全限定”的用户名?

我想在按下多选项卡时更改我的应用程序的名称

为啥在 JDK 类中使用完全限定名称声明 Serializable?