在引用的WPF应用程序中实例化/引用公共类时的TypeLoadException

时间:2016-06-24 14:18:17

标签: c# wpf class typeloadexception

我目前正在开发一个引用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)上运行。即使将类更改为静态引用,也会发生相同的TypeLOadException错误。我一直在研究这个和read that it is a potential bug with Visual Studio,基本上编译它不应该的东西,因为它会导致这个运行时错误。我还读过it is a potential bug with referencing WPF projects,解决这个问题的唯一方法是将项目更改为输出dll。我唯一的问题是我似乎失去了创建可以从执行的应用程序外部启动的WPF窗口的能力。这是对的吗?

之前是否有人遇到此类问题或知道如何绕过它?如果没有,是否有更好的替代方式以这种方式使用WPF窗口,这主要是在满足控制台应用程序的条件时加载(漂亮)用户输入对话框?提前感谢您的任何反馈。

1 个答案:

答案 0 :(得分:1)

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

PresentationCore

PresentationFramework

WindowsBase

完成后,您可以从控制台应用中调用WPF窗口,如下所示:

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