c# - 将 dll 动态加载到我的程序中时出现问题

标签 c# visual-studio dll dynamic casting

我正在尝试向我的程序添加插件,这看起来不错,只是我无法从 dll 中转换正确的类型。 我有一个包含多个项目的解决方案。 其中一个项目是一个国家层,它实际上拥有一个 CountryBase(定义为公共(public)抽象类 CountryBase:CountryLayers.ICountryBase) 接口(interface)(公共(public)接口(interface) ICountryBase)

在另一个项目上,我有针对国家/地区的“实现”。这个 dll 在运行时加载,使用这个:

            Assembly assembly = Assembly.LoadFrom(file);
            //get the class from the assembly
            foreach (Type t in assembly.GetTypes())
            {
//just for debugging
                Console.WriteLine(t.FullName);
            }

            Type localType = assembly.GetType( "CountryLayers.Local");
            if (localType != null)
            {
                Country countrydata = new Country();
                countrydata.ObjectType = localType;
                countrydata.CountryObject  = Activator.CreateInstance(localType);
                countrydata.CountryObject2 = (CountryBase) countrydata.CountryObject;
                countrydata.FileName = file;
                CountryList.Add(countrydata);
            }

其中 Local 是定义为 public class Local 的类的名称:CountryLayers.CountryBase, CountryLayers.ICountryBase

countrydata 只是保存指针。 CountryObject2 被定义为 CountryBase(我也试过 IcountryBase)。但它总是返回类型不可转换。

控制台写入行显示在程序集中加载了属于 countrylayer 的所有类以及本地类。

所以此时我不知道错误是因为我在同一个解决方案上拥有所有内容,还是问题是我以错误的顺序使用了接口(interface)和抽象类。此外,当创建实例返回对象时,该对象具有抽象类中定义的所有属性,但没有方法。

最佳答案

我自己解决。当您使用该解决方案编译所有内容时,就会出现问题。这样,它也会在其他类的输出中为接口(interface)创建 dll。考虑到这一点,我使用了一个插件文件夹来保存插件,并将 VS 设置为将输出编译到该文件夹​​。它将派生类连同接口(interface) dll 和抽象实现 dll 一起复制到该文件夹​​。所以它让编译器感到困惑。我取出 VS 中项目的所有引用(我将它们更改为引用“已编译”dll),我自己编译每个 dll,然后我只将我需要的 dll 复制到插件文件夹,然后工作。 无论如何,这个链接给了我一个关于这个问题的提示: Dynamic Loading with Reflection

关于c# - 将 dll 动态加载到我的程序中时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835551/

相关文章:

visual-studio - 从 bash 脚本调用 vcvars

c# - 在java中使用C# dll

c# - 安排 Web Api 方法按设定的时间间隔运行

C# 通用 Linq 查询

c# - Apache 点燃 2.1 : I get errors when setting the PersistentStoreConfiguration property

visual-studio - 随处使用 Visual Studio 命令提示工具

visual-studio - VS2013测试代理和 Controller 不通信

c++ - 控制 DLL 中代码的可能方法

c# - 在 C# winforms 中使用 C++ 库

c# - 如何在 Java 客户端的 WCF 服务中使用 C#-Properties