"Could not resolve mscorlib ... .NETFramework,Version=v2.0" 在 VS2015 中来自 VB6

"Could not resolve mscorlib ... .NETFramework,Version=v2.0" in VS2015 from VB6

我的问题与其他问题类似,但到目前为止,我对这个问题的特殊细微差别似乎没有我可以在这里找到的答案,所以这里开始吧。 (以斜体字编辑

我们公司部署了一个用VB6编写的应用程序。由于 Windows 不再正式支持 VB6 开发,我们公司决定将我们的 VB6 应用程序移植到 VB.NET。

(在此编辑之前,我提到该项目是使用 VS 2015 转换为 VB.NET。这是不正确的,我发现我的同事实际上已经使用 VS 2008 执行了转换,而我是2015 年在做 2008 年的项目。)

所以我们现在在 VS2015 中使用 VB.NET 转换。正如我们许多人所知,VS 2008 转换器将 VB6 代码移植到 VB.NET 代码的工作并不完整,因此有很多很多错误需要整理(截至撰写本文时,所有编译错误都已修复)。 但是,特别是,我试图在设计器中打开项目的各种表单,以便我可以查看和使用它们。设计者特意报错:

Could not resolve mscorlib for target framework '.NETFramework,Version=v2.0'. This can happen if the target framework is not installed or if the framework moniker is incorrectly formatted.

我看到有人提到依赖路径的 256 个字符限制。在我的案例中满足了这种依赖性。我还确认 .NET Framework 2.0 已安装并在我的 Windows 实例中处于活动状态。我也看到了升级 .NET Framework 版本的建议,这本身是成功的,但没有解决这个 mscorlib 问题。

此错误的完整调用堆栈如下:

at Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkUniverse..ctor(IDesignTimeAssemblyLoader assemblyLoader, IVsDesignTimeAssemblyResolution projectAssemblyResolution, IVsSmartOpenScope dispenser)
at Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkUniverse.GetUniverse(IDesignTimeAssemblyLoader assemblyLoader, IVsDesignTimeAssemblyResolution projectAssemblyResolution, IVsSmartOpenScope dispenser)
at Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkProvider..ctor(IVsDesignTimeAssemblyResolution assemblyResolution, IDesignTimeAssemblyLoader assemblyLoader, TypeDescriptionProvider parentProvider, IVsSmartOpenScope openScope)
at Microsoft.VisualStudio.Design.VsTargetFrameworkProviderService.get_TargetFrameworkProvider()
at Microsoft.VisualStudio.Design.VsTargetFrameworkProviderService.GetProvider(Type type)
at System.ComponentModel.Design.Serialization.DesignerSerializationManager.GetType(String typeName)
at System.ComponentModel.Design.Serialization.DesignerSerializationManager.System.ComponentModel.Design.Serialization.IDesignerSerializationManager.GetType(String typeName)
at System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload) 

如何才能在设计器中查看我的项目?

据我所知,在 VB.NET 中打开 VB6 个文件将不起作用。您将必须在 Visual Studio 6.0 中进行修改或在 VB.NET/C#.

中重新编写应用程序

Visual Studio 的旧版本(直到 2008 年)有一些转换器,但它们从未真正按预期工作。

您可以查看 Visual Basic Tools for Visual Studio,它 "allows to work with classic VB workspaces and projects within Visual Studio.",这将允许您在更新版本的 Visual Studio 中修改 VB6 项目,但是 代码将保留 VB6.

关于您的确切问题,其他人报告说以下方法对他们有效:

  1. 删除并添加回有警告的项目引用。
  2. 重建项目
  3. 删除并重新添加 Microsoft.Office.Core

祝你好运!

作为将许多 VB6 应用程序转换为 VB.Net 的人,我总是建议完全重写。语言差别太大了。您在解决此类问题上浪费了太多时间。

更好的是,让 VB6 应用程序 运行 保持原样。

Microsoft's VB6 support statement