【问题标题】:.NET Framework 3.0 App on Windows XP SP3 with .NET Framework 4.0带有 .NET Framework 4.0 的 Windows XP SP3 上的 .NET Framework 3.0 应用程序
【发布时间】:2011-09-09 18:44:17
【问题描述】:

我的应用具有 3.0 的 Target .NET Framework。

我有一台全新安装了 Windows XP SP3 的 PC。接下来,我在上面安装了 .NET Framework 4.0 Full。

当我尝试运行 ClickOnce 部署的应用程序时,我收到 “无法加载运行时” 错误:

[9/9/2011 11:39:53 AM] System.Runtime.InteropServices.COMException
    - Failed to load the runtime. (Exception from HRESULT: 0x80131700)
    - Source: System.Deployment
    - Stack trace:
        at System.Deployment.Application.NativeMethods.IClrMetaHostPolicy.GetRequestedRuntime(MetaHostPolicyFlags policyFlags, String binaryPath, IStream configStream, StringBuilder version, Int32& versionLength, StringBuilder imageVersion, Int32& imageVersionLength, Int32& pdwConfigFlags, Guid interfaceId)
        at System.Deployment.Application.NativeMethods.GetAssemblyCacheInterface(String CLRVersionString, Boolean FetchRuntimeHost, CCorRuntimeHost& RuntimeHost)
        at System.Deployment.Application.PlatformDetector.VerifyPlatformDependencies(AssemblyManifest appManifest, AssemblyManifest deployManifest, String tempDir)
        at System.Deployment.Application.ApplicationActivator.DownloadApplication(SubscriptionState subState, ActivationDescription actDesc, Int64 transactionId, TempDirectory& downloadTemp)
        at System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState& subState, ActivationDescription actDesc)
        at System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
        at System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)

据我了解,以 .NET 3.0 为目标的应用程序应该可以在安装了 .NET 4.0 的机器上运行。是什么导致了这个错误?我必须在 Windows XP 机器上安装 .NET Framework 3.5 SP1 吗?

【问题讨论】:

  • 我想我可以编写一个自定义的先决条件和 A) Check if user has .NET Framework 3.0 installed。 (新版XP没有,新版Vista有,新版Win 7有) B)如果没有安装.NET 3,安装3.5。
  • 好的,成功了。为什么应用程序不能正常运行(在带有 .NET 4.0 的 XP SP3 上)对我来说没有意义。

标签: c# .net .net-4.0 clickonce .net-3.0


【解决方案1】:

是的,我会安装 .NET Framework 3.5 并重试,如果它不起作用,我会安装 3.0 (Microsoft .NET Framework 3.0 Redistributable Package)。

.NET 3.5 SP1 和 .NET 4 都存在于我们部署应用程序的机器中。

编辑:

还要检查这些问题:

What .NET Framework version should I ship with; 2, 3, 3.5?

Is .net framework 2.0 required if 3.5 is installed?

【讨论】:

  • 呸。这是一个商业应用程序(任何人都可以在网上下载)。如果用户已经安装了 .NET Framework 4.0,我不想要求下载和安装 .NET Framework 3.5!我是否必须编写一个自定义引导程序来检查用户是否在 XP 上,如果是,则需要 3.5?
  • 您可以控制此应用程序吗?那是你的吗?您可以针对 .NET 3.5 或 .NET 4 吗?
  • 当然可以——但我不希望 Vista 用户无缘无故地下载 .NET 3.5 或 4.0。 (.NET 3.0 随 Vista 一起提供,这就是为什么我们将目标定为 3.0 以尽量减少下载和安装时间)
  • 正如您在另一条评论中所说,因为它在安装 .NET 3.5 时可以工作,所以我会将 .NET 3.5 作为安装程序中的先决条件,所以没有它的人会下载它。如果您不以框架 4 为目标,那么在具有 .NET 4 的机器上也需要 3.5。这很可能只发生在旧机器上,Vista 和 Windows 7 及其服务包已经有 3.5 和 4.0 我认为。
  • 明白你的意思。阅读这篇文章:blogs.msdn.com/b/tims/archive/2008/03/19/… 他们解释说 Vista SP1 有 .NET 3.0 SP1,它也执行 .NET 3.5,所以如果用户有 Vista SP1,你绝对可以在你的代码中定位 .NET 3.5。
【解决方案2】:

正如 Davide Piras 所说,您需要安装 .NET 3.0。您需要这样做的原因是 .NET 4 不是 3.5/3.0/2.0 库的依赖超集。

.NET 3.5 是 3.0 库加上一些额外的库。 .NET 3.0 是 2.0 库加上一些额外的库

但是,.NET 4 是一组全新的库,与 2.0/3.0/3.5 并行存在。我相信这是 .NET 4 使用比 2.0/3.0/3.5 新的 CLR 运行时的结果。 2.0/3.0/3.5 都使用相同的运行时,因此每个新版本都需要安装之前的版本。

【讨论】:

    【解决方案3】:

    这是一个 COMException,所以我会说可能是组件设置不正确。

    在发布选项卡下检查您的项目属性。在 Application Files 中,选中 Show All Files 并确保您需要的所有文件都标记为包含。

    在那里,您还可以要求应用程序下载所需的组件(例如适当的框架)。

    这种误导性的错误信息过去曾发生在我身上。也可能只是其他回复所述的框架。

    【讨论】:

    • 我认为这与 COM 无关。如果安装了 .NET Framework 3.5,则可以正常工作...
    猜你喜欢
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2017-11-13
    相关资源
    最近更新 更多