System.Reflection.MissingRuntimeArtifactException - 处于发布模式
System.Reflection.MissingRuntimeArtifactException - in release mode
我正在尝试编译 UWP 应用程序。它在调试模式下 运行 没问题,但是在发布模式下尝试 运行 它时我得到这个错误:
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 中打入异常时也得到这个信息(仍然是 release 模式):
ExecutionEnvironment.cs not found
我在 SO 中找到了类似的 issue/solution,但这对我来说不起作用:
我正在使用 UWP SDK 1.1。
更新:我还发现了这个:http://dotnet.github.io/native/troubleshooter/method.html#
...但我不确定这是否是答案,也不确定如何根据上面提供的信息使用该工具。
更新 2:.NET Native 一般故障排除:https://msdn.microsoft.com/en-us/library/dn600643(v=vs.110).aspx
我找到了解决办法。事实证明,这与 AutoMapper 和 .NET Native 的特定组合有关。在这种特殊情况下,更改运行时指令是一个弯路。
在我的代码中,我有一个 AutoMapper 配置,看起来像这样:
Mapper.CreateMap<SomethingGood, ISomething>().As<SomethingBetter>();
当应用程序未编译为 .NET Native 工具链时(即 运行 在调试模式下),此方法有效。但是,在编译发布时,此 AutoMapper 代码会中断。
此外,在 class SomethingBetter 中,我定义的属性比在 ISomething 和 SomethingGood class 中定义的属性更多。这是一个错误,但在调试模式下没有引起注意。编译为 .NET Native 时,应用程序会抛出 'System.Reflection.MissingRuntimeArtifactException'。
为了追踪这个错误,我使用了 .NET Native 调试引擎。如果不使用它,几乎不可能找出异常的根本原因。
这篇博客 post 很好地解释了如何使用 .NET Native 调试器: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;
}
我正在尝试编译 UWP 应用程序。它在调试模式下 运行 没问题,但是在发布模式下尝试 运行 它时我得到这个错误:
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 中打入异常时也得到这个信息(仍然是 release 模式):
ExecutionEnvironment.cs not found
我在 SO 中找到了类似的 issue/solution,但这对我来说不起作用:
我正在使用 UWP SDK 1.1。
更新:我还发现了这个:http://dotnet.github.io/native/troubleshooter/method.html#
...但我不确定这是否是答案,也不确定如何根据上面提供的信息使用该工具。
更新 2:.NET Native 一般故障排除:https://msdn.microsoft.com/en-us/library/dn600643(v=vs.110).aspx
我找到了解决办法。事实证明,这与 AutoMapper 和 .NET Native 的特定组合有关。在这种特殊情况下,更改运行时指令是一个弯路。
在我的代码中,我有一个 AutoMapper 配置,看起来像这样:
Mapper.CreateMap<SomethingGood, ISomething>().As<SomethingBetter>();
当应用程序未编译为 .NET Native 工具链时(即 运行 在调试模式下),此方法有效。但是,在编译发布时,此 AutoMapper 代码会中断。
此外,在 class SomethingBetter 中,我定义的属性比在 ISomething 和 SomethingGood class 中定义的属性更多。这是一个错误,但在调试模式下没有引起注意。编译为 .NET Native 时,应用程序会抛出 'System.Reflection.MissingRuntimeArtifactException'。
为了追踪这个错误,我使用了 .NET Native 调试引擎。如果不使用它,几乎不可能找出异常的根本原因。
这篇博客 post 很好地解释了如何使用 .NET Native 调试器: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;
}