在设计器中打开自定义用户控件时,Visual Studio Professional 15.9.2崩溃

时间:2018-11-24 14:30:38

标签: c# visual-studio winforms

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

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

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

“无法加载文件或程序集'MyEventArgs,版本= 1.0.6896.23135,文化=中性,PublicKeyToken =空”或其依赖项之一。系统找不到指定的文件。'

目标用户控件未引用MyEventArgs。在目标项目中向MyEventArgs添加引用无济于事。解决方案中对MyEventArgs的所有引用都是对Libraries文件夹中的DLL的引用,而不是项目引用。

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

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

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

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

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

首先我得到一个例外

  

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

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

我在调试器中单击“继续”,然后得到此异常

  

“无法加载文件或程序集” MyEventArgs,版本= 1.0.6896.23135,   文化=中性,PublicKeyToken =空”或其依赖项之一。的   系统找不到指定的文件。'

     

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

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

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

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

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

MyEventArgs不在目标计算机上的GAC中。

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

1 个答案:

答案 0 :(得分:1)

TLDR:这是我的错,不是Visual Studio的错。也就是说,更易于理解的异常将为我节省很多调试时间。

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

例如,我有很多项目都包含简单的界面(IDoStuff)。我认为这些更改不会经常更改,因此也许引用DLL会稍微加快编译过程。

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

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

我花了数小时在项目文件,清除bin文件夹等中寻找“ 1.0.6896.23135”参考。

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

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