2016-01-12 46 views
2

我開發了一個簡單而小巧的使用EF7和SQLite的通用Windows應用程序。當選項「編譯.NET本地工具鏈」未選中時,它編譯並運行順利。UWP - .NET本機工具鏈編譯錯誤

如果我勾選「與.NET本地工具鏈編譯」,我得到以下編譯錯誤:

Error Type 'System.MarshalByRefObject' was not included in compilation, but was referenced in type 'Microsoft.Data.Entity.Design.OperationExecutor'. There may have been a missing assembly.

還有很多其他錯誤之後,但我相信,解決這個問題也會解決其餘問題。

有誰知道如何解決這個問題?

+0

只需將該類型添加到Default.rd.xml並再試一次。 –

+0

我該怎麼做,在哪裏? – Daniel

+0

來吧人,我開始與.NET和C#。沒人知道一切。既然你知道這麼做很熱,我相信這對告訴我沒有任何問題。我已經在google中輸入過,發現這個文件在我的項目的屬性文件夾中。事情是我不知道如何添加「System.MarshalByRefObject」引用。 – Daniel

回答

4

我認爲發生的事情是您使用的庫不針對UWP可用的.NET表面區域。 UWP的表面區域是一組名爲.NET Core的API,您可以在這裏看到源代碼:http://www.github.com/dotnet/corefx。很可能你需要一個更新版本的EF ......雖然我知道他們在我們提前編譯策略時遇到了一些其他問題(請參閱:https://github.com/aspnet/EntityFramework/issues/3603)。我們正在繼續與他們合作,以便將其整理出來,並希望在3月份的某個時候,EF將在Update 2中佔據一席之地。

您只能在.NET Native中看到這一點的原因是因爲編譯器在編譯時遍歷整個應用程序,以便爲它認爲您要調用的所有內容生成本機代碼。它恰巧注意到這種類型不可用並且正確地出錯。我認爲你實際上並沒有在你的應用程序中調用這個代碼路徑,因爲它會在CoreCLR上產生類似的錯誤......它只會在運行時發生,而不是編譯時間。

如果你實際上並不需要這種類型(以及其他所有你不需要的類型等等),那麼從你的應用程序中刪除這個指令可能會讓樹形結構消除你的這種類型事情之前申請出差錯:

<Assembly Name="*Application*" Dynamic="Required All" /> 

該指令使所有在你的應用程序類型和您引用非框架庫的植根,從而無法被動搖了。默認情況下有這條指令可以讓我們的分析變得更容易,並且讓大多數人不必瞭解我們的分析引擎。刪除這可能有助於避免此問題。

讓我知道這是否解決或如果您有任何其他問題。我們一直很想獲得反饋,並通過[email protected]提供一些支持。

+0

我已經刪除了,並且應用程序編譯正常(經過很長時間的等待),「Compile with .NET Native工具鏈「選項被選中。現在的問題是,當我運行「appcertui.exe」的應用程序卡住在測試midle。我想我會創建一個沒有EF和SQlite的邊項目(可能會將數據保存在一個ini文件中),直到EF獲得更穩定的版本。 – Daniel

+1

如果AppCertUI失敗是一致的,我很樂意將它發送給MS中的某個人。您可以使用上面的電子郵件直接與我聯繫。 –