在被引用的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窗口,即在满足控制台应用程序的条件时加载一个(漂亮的)用户输入对话框?
您需要在控制台项目中添加对以下dll的引用
PresentationCore
PresentationFramework
WindowsBase
一旦你这样做了,你可以从你的控制台应用程序调用WPF窗口,如下所示:
class Program
{
[STAThread]
static void Main(string[] args)
{
Application app = new Application();
app.Run(new MainWindow());
}
}