12

我的计算机上安装了VS2010和VS2012,并且安装了.NET Framework 4.0,然后我升级到.NET Framework 4.5。但是,我仍在开发需要在.NET Framework 4.0上工作的应用程序。该项目表示它针对的是.NET Framework 4(客户端配置文件),程序集甚至指向.NET Framework 4.0文件夹下的引用程序集。当我将这个应用程序移动到只有4.0的机器上时,问题出现了,它不会启动,并且出现错误,因为WindowState={Binding WindowState}产生的异常是你在4.0中无法做到的,但是你可以在4.5中发生。我需要这个在我的开发箱上抛出异常,为什么不呢?我的假设是,尽管我最大的努力是它使用了4.5个dll,如果它们存在的话。如何在不卸载4.5的情况下真正使用4.0?在安装Framework 4.5时定位到.NET Framework 4

更新

要瑞普此安装.NET Framework 4.5,并创建一个WPF项目针对的.NET Framework 4.0。将WindowState绑定到虚拟机或代码中的一个属性,使该属性具有公共获取和私有集合。即使Mode = TwoWay必须忽略集合.NET Framework 4,.NET Framework 4.5也可以处理这种情况,并引发异常:“TwoWay或OneWayToSource绑定无法在类型的只读属性'State'上运行。 “。在使用.NET Framework 4.5的机器上,它的功能就像是在一台只有.NET Framework 4.0的机器上试用它,并且它爆炸了......所以,有关如何在安装4.5时真正瞄准4.0的任何想法?

到MS这里的Bug报告:https://connect.microsoft.com/VisualStudio/feedback/details/774694/targeting-net-framework-4-0-when-4-5-doesnt-seem-to-work

+0

如果您的目标是.NET 4.0,那么为什么您的代码只能使用.NET 4.5中的某些功能? –

+2

假设这是准确的(我怀疑它),它不会在您的开发箱上抛出异常,因为您不再安装.NET 4.0。 .NET 4.5取代了它。 –

+0

@John:他不知道它只能在4.5中工作。即使用户恰好安装了.NET 4.5,他也希望发生异常。 – Cameron

回答

3

时间踢了这个问题。我不是WPF专家,不太喜欢这些问题,调试依赖属性问题是一场噩梦。但我很确信你正在追逐鬼魂。 WindowState一直是一个依赖属性,一直到3.0,在4.5中我没有发现任何特殊的事情,我可以看到或听说过。

你得到了一些错误信息,没有人能看到,说服你和绑定有关。我来自密苏里州,显示我的状态。那么,足够接近威斯康星州。

花更多时间处理代码,这些代码可为您提供可靠的异常消息和堆栈跟踪,帮助您诊断部署到的计算机上的错误,无需调试器即可帮助您找出问题所在。您可以通过编写AppDomain.CurrentDomain.UnhandledException事件的事件处理程序来完成此操作。记录或显示e.ExceptionObject.ToString()返回值。它为您提供异常消息和Holy Stack Trace。如果这没有帮助,那就用你所看到的更新你的问题。

+0

我不能在样本项目中得到这个回购,所以猜测它抱怨的窗口状态是别的东西的结果,但在开发盒它工作得很好。在测试框上引发异常,但是如果我在测试框上安装了.NET Framework 4.5,则工作正常。所以在.NET Framework 4.0和.NET Framework 4.5之间有明显不同的行为。 – user1914199

+1

我非常明确地表明我的态度。我解释了你需要做什么来展示它。仍然看不到任何东西。给我看看。 –

+0

这实际上是我们在开发团队中重现的一个错误。所以肯定存在。 – MaYaN

0

你说你不能在测试项目中重现这一点。所以这意味着它可能是应该在4.0正常工作?你可能有一些代码在4.0版本中崩溃,这个问题已经在4.5中修复了。如果您的目标是4.0,那么当您尝试使用编译器可以确定的API /功能在4.0中不受支持时,您将只会收到警告。

应该在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的。

+0

查看关于这个问题的更新,我能够在一个测试项目中重现它,并且没有警告说它不适用于.NET 4.0(但思路清晰)。绑定到只读属性似乎相当重要,你会认为他们会抓住这一点。您可以通过链接到MS错误并暂停附件来获得测试项目。 – user1914199

+0

如果从Visual Studio运行/调试项目为该目标版本使用某种.NET运行时快照,那将会非常好。但是,定位并不打算这样做。有些东西根本不能被编译器捕获。在定位特定框架时,​​它只能捕获在该版本中不存在的内容,例如使用API​​,类型,特定函数重载等。编译器无法运行代码并查看它是否会出现会引发异常的路径。沿着类似的路线,配置转换在运行/调试期间没有影响,使得它们难以测试:( – AaronLS

0

.NET 4.5内容替换.NET 4.0新,同名库,实际上有一些修正。 这就是简短的答案。

与早期版本不同,将.net 4更新为4.5将替换文件,而不是通过侧面文件添加。 即使您有像这样的文件夹Windows/Microsoft.Net/Framework/v40 /, 更新后,此文件夹中有更改。 文件被更改,某些错误在.net中处理,没有开发人员的关注。

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

提出建议阅读关于这个主题:

斯科特Hanselman的: 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

0

解决办法:

VS2015安装VS2017时,我已经得到了同样的问题:框架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快速https://www.microsoft.com/en-us/download/details.aspx?id=44914

安装后,只需打开VS2015,你会看到4.0再次。

enter image description here

... “在地方更换......” 我....


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

相关问题