2

我正在發佈此問題,以便我可以記錄解決方案,因爲我發現解決方案非常棘手且耗時。EntryPointNotFoundException - 在Expression Blend中加載MVVM Light視圖時未找到入口點4

我使用在Silverlight 4項目Laurent Bugnion's優秀MVVM Light Toolkit,我用他的ViewModelLocator模式與Microsoft.Practices.ServiceLocation。 ServiceLocator爲可混合性加載設計時間模型。最初將視圖加載到Expression Blend 4正在工作,設計時數據綁定非常好。這在Blend中完全沒有任何錯誤信息的情況下停止工作。

我用Visual Studio 2010 SP1附加到Blend.exe調試問題。該EntryPointNotFoundException(入口點未找到)異常在這行代碼被拋出:

return ServiceLocator.Current.GetInstance<ExampleViewModel>(); 

奇怪的是,我能夠加載成功地與我的設計時間在Visual Studio XAML設計在同一視圖數據綁定正常工作。我使用另一個Visual Studio實例將調試器附加到承載XAML設計器的Visual Studio實例,並能夠確認ServiceLocator調用成功執行。

異常詳細信息(堆棧跟蹤,InnerExcetion等)沒有給我任何進一步的線索問題和各種互聯網搜索無益的錯誤消息未能擺脫任何進一步的光芒。

我終於幸運通過使用Visual Studio的即時窗口執行的是造成問題的代碼行的一部分,並得到了更好的錯誤消息:

?ServiceLocator.Current 

類型「Microsoft.Practices。 「Microsoft.Practices.ServiceLocation.dll」和「Microsoft.Practices.ServiceLocation.dll」中都存在ServiceLocation.ServiceLocator'

將變更集與以前的代碼進行比較我注意到我已經添加了對GalaSoft.MvvmLight的引用。 Extras.SL4在單獨的Unit Test Framework for Silverlight項目中(它引用了UI項目)。此測試項目引用來自C:\ Program Files(x86)\ Laurent Bugnion(GalaSoft)\ Mvvm Light Toolkit \ Binaries \ Silverlight4的程序集,其中作爲UI項目引用來自.. \ packages \ MvvmLightLibsPreview.4.0.0 \ LIB \ SL4。我曾使用nugetMvvmLightLibsPreview將MVVM Light添加到客戶端項目。

混合結果 - 錯誤和輸出Windows在任何時候都沒有顯示任何錯誤消息。顯然沒有真正的答案,除非有一些混合故障拍攝技術,這將幫助我更快地找出問題。

+0

非常有趣的主窗口設計數據信息。我不使用nuget,因爲它還不夠成熟,這個例子顯示了它。 nuget成功運行的唯一方法是它接管整個解決方案中每個項目的引用添加機制。在這種情況發生之前,選擇錯誤的軟件包和軟管很容易。不過,它的出現是因爲它們以前沒有解決方案級別的軟件包,這是朝正確方向邁出的一步。 –

+0

@mikepost我不確定這是一個nuget問題。最初在客戶端UI項目中使用了Nuget,之後我添加了一個單元測試Silverlight項目,我手動引用了不同的程序集。如果我在這個單元測試項目中也使用了Add-Package,那麼問題就不會發生。容易造成用戶錯誤,但仍然是用戶錯誤。令人沮喪的是缺乏好的錯誤信息。我以後也只把2和2放在一起,並意識到這個問題導致我的單元測試出現問題,但帶來了不同的錯誤消息。 –

回答

0

如您所料,將測試項目的MVVM Light程序集引用更改爲使用客戶端UI項目使用的相同nuget程序包版本可修復此問題。我不知道爲什麼Visual Studio沒有兩個版本的Microsoft.Practices.ServiceLocation.dll被引用的方式與Blend相同。

1

我有幾乎相同的問題,雖然我的問題沒有消失,直到我卸載MVVM光使用Windows 7控制面板。NuGet MVVM Light引用仍在項目中,但現在我可以看到設計時間數據。它之前被打破了。

我遵循了MVVM Light網站上的建議,並附加了Visual Studio 2012的Blend預覽,並收到了上面提到的錯誤(EntryPointNotFoundException)。我甚至不知道我應該嘗試刪除兩個彼此衝突的不同版本的MVVM Light。

0

我最終想了,將來自的NuGet到

C中的包的全部內容複製:\程序文件(x86)\洛朗•比尼翁(GalaSoft)\ MVVM光 工具包\二進制文件

這並沒有解決問題。 由於卸載MVVM Light帶走了其他內容,如片段,因此我決定返回並排除其他問題。我沒有成功,只能找到一個粗略的臨時解決方案。

我想比較,將工作,不會看在四個DLL文件的工作項目和項目:

GalaSoft.MvvmLight.Extras.WPF4 GalaSoft.MvvmLight.WPF4 Microsoft.Practices.ServiceLocation系統.Windows.Interactivity

我在版本中看不到任何區別。

因此,目前的工作是在Visual Studio 2012中使用MVVM Light WPF模板開始一個新項目,構建它,然後移除對上述四個DLL的引用。然後,我從NuGet安裝MVVM Light包,並編輯App.xaml中視圖模型定位器的雙重入口,然後該程序正常工作。在這一點上,我可以看到它說

「歡迎MVVM光[設計]」