【问题标题】:Why does a custom control raise an exception in the Designer, yet work at runtime? [duplicate]为什么自定义控件在设计器中引发异常,但在运行时工作? [复制]
【发布时间】:2013-06-07 14:53:59
【问题描述】:

我有一个 USB 相机图像的第三方显示控件,在其自己的窗口中设置,使用 XAML 如下:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="ControlWrapperAppWPF.CameraView"
    Title="Camera Image" SizeToContent="WidthAndHeight"
    xmlns:custom="clr-namespace:TCUSB;assembly=TCC">
        <custom:TCC Name="tC" Loaded="tC_Loaded" />
</Window>

在“设计”窗格中,会显示一个System.IO.FileNotFoundException(在单击此处重新加载设计器的链接下方)。错误详情包括:

无法加载文件或程序集 'TCR, Version=2.1.3.0, Culture=neutral, PublicKeyToken=32fe4fab5501c8fe' 或其依赖项之一。

TCC.dll(引用自我的 XAML)使用 TCR.dll,它们各自的依赖关系很多。我不得不将大量 DLL 复制到 \bin\Debug\bin\Release 文件夹中。是否也应该将它们复制到其他地方(或替代)?

TCR.dll 本身实际上是版本 2.1.3.1025,所以这可能是也可能不是问题,但是,我在运行时没有收到此类投诉。项目构建时没有任何警告,当我执行调试或发布构建时,第三方控制窗口工作正常。

对此的任何建议将不胜感激,谢谢!

【问题讨论】:

  • 我只能提供一些建议:启动两个 Visual Studio 副本,并从实例 A 使用 Debug | Attach To Process 附加到实例 B。然后在B 实例中使用有故障的第三方控件打开您的项目并打开出现问题的设计器 - 然后查看实例A 是否发现任何异常。您可能需要先转到 Debug | Exceptions 并在实例 A 中为“公共语言运行时异常”打开“抛出”。
  • 谢谢,马修。这是一个巧妙的技巧,但我似乎无法捕捉到 Designer 错误。当我的应用程序启动时,我确实尝试过throw new System.IO.FileNotFoundException(),但这仅在实例B 中被捕获。我已经为其他异常类型打开了“抛出”,以防万一。有没有更好的方法来故意在实例 B 中抛出 CLR 异常,以检查我是否正确附加了实例 A
  • 您可能会创建一个空的默认用户控件并将其添加到实例B 的项目中的表单中,然后更改其构造函数以引发异常,然后打开包含它的表单。
  • (...cont) 即在 IDE 的 Design 窗格中打开表单。
  • 感谢您的建议,这项技术一定会派上用场的。

标签: c# wpf visual-studio-2010 wpf-controls


【解决方案1】:

这个答案对我有用:https://stackoverflow.com/a/6036800/1236073

我使用的第三方控件似乎确实引用了非托管 DLL,所以现在一切都加起来了!

我已将我的问题标记为重复问题,尽管它提供了一些原始帖子中没有的额外关键字,可能会对未来的搜索者有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多