- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下代码:
AssemblyBuilder newAssembly = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("CustomAssembly"), AssemblyBuilderAccess.Run);
ModuleBuilder newModule = newAssembly.DefineDynamicModule("CustomModule");
TypeBuilder newType = newModule.DefineType("CustomType", TypeAttributes.Public);
MethodBuilder newMethod = newType.DefineMethod("GetMessage", MethodAttributes.Public, typeof(string), Type.EmptyTypes);
byte[] methodBody = ((Func<string>)(() => "Hello, world!")).GetMethodInfo().GetMethodBody().GetILAsByteArray();
newMethod.CreateMethodBody(methodBody, methodBody.Length);
Type customType = newType.CreateType();
dynamic myObject = Activator.CreateInstance(customType);
string message = myObject.GetMessage();
但是,当尝试调用 myObject.GetMessage()
时,在最后一行抛出异常:
InvalidProgramException - Common Language Runtime detected an invalid program.
我的代码有什么问题,为什么会抛出这个异常?
最佳答案
问题在于 lambda 表达式包含一个字符串,该字符串在编译时不是以方法体结尾,而是以类型的元数据结尾。 lambda 中的 ldstr
指令通过元数据标记引用字符串。当您获取 IL 字节并将其复制到新方法时,新方法中的 ldstr
将具有无效的元数据标记。
关于c# - 尝试创建新类型时出现 InvalidProgramException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33244880/
尝试通过 Entity Framework 获取数据时,我不断收到 InvalidProgramException 异常。 using (var db = new Entities()) {
我有以下代码: AssemblyBuilder newAssembly = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("Custom
我正在使用 C++/CLI 编写一种下载器。它应该在进度条中显示下载状态。为了让下载不阻塞表单,我需要在后台线程中运行它,但是为了访问进度条,我需要在我的下载函数中指向它的指针。因此,我需要以表单(或
我遇到了一个有趣的问题,请看下面的代码。 class Program { static void Main(string[] args) { var te
我试图在运行时将以下代码作为 IL 代码发出。 class TestObject { public int Hello {get;set;} public in
在大量搜索 stackoverflow 和谷歌搜索之后,为调试为 DynamicMethods 发出的代码提供的解决方案似乎已经过时且非常笨拙。 当然,在 LCG(轻量级代码生成)发布后的 4 年或更
我正在尝试创建一个动态类型,它基本上将一些方法包装在静态类上。我创建了一个名为 Wrap 的静态方法,它有一个通用参数,它应该是一个接口(interface),还有一个普通参数,它是具有静态方法的类的
我试图在 IL 代码中删除对 Tick 事件的订阅,以便它永远不会触发。 这是 IL 代码: IL_0e19: ldftn instance void App.Framework.Main
这是我很长时间以来看到的最奇怪的编程问题。 我正在使用 Microsoft Visual C# 2010 Express、C# 和 .NET 2.0 开发应用程序。此应用程序引用了几个 dll/程序集
我正在使用 Visual Studio 2015 Enterprise RTM 为使用 Unity Container 的项目编写单元测试. 我发现为 Unity 添加一个伪装程序集的简单操作,甚至没
您好,我正在使用 Ormlite 运行 ServiceStack,我遇到了这个错误。以前它工作正常。我不确定我所做的更改导致了此错误。我只是使用了一个简单的 db.Select() 调用,它抛出了这个
我已经对程序进行了单步调试,但它在下一行崩溃了 Runspace runspace = RunspaceFactory.CreateRunspace(); 出现如下错误 An unhandled ex
示例代码: 下面的代码并不完整,但足以说明我面临的 wt 问题。 namespace ClassLibrary1 { class Class1 { internal
我只是想生成只生成一个int常量的代码。这是代码: 字符串名称= Path.GetFileNameWithoutExtension(outputPath); 字符串文件名= Path.GetFileN
我在尝试使用 .NET 4.5 并针对“任何 CPU”“开始调试”ASP.NET MVC Web 应用程序时遇到上述异常。我发现的关于这个问题的所有其他问题似乎都确切地知道应用程序中的什么地方导致了问
在 2013 年 1 月 8 日应用 Microsoft 安全更新后 http://technet.microsoft.com/en-us/security/bulletin/ms13-004在我们的
我是 reflection.emit 的新手,一直在尝试生成以下 C# 代码: public class RepositoryWrapper { public void CallReposit
环境: C#6 .NET 框架 4.6.1 NUnit 控制台 2.6.3 我正在运行以下命令以在我的构建上创建测试覆盖率: "C:\Program Files (x86)\OpenCover.4.6
我正在尝试在 Ubuntu 12.10 上运行 MVC4 网络应用程序。我安装了 mono,我可以运行一个非常非常简单的 mvc 项目。但是每当我尝试运行自己的应用程序时,我总是会收到此错误: Sys
像 C# 方法 IL 一样发出 IL 但获取 System.InvalidProgramException:公共(public)语言运行时检测到无效程序。 示例: public static
我是一名优秀的程序员,十分优秀!