我有一个 wpf 自定义控件(在 AssemblyA 中),它从外部程序集(AssemblyB)中的 resx 文件中引用字符串资源。
public override void OnApplyTemplate()
{
try
{
base.OnApplyTemplate();
// ...
// Do Stuff
// ...
}
catch (Exception ex)
{
Logger.Error(ExceptionCodes.Ex50000, ex);
}
}
当我通过 dll 引用将自定义控件(在 AssemblyA 中)添加到另一个解决方案中的另一个项目(AssemblyC)中的页面时,该控件无法在设计器中显示。相反,设计器会显示一个漂亮的大红叉,并显示消息 FileNotFoundException:无法加载文件或程序集“AssemblyB”。还添加了 AssemblyB 作为对 AssemblyC 的 dll 引用。
删除对 AssemblyA 中的字符串资源的引用会删除错误并允许控件在设计器中正确显示。不幸的是,这不是一个选项,因为出于支持原因,整个应用程序都使用字符串资源。
在 AssemblyA 中创建 resx 文件也会消除错误,但会分散资源,这不是正在进行的开发的选项。
综上所述,设计者显然不是在加载资源程序集。任何见解将不胜感激。
总结
解决方案 1 中的程序集 A 中的 CustomControl 引用了从解决方案 1 中的程序集 B 中的 resx 文件中获取资源的字符串。解决方案 2 中的程序集 C 具有对程序集 A 和程序集 B 的 dll 引用。程序集 C 中的用户控件使用程序集 A 中的 CustomControl。 Visual Studio WPF 设计器在显示 UserControl 时引发 FileNotFound 异常。