无法从程序集中加载类型

Posted

技术标签:

【中文标题】无法从程序集中加载类型【英文标题】:Cannot load type from assembly 【发布时间】:2019-03-02 05:26:06 【问题描述】:

我正在研究来自MSDN MarshalByRefObject 的代码我无法弄清楚为什么这会引发异常。我在想它是否可能是 Worker 类型与类 Program 在同一个程序集中?我是否需要在 GAC 中安装此程序集,尽管我在 Visual Studio 2017 编辑器中以调试模式运行它。我对如何使用汇编没有扎实的了解。

using System;
using System.Reflection;

namespace AppDomainMarshalByRefObject


    public class Program
    
        public static void Main(string[] args)
        
            Worker localWorker = new Worker();
            localWorker.PrintDomain();

            AppDomain ad = AppDomain.CreateDomain("New domain");
            Worker remoteWokrer = (Worker)ad.CreateInstanceAndUnwrap(typeof(Worker).Assembly.FullName, "Worker");

            remoteWokrer.PrintDomain();
            Console.ReadKey();
        
    

    public class Worker : MarshalByRefObject
    
        public void PrintDomain()
        
            Console.WriteLine("Object is executing in AppDomain \"0\"",
            AppDomain.CurrentDomain.FriendlyName);
        
    

【问题讨论】:

【参考方案1】:

您实例化了一个不完整的typename。将此添加到您的代码中:

public static void Main(string[] args)
    
        ...

        var typeName = typeof(Worker);

        AppDomain ad = AppDomain.CreateDomain("New domain");
        Worker remoteWokrer = (Worker)ad.CreateInstanceAndUnwrap(typeof(Worker).Assembly.FullName, typeName.FullName);

        ...
    

【讨论】:

以上是关于无法从程序集中加载类型的主要内容,如果未能解决你的问题,请参考以下文章

C#:无法从程序集中加载类型

Oracle .Net ManagedDataAccess 错误:无法从程序集中加载类型“OracleInternal.Common.ConfigBaseClass”

无法从程序集“System.Web,...”加载类型“...”

无法访问另一个程序集中的公共类型成员。我有两个程序集,我想从另一个程序集中的一个程序集访问公共成员

无法从程序集 PresentationFramework 加载类型“System.Windows.Controls.Primitives.MultiSelector”

在不知道类型的情况下将程序集从文件加载到自定义 AppDomain