2015-09-20 176 views
2

我試圖編譯UWP應用程序。它運行正常在調試模式,而是試圖在發佈模式下運行它時,我得到這個錯誤:System.Reflection.MissingRuntimeArtifactException - 在發佈模式下

Exception thrown: 'System.Reflection.MissingRuntimeArtifactException' in System.Private.Reflection.Core.dll

Additional information: MakeGenericMethod_NoMetadata, System.Linq.Enumerable.Distinct <System.Int32> (System.Collections.Generic.IEnumerable <System.Int32 >).

當在VS2015除了打破也得到這個消息(仍然釋放模式):

ExecutionEnvironment.cs not found

我在SO中發現了一個類似的問題/解決方案,但在我的情況下不起作用:https://stackoverflow.com/a/31548178/4140832

我正在使用UWP SDK 1.1。

更新:我也發現了這一點:http://dotnet.github.io/native/troubleshooter/method.html#

...但我不確定這是否是答案,不知道該如何根據上面提供的信息,使用的工具。

更新2:.NET原生一般故障排除:https://msdn.microsoft.com/en-us/library/dn600643(v=vs.110).aspx

回答

0

我找到了解決辦法。事實證明,這與AutoMapper和.NET Native的特定組合有關。在這種特殊情況下,更改運行時指令是一種繞行方式。

在我的代碼我有一個AutoMapper配置看起來是這樣的:

Mapper.CreateMap<SomethingGood, ISomething>().As<SomethingBetter>(); 

當應用程序不是編譯成.NET本地工具鏈這個工程(即在調試模式下運行時)。但是,編譯發佈時,AutoMapper代碼會中斷。

另外,在類SomethingBetter中,我定義了比ISomething和SomethingGood類中定義的更多的屬性。這是一個錯誤,但它在調試模式下沒有被注意到。編譯爲.NET Native時,應用程序會拋出'System.Reflection.MissingRuntimeArtifactException'。

爲了追蹤這個錯誤,我使用了.NET Native調試引擎。沒有使用這個,就幾乎不可能發現這是例外的根本原因。

本博客文章解釋使用.NET本機調試非常漂亮:http://blogs.msdn.com/b/visualstudioalm/archive/2015/07/29/debugging-net-native-windows-universal-apps.aspx

而且,把這個try/catch語句都結束了AutoMapper.Mapper.CreateMap的是非常有益的追查引起的屬性問題:

 try 
     { 
      AutoMapper.Mapper.AssertConfigurationIsValid(); 
     } 
     catch (Exception ex) 
     { 

      throw ex; 
     } 
相關問題