.NET Framework 4.0.3 作为 ClickOnce 包中的先决条件

.NET Framework 4.0.3 as a Prerequisite in ClickOnce package

我有一个面向 .NET 4.0 的应用程序,打包为 ClickOnce 部署——使用 VS 2015 Enterprise 构建。仅安装 4.0 即可正常安装,但在测试中我发现该应用程序需要更新 4.0.3 (KB2600211) 才能正常工作。

如何使此更新成为安装软件的先决条件?它似乎不是一个选项:

此时我还没有真正找到解决方案,但我想出了这个相当笨拙的解决方法。基本上,我找到了在没有此更新的系统上引发错误的应用程序启动代码部分,并将其包装在特殊的错误处理代码中。在该错误处理程序中,我只是对当前运行时版本进行手动检查,如果失败,我会向用户显示特定的错误消息。

private static string InvalidFxVerMessage = 
    "This application requires .NET Framework v{0} or later but has detected that your system is running v{1}.\n\n" +
    "Please contact your system administrator to install the following components: \n" +
    "\u2003\u2022 Update 4.0.3 for Microsoft .NET Framework 4 – Runtime Update (KB2600211)"

private void InitializeApp()
{
    try
    {
        // Run some code that throws an exception if update 4.0.3 is not installed.
    }
    catch (Exception)
    {
        var envVers = Environment.Version;
        var reqVers = new Version(4, 0, 30319, 551);
        if (envVers < reqVers)
        {
            var msg = string.Format(InvalidFxVerMessage, reqVers, envVers);
            MessageBox.Show(
                msg,
                "Unsupported Framework Version",
                MessageBoxButton.OK,
                MessageBoxImage.Error);
            Environment.Exit(0);
        }

        throw;
    }
}

这不是很好,我很想找到一个更好的解决方案,但这至少告诉用户到底出了什么问题,并向他们提供了如何修复它的指示。