我正在Windows 7上使用AutoMapper开发.NET 4.0
应用程序。今天我从SVN
获取源代码到新的Windows 8计算机,构建然后运行应用程序,它引发了我:
InvalidProgramException:公共语言运行时检测到无效 程序
我重建源代码,它在所有其他三台Windows 7机器上运行良好。我想这对Windows 8很重要。我编写了以下小型控制台应用程序。我在Windows 8上构建了源代码,它在Windows 7上运行良好,但在Windows 8上运行不佳。所以它是关于Windows 8上运行时的东西。看起来只有一个错误的枚举类型,其底层类型不是默认值type,Int32。
谷歌搜索后,人们说这是关于JIT编译器,但我仍然不知道。我在Windows 7和Windows 8上都使用VS 2010目标.NET 4.0。在Windows 8中是否有任何更改?我正在阅读AutoMapper的源代码。我认为C#或CLI确实有问题。希望你能给出一些线索。感谢。
class Program
{
enum PriorityModel { High, Normal, Low }
enum PriorityDto { High, Normal, Low }
enum PriorityModel2 : byte { High, Normal, Low }
enum PriorityDto2 : byte { High, Normal, Low }
enum PriorityModel3 : short { High, Normal, Low }
enum PriorityDto3 : short { High, Normal, Low }
static void Main(string[] args)
{
Mapper.CreateMap<PriorityModel, PriorityDto>(); // OK
Mapper.CreateMap<PriorityModel2, PriorityDto2>(); // [InvalidProgramException: Common Language Runtime detected an invalid program.]
Mapper.CreateMap<PriorityModel3, PriorityDto3>(); // [InvalidProgramException: Common Language Runtime detected an invalid program.]
Console.Read();
}
}
异常堆栈跟踪:
[InvalidProgramException: Common Language Runtime detected an invalid program.]
System.Runtime.CompilerServices.RuntimeHelpers._CompileMethod(IRuntimeMethodInfo method) +0
System.Reflection.Emit.DynamicMethod.CreateDelegate(Type delegateType, Object target) +43
System.Linq.Expressions.Compiler.LambdaCompiler.CreateDelegate() +81
System.Linq.Expressions.Compiler.LambdaCompiler.Compile(LambdaExpression lambda, DebugInfoGenerator debugInfoGenerator) +205
AutoMapper.DelegateFactory.CreateGet(FieldInfo field) +156
AutoMapper.Internal.FieldGetter..ctor(FieldInfo fieldInfo) +60
AutoMapper.ReflectionHelper.ToMemberAccessor(MemberInfo accessorCandidate) +124
AutoMapper.TypeMapFactory.CreateTypeMap(Type sourceType, Type destinationType, IMappingOptions options, MemberList memberList) +269
AutoMapper.ConfigurationStore.CreateTypeMap(Type source, Type destination, String profileName, MemberList memberList) +86
AutoMapper.ConfigurationStore.CreateMap(String profileName, MemberList memberList) +45
AutoMapper.ConfigurationStore.CreateMap() +13
AutoMapper.Mapper.CreateMap() +51