【问题标题】:Visual Studio Professional 15.9.2 crashes when opening a custom user control in the designer在设计器中打开自定义用户控件时,Visual Studio Professional 15.9.2 崩溃
【发布时间】:2018-11-25 09:31:43
【问题描述】:

我的 .Net Framework WinForms 应用程序构建没有错误,运行也没有错误。

当我双击打开我创建的用户控件时,VS2017 Professional 15.9.2 设计器崩溃。这些用户控件都继承自一个名为 MyUserControl 的类。我可以在设计器中打开 MyUserControl 而不会出错。

当我单独运行 VS2017 时(没有附加调试器的第二个副本),我在双击目标用户控件时看到以下异常:

'无法加载文件或程序集'MyEventArgs,版本=1.0.6896.23135,Culture=neutral,PublicKeyToken=null'或其依赖项之一。系统找不到指定的文件。'

目标用户控件不引用 MyEventArgs。在目标项目中添加对 MyEventArgs 的引用没有帮助。解决方案中对 MyEventArgs 的所有引用都是对库文件夹中 DLL 的引用,而不是项目引用。

我在记事本中打开了解决方案中的每个 .csproj 文件。它们都没有引用 MyEventArgs DLL 的特定版本。

我已经清除了所有的 obj 和 bin 目录。

我已清除 ProjectAssemblies 目录。这是一个 WinForms 应用程序,因此无需清除临时 ASP.Net 文件目录。

我启动了 VS2017 的第二个副本并将调试器附加到 VS2017 实例,我尝试在设计器中打开用户控件。我选中了父复选框以选择中断所有 CLR 异常。

我在第一个VS实例的VS设计器中双击打开目标用户控件。

首先我得到一个异常

参数不正确。 (来自 HRESULT 的异常:0x80070057 (E_INVALIDARG))

没有关于哪个参数不正确的信息。我查看了异常对象的所有属性。我的所有 DLL 都没有设置“从 Internet 下载”位。

我在调试器中点击继续,然后得到这个异常

'无法加载文件或程序集'MyEventArgs,版本=1.0.6896.23135, Culture=neutral, PublicKeyToken=null' 或其依赖项之一。这 系统找不到指定的文件。'

=== 预绑定状态信息 === LOG: DisplayName = MyEventArgs, Version=1.0.6896.23135, Culture=neutral, PublicKeyToken=null (完全指定)日志:Appbase = file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/Common7/IDE/LOG: 初始 PrivatePath = NULL 调用程序集:(未知)。 === LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件: C:\Users\Adam\AppData\Local\Microsoft\VisualStudio\15.0_fdc9bc52\devenv.exe.config LOG:使用主机配置文件: LOG:使用机器配置 文件来自 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config。 日志:此时未将策略应用于参考(私人, 自定义、部分或基于位置的程序集绑定)。 LOG:相同的绑定 以前见过,但失败了,hr = 0x80070002。

但是,我在任何地方都没有这个版本的 MyEvents。所有引用都指向库文件夹中的 DLL。此 DLL 有较新的版本。

如何让 VS2017 停止寻找这个旧版本的 DLL?

我运行了两个 AstroGrep(免费的 Windows 实用程序)副本,在我的 C 盘和存储解决方案的 D 盘上的所有文件中搜索该版本号 (1.0.6896.23135)。它没有在任何文件(csproj 等)中找到此版本号的任何实例。

目标用户控件项目未引用 MyEventArgs。我检查了解决方案中的每个 csproj。所有引用库文件夹中的 MyEventArgs.dll 的副本。此副本的版本比异常中指定的版本新。

MyEventArgs 不在目标机器上的 GAC 中。

VS 从哪里得到这个旧版本号?如果我知道 VS 在哪里读取此版本号,我可以清除或更改它。它不可能是这个数字,但我找不到它的存储位置。

【问题讨论】:

  • 我在以前的版本中遇到过类似的问题。大多数情况下,只有重新启动 Visual Studio 或计算机有助于解决问题。我认为一旦需要进行一些更改,例如清除所有 Visual Studio 文件,然后撤消 (在 GIT 中签出以前的版本)
  • 当涉及到 WinForm Designer 问题时,最大的帮助是建议 let Visual Studio run with a debugger attached(通过另一个 VS 实例)并在出现异常时停止。
  • 您是否在应用配置文件中有绑定重定向?我曾经遇到过类似的错误,原来是这个问题造成的。
  • 此文件没有绑定重定向。

标签: c# visual-studio winforms


【解决方案1】:

TLDR:这是我的错,不是 Visual Studio 的。也就是说,一个更易读的异常会为我节省大量的调试时间。

该异常是由于我最近修改了我的解决方案,将许多项目引用更改为引用库文件夹中的 DLL,而不是同一解决方案中的其他项目。

例如,我有许多包含简单接口 (IDoStuff) 的项目。我认为这些不会经常更改,因此引用 DLL 可能会加快编译过程。

我相信发生的事情是我编译了 MyEventArgs,创建了 1.0.6896.23135 版本,然后编译了其他依赖于 MyEventArgs 的类,然后将这些 DLL 放在我的库文件夹中。然后我必须重新编译 MyEventArgs,并将更新的版本存储在 Libraries 文件夹中。

我假设如果我将所有项目引用设置为不需要特定版本,那么一切都会正常工作。

我花了几个小时在项目文件中寻找“1.0.6896.23135”引用,清理 bin 文件夹等。

我现在认为,对 MyEventArgs 的特定版本的引用嵌入在另一个 DLL 中,我已将它复制到 Libraries 文件夹中。

我修改了我的解决方案以返回使用项目引用,并且 VS 设计器在打开目标用户控件时不再崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-08
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    相关资源
    最近更新 更多