【问题标题】:"Could not resolve mscorlib ... .NETFramework,Version=v2.0" in VS2015 from VB6VB6 VS2015 中的“无法解析 mscorlib ....NETFramework,Version=v2.0”
【发布时间】:2019-09-17 23:08:03
【问题描述】:

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

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

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

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

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) 

如何才能在 Designer 中查看我的项目?

【问题讨论】:

  • 其他人报告以下对他们有用: 1. 删除并添加回有警告的项目引用。 2. 重建项目 3. 删除并重新添加 Microsoft.Office.Core
  • 你能更新到更新的框架吗?我转换的所有 VB6 项目都立即更新。转换工具非常古老,这就是它们使用旧框架的原因。

标签: vb.net vb6 windows-forms-designer vb6-migration mscorlib


【解决方案1】:

据我所知,在 VB.NET 中打开 VB6 文件不起作用。您必须在 Visual Studio 6.0 中进行修改或在 VB.NET/C# 中重新编写应用程序。

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

您可以查看Visual Basic Tools for Visual Studio,它“允许在 Visual Studio 中使用经典的 VB 工作区和项目。”,这将允许您在较新版本的 Visual Studio 中修改 VB6 项目,但是 代码将保持为 VB6

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

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

祝你好运!

【讨论】:

  • 我的同事使用 VS2008 将 VB6 应用程序转换为 VB.NET,然后将该项目移至 VS2015。不幸的是,由于 MS 不再支持 VB6,我们无法在我的公司继续使用它。 (更像是“幸运”,但这确实意味着我们遇到了这个问题!)我会看看你分享的 VS 的 VB 工具,谢谢。
  • 您的同事之后所做的转换是否正常?我怀疑转换效果不佳,您将不得不清理它生成的 VB.NET 代码。 VB 工具只会在您使用原始 VB6 代码时为您提供帮助,并且根据我所阅读的内容,它仍然需要您安装 VB6 IDE。如果您不能在您的公司继续使用 VB6,也许不值得浪费您的时间。
  • 转换从未成功。我已将错误计数从约 400 减少到约 20,并且正在努力解决最后几个落后者,这就是其中之一。我处于不舒服的位置,他们要求我将 VB6 转换为 VB.NET,而且时间线太短,无法完全重写。所以我必须解决这个问题。
  • 祝你好运!!抱歉,我忍不住尝试发布更多您的代码,我们可能会看到一些东西。
  • VS2008 转换器足以让您入门,但之后总是需要手动清理工作。如果原始 VB6 项目将在机器上编译和运行,则效果最好——这意味着所有引用都很好,等等。
【解决方案2】:

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

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

Microsoft's VB6 support statement

【讨论】:

  • 我们需要能够维护应用程序。不再支持开发环境。当需要进行修复或更新时,仅仅能够运行现有部署是不够的。从头开始重写整个应用程序在我们的时间表上是不可行的,而不是解决一两个阻塞错误,甚至是困难的错误。
  • VB6 编程环境在 Windows 10 上安装和运行良好。就像自 1998 年以来在每个版本的 Windows 上一样。
  • 从头开始重写总是比尝试从一种语言转换为另一种语言更快。
猜你喜欢
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2018-06-07
相关资源
最近更新 更多