2015-09-20 5 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.

UPDATE: Я также нашел это: http://dotnet.github.io/native/troubleshooter/method.html#

... но я не уверен, если это ответ и не знаете, как использовать инструмент на основе информации, представленной выше.

UPDATE 2: .NET Native Поиск и устранение неисправностей: https://msdn.microsoft.com/en-us/library/dn600643(v=vs.110).aspx

ответ

0

Я нашел решение. Оказалось, что это связано с конкретной комбинацией AutoMapper и .NET Native. В этом конкретном случае изменение правил Runtime было обходным.

В моем коде я имел конфигурацию AutoMapper, которая выглядит примерно так:

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

Это работает, когда приложение не компилируется в цепочке инструментов .NET Native (т.е. при работе в режиме отладки). Однако при компиляции для выпуска этот код 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

Кроме того, поставив это попробовать/поймать в конце всех AutoMapper.Mapper.CreateMap были очень полезно отследить свойства, обусловливающие выпуск:

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

      throw ex; 
     } 
Смежные вопросы