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

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

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

'无法加载文件或程序集'MyEventArgs,版本= 1.0.6896.23135,区域性=中性,公共密钥令牌=空'或其依赖项之一。该系统找不到指定的文件。'

目标用户控件未引用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在哪里读取此版本号,则可以清除或更改它。它不可能组成这个数字,但是我找不到它的存储位置。

最佳答案

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

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

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

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

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

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

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

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

关于c# - 在设计器中打开自定义用户控件时,Visual Studio Professional 15.9.2崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53459187/

10-11 01:02