无法通过反射加载项目

问题描述

我正在尝试在运行时使用WpfCustomControlLibrary加载Reflection,但是当它必须访问System.IO.FileNotFoundException时会抛出System.Data.sqlite

当前设置的想法是,只要与特定的Interface匹配,运行中的应用程序就不会知道它必须加载的确切控件。

这时,我正在尝试直接从WpfCustomControlLibrary的Debug文件夹中加载项目,以确保所有引用的库与项目本身都位于同一目录中。

这是我当前尝试加载控件的方式:

UserControl myControl = null;
Assembly asm = Assembly.LoadFrom(@"SomePath\bin\Debug\ControlLibrary.dll");

Type[] types = null;
try
{
    types = asm.GetTypes();

    if (types != null)
    {
        foreach (var t in types.Where(t => t != null))
        {
            if (t.Name == "MyControl")
            {
                myControl = Activator.CreateInstance(t) as UserControl;

                Type[] ifs = t.GetInterfaces();

                var project = ifs.FirstOrDefault(x => x == typeof(IMyInterface));

                if(project != null)
                {
                    IMyInterface actualProject = myControl as IMyInterface;

                    //Creates a new database when none exists.
                    actualProject.Init(@"Data Source=.\Database.db;Version=3;"); //<-- It fails on this line
                    actualProject.Start();
                }

                break;
            }
        }
    }
}
catch (Exception ex)
{
    MessageBox.Show($"Failed to load Project: {ex}");
}

当我将MyControl作为参考项目加载时,访问System.Data.sqlite没有任何问题。

actualProject.Init方法基本上运行以下代码

// Create database if it doesn't exist yet
foreach (string sub in this.ConnectionString.Split(';'))
{
    string prefix = "Data Source=";
    if (sub.Contains(prefix))
    {
        string name = sub.Remove(0,prefix.Length);

        if (!File.Exists(name))
        {
            sqliteConnection.CreateFile(name);
        }
    }
}

编辑:添加了堆栈跟踪。不幸的是我的工作电脑不是英语,所以我不得不翻译一些内容

Stacktrace:

在Database.DbConnection.CreateDatabaseIfNeeded() 在\ usercontrol项目路径\ DbConnection.cs:line 32中的Database.DbConnection..ctor(String ConnectionString) 在\ usercontrol project path \ connectors \ Database.cs:line 43中的ControlLibrary.connectors.Database..ctor(String ConnectionString) 在\ usercontrol项目路径\ UserControl1.xaml.cs:line 779中的ControlLibrary.UserControl1.Init(String DatabaseConnectionString) 在\ main project path \ DynamicProjectLoaderTest \ MainWindow.xaml.cs:line 56

中的DynamicProjectLoaderTest.MainWindow.BtnLoad1_Click(对象发送方,RoutedEventArgs e)处

似乎没有在正确的目录中搜索System.Data.sqlite.dll,因为该文件实际上位于以下任一位置:

usercontrol项目路径\ bin \ Debug \ x64或

usercontrol项目路径\ bin \ Debug \ x86。

FusionLog:

===绑定前的状态信息=== 日志:displayName = System.Data.sqlite,版本= 1.0.112.1,区域性=中性,PublicKeyToken = db937bc2d44ff139 (完全指定) 日志:Appbase = file:///主项目路径/ DynamicProjectLoaderTest / bin / Debug / 日志:最初PrivatePath = NULL 调用程序集:数据库,版本= 1.0.0.0,文化=中性,PublicKeyToken =空。 ===

LOG:此绑定从LoadFrom加载上下文开始。 WRSCH:在LoadFrom上下文中未搜索本机图像。仅在认的加载上下文(例如Assembly.Load())中搜索本机图像。 日志:使用的应用程序配置文件:主项目路径\ bin \ Debug \ DynamicProjectLoaderTest.exe.Config LOG:使用主机配置文件: 日志:来自C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config wordt gebruikt的计算机配置文件。 日志:在策略之后进行引用:System.Data.sqlite,版本= 1.0.112.1,区域性=中性,PublicKeyToken = db937bc2d44ff139 日志:尝试下载URL文件:///主项目路径/ bin / Debug / System.Data.sqlite.DLL 。 日志:尝试下载URL文件:///主项目路径/bin/Debug/System.Data.sqlite/System.Data.sqlite.DLL。 日志:尝试下载URL文件:///主项目路径/bin/Debug/System.Data.sqlite.EXE。 日志:尝试下载URL文件:///主项目路径/bin/Debug/System.Data.sqlite/System.Data.sqlite.EXE。 日志:尝试下载URL文件:///控制项目路径/ bin / Debug / System.Data.sqlite.DLL 。 WRSCH:比较程序集名称显示以下内容不匹配:版本号 日志:尝试下载文件:///控制项目路径/bin/Debug/System.Data.sqlite/System.Data.sqlite.DLL。 日志:尝试下载文件:///控制项目路径/ bin / Debug / System.Data.sqlite.EXE 下载。 日志:尝试下载URL文件:///控制项目路径/bin/Debug/System.Data.sqlite/System.Data.sqlite.EXE。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...