13

我的计算机上安装了 VS2010 和 VS2012,并安装了 .NET Framework 4.0,然后我将其升级到 .NET Framework 4.5。但是,我仍在开发需要在 .NET Framework 4.0 上运行的应用程序。该项目表示它的目标是 .NET Framework 4(客户端配置文件),这些程序集甚至指向 Referenced Assemblies 下的 .NET Framework 4.0 文件夹。当我将此应用程序移动到只有 4.0 的机器上时,问题就出现了,它不会启动并出现错误,直接的问题是导致WindowState={Binding WindowState}您无法在 4.0 中执行但您可以在 4.5 中执行的异常。我需要这个来在我的开发框上抛出异常,为什么不呢?我的假设是,尽管我尽了最大努力,但它使用 4.5 dll(如果存在)。如何在不卸载 4.5 的情况下让它真正使用 4.0?

更新

要重现此安装 .NET Framework 4.5 并创建一个面向 .NET Framework 4.0 的 WPF 项目。将 WindowState 绑定到 VM 中的属性或后面的代码使该属性具有公共获取和私有集。.NET Framework 4.5 可以很好地处理这个问题,即使 Mode=TwoWay 必须忽略设置的 .NET Framework 4 不会并引发异常:“TwoWay 或 OneWayToSource 绑定无法对类型的只读属性 'State' 起作用.. ."。在带有 .NET Framework 4.5 的盒子上,它就像一个魅力,在只有 .NET Framework 4.0 的机器上试一试,它就爆炸了……那么,关于在安装 4.5 时如何真正定位 4.0 有什么想法吗?

在此处向 MS 报告错误:https ://connect.microsoft.com/VisualStudio/feedback/details/774694/targeting-net-framework-4-0-when-4-5-doesnt-seem-to-work

4

5 回答 5

3

这似乎是 .NET Framework 4.5 中的一个错误,它应该引发异常,但安装了 .NET Framework 4.5 后,无法让您的应用程序在 .NET Framework 4.0 上运行,它将始终使用 4.5。

有关更多信息,请参阅此报告的错误: http ://connect.microsoft.com/VisualStudio/feedback/details/773682/wpf-property-with-private-setter-is-updated-by-a-twoway-binding

于 2012-12-20T19:23:12.560 回答
3

是时候提出这个问题了。我不是 WPF 专家,不太喜欢这类问题,调试依赖属性问题是一场噩梦。但我很确定你在追鬼。WindowState 一直是 3.0 的依赖属性,在 4.5 中我可以看到或听说过没有什么特别的事情发生。

你得到了一些没有人能看到的错误信息,这让你确信它与绑定有关。我来自向我展示的州密苏里州。好吧,离威斯康星州够近了。

花更多的时间在代码上,为您提供可靠的异常消息和堆栈跟踪,帮助您诊断部署到的机器上的错误,没有调试器的机器可以帮助您找出问题所在。为此,您可以为 AppDomain.CurrentDomain.UnhandledException 事件编写事件处理程序。记录或显示 e.ExceptionObject.ToString() 返回值。它为您提供异常消息和神圣堆栈跟踪。如果那没有帮助,请用您所看到的内容更新您的问题。

于 2012-12-18T22:38:52.640 回答
0

.Net 4.5 用新的同名库替换了 .net 4.0,这些库实际上有一些修复。这是简短的回答。

与早期版本不同,将 .net 4 更新到 4.5 会替换文件,而不是并排添加文件。即使你有这样的文件夹 Windows/Microsoft.Net/Framework/v40/ ,更新后,这个文件夹也会发生变化。文件已更改,在 .net 中处理了一些错误,无需开发人员关注。

如何使用 .net 4.5 定位 4.0 框架?我还不知道,但我还在挖掘

建议阅读此主题:

斯科特汉塞尔曼: http ://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

里克·斯特拉尔: http ://weblog.west-wind.com/posts/2012/Mar/13/NET-45-is-an-inplace-replacement-for-NET-40

和我创建的类似问题: https ://stackoverflow.com/questions/26483168/errors-on-net-4-0-dont-appear-on-net-4-5

于 2014-10-21T13:07:01.193 回答
0

你说你不能在测试项目中重现这个。所以这意味着它可能在 4.0中应该可以正常工作,对吧?您可能有一些代码组合在 4.0 中因错误而崩溃,该错误已在 4.5 中修复。当您以 4.0 为目标时,只有当您尝试使用编译器可以确定在 4.0 中不受支持的 API/功能时,您才会收到警告。

由于一些罕见的错误,应该在 4.0 中工作的东西可能会崩溃,然后在 4.5 中修复。当您的 4.0 目标应用程序在 4.5 环境下运行时,它将受到 4.0 中存在的功能的错误修复的影响。

4.0 可能会有包含错误修复的更新,以便在用户出于某种原因反对时不需要升级 4.5。因此,它甚至可能不是 4.5 的更改,而只是巧合,一些用户没有 4.0 的所有可用更新(这些更新将累积包含在您的 4.5 中)。

这种情况我很少遇到,但有时确实会发生,这也是支持桌面 .NET 应用程序的人臭名昭著的原因,因为他们要求用户更新 .NET 框架,作为第一次尝试解决奇怪问题,然后再花时间进行故障排除。

有时会发生相反的情况。您的代码仅由于 .NET API 的某些错误或不良行为而起作用,后来更新将其清除,也许在某处加强安全性是我见过的最常见的事情,并且您的代码由于次要版本更新而突然中断.NET 的。

于 2012-12-19T00:31:04.880 回答
0

解决方案:

在VS2015之后安装VS2017时我遇到了同样的问题:Framework 4.0 刚刚从项目目标列表中消失。

跟随这里的一些评论,我尝试过使用 NuGet 包:Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.4 和 bin fix for 1.0.1。

不要那样做!对于同一个项目,我的构建时间增加了约 300%。这是一场灾难。

我看到 4.5 是 4.0 的“就地替换”但是这并不能解释为什么我在目标框架组合中看不到这两个选项。

我在网上读到同样的咒语。这根本不是问题的答案。框架 4.0 是任何工业机械相关软件的必备- 因为它运行在 Windows XP 上,而 .NET 4.5。在我的场景中是无用的,可能对于许多其他现实生活中的东西。

解决方案很简单:您只需从官方网页 下载并安装 Visual Studio 2013 Express : https ://www.microsoft.com/en-us/download/details.aspx?id=44914

安装好之后,只要打开你的VS2015,你就会再次看到4.0

在此处输入图像描述

......“就地替换......”我的......


这是我在重复问题上给出的答案的重新发布。我在这里发帖是因为这个帖子得到了更多的关注,而这里的现有答案没有解决这个问题。

于 2017-05-09T18:45:55.173 回答