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

... 「在地方更換......」 我....


這是答案的重新發布我給了一個重複的問題。我在這裏發佈,因爲這個線程得到了更多的關注,現有的答案在這裏沒有解決這個問題。

相關問題