代码之家  ›  专栏  ›  技术社区  ›  MindModel

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

  •  3
  • MindModel  · 技术社区  · 7 年前

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

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

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

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

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

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

    首先我得到一个例外

    参数不正确。(HRESULT的例外:0x80070057(Eúu INVALIDARG))

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

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

    (完全指定)LOG:Appbase=file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/Common7/IDE/LOG: Initial PrivatePath=NULL调用程序集:(未知)。 C:\Users\Adam\AppData\Local\Microsoft\VisualStudio\15.0\U fdc9bc52\devenv.exe.config文件 日志:使用主机配置文件:日志:使用计算机配置 文件来自 C:\窗口\微软.NET\框架\v4.0.30319\config\机器配置. 日志:此时未将策略应用于引用(私有, 以前见过,但失败,hr=0x80070002。

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

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

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

    VS从哪里得到这个旧版本号?如果我知道VS在哪里读取这个版本号,我可以清除它或更改它。它不可能组成这个号码,但我找不到它存放的地方。

    1 回复  |  直到 7 年前
        1
  •  1
  •   MindModel    7 年前

    TLDR:这是我的错,不是visualstudio的错。也就是说,一个更具可读性的异常将节省我大量的调试时间。

    这个例外是因为我最近修改了我的解决方案,将许多项目引用更改为引用库文件夹中的dll,而不是引用同一解决方案中的其他项目。

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

    我假设如果我把所有的项目引用都设置为不需要特定的版本,它就可以正常工作了。

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