在被引用的WPF应用程序中实例化/引用公共类时出现typeeloadeexception

本文关键字:引用 typeeloadeexception 实例化 WPF 应用程序 | 更新日期: 2023-09-27 17:49:27

我目前正在开发一个控制台应用程序,它引用了WPF项目中的一个类,希望在满足特定条件时启动WPF窗口。

我有一个简单的对象,我想从控制台应用程序调用,它看起来像这样:
namespace MyNamespace
{
    public class TestLoad
    {
        public string Property { get; set; }
        public TestLoad()
        {
            Property = "hey there";
        }
    }
}
在我的控制台应用程序中,我使用这个简单的构造函数调用对象(我有一个对WPF可执行文件的引用):
using MyNamespace;
...
TestLoad myObject = new TestLoad();

构建和编译没有问题;然而,在运行时,当我到达包含上述行的函数时,它会跳出函数并出现以下错误:

System.TypeLoadException was unhandled by user code
  HResult=-2146233054
  Message=Could not load type 'MyNamespace.TestLoad' from assembly 'MyNamespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
  Source=MyProject
  TypeName=MyNamespace.TestLoad
  StackTrace:
       at MyProject.DiskInit.UploadNewDocument(String DrivePath)
       at MyProject.DiskInit.<>c__DisplayClass67_0.<CbFsWriteFile>b__0() in C:'<somepath>'DiskInit.cs:line 1130
       at System.Threading.Tasks.Task.InnerInvoke()
       at System.Threading.Tasks.Task.Execute()
  InnerException: 

我检查了两个项目都在相同的。net版本(4.5)上,并运行在相同的体系结构(x86)上。即使将类更改为静态引用,也会发生相同的typeloadeexception错误。我一直在研究这个问题,并读到这是Visual Studio的一个潜在错误,本质上是编译了一些它不应该编译的东西,因为它会导致这个运行时错误。我还读到这是引用WPF项目的潜在错误,解决这个问题的唯一方法是将项目更改为输出dll。我唯一的问题是,我似乎失去了创建可以从执行应用程序外部启动的WPF窗口的能力。这是正确的吗?

有没有人遇到过这种类型的问题,或者知道如何解决?如果没有,是否有更好的替代方式来使用WPF窗口,即在满足控制台应用程序的条件时加载一个(漂亮的)用户输入对话框?

在被引用的WPF应用程序中实例化/引用公共类时出现typeeloadeexception

您需要在控制台项目中添加对以下dll的引用

PresentationCore

PresentationFramework

WindowsBase

一旦你这样做了,你可以从你的控制台应用程序调用WPF窗口,如下所示:

class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        Application app = new Application();
        app.Run(new MainWindow());         
    }
}