C# 为什么隐式转换需要;中间的;装配

C# 为什么隐式转换需要;中间的;装配,c#,assemblies,implicit-conversion,build-dependencies,C#,Assemblies,Implicit Conversion,Build Dependencies,我有两个项目,项目A是一个WPF应用程序,项目B是一个WPF控制库 项目A引用默认的WPF内容。但不是System.Windows.Controls.Ribbon 项目B定义了一个类MainWindow,该类继承自RibbonWindow,位于System.Windows.Controls.Ribbon程序集中 在App.xaml.cs中,我将把Current.MainWindow实例设置为项目B的MainWindow 这会导致以下生成错误: CS0012:类型“RibbonWindow”在未引

我有两个项目,项目A是一个WPF应用程序,项目B是一个WPF控制库

项目A引用默认的WPF内容。但不是
System.Windows.Controls.Ribbon

项目B定义了一个类
MainWindow
,该类继承自
RibbonWindow
,位于
System.Windows.Controls.Ribbon
程序集中

在App.xaml.cs中,我将把
Current.MainWindow
实例设置为项目B的
MainWindow

这会导致以下生成错误:

CS0012:类型“RibbonWindow”在未引用的程序集中定义。必须添加对程序集“System.Windows.Controls.Ribbon,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”的引用

CS0029:无法将类型“MyNamespace.MainWindow”隐式转换为“System.Windows.Window”

可以通过引用项目A中的
System.Windows.Controls.Ribbon
来解决此问题


如您所见,
main窗口
是一个
RibbonWindow
,它是一个
窗口
Current.main窗口
需要设置一个
窗口
factory.CreateMainWindow()
返回的
MainWindow
将被隐式转换为
Window


为什么隐式转换需要引用所有中间类型的程序集?“
MainWindow
是一个
RibbonWindow
,它是一个
窗口
”-您知道这一点。我知道。编译器在看到该程序集之前无法知道这一点。编译器(在编译每个项目时)只使用源代码文件和通过引用告诉它应该注意的程序集。@dam谢谢,你能提供一些关于编译器如何执行此操作的背景信息吗?是否可以在不引用程序集的情况下告诉编译器这些中间类型?“
MainWindow
是一个
RibbonWindow
,它是一个
窗口
”-您知道。我知道。编译器在看到该程序集之前无法知道这一点。编译器(在编译每个项目时)只使用源代码文件和通过引用告诉它应该注意的程序集。@dam谢谢,你能提供一些关于编译器如何执行此操作的背景信息吗?是否可以在不引用程序集的情况下告诉编译器这些中间类型?
Current.MainWindow = factory.CreateMainWindow(); // Returns of type `MainWindow`