问题标签 [ildasm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 使类型的实例不可存储
- 有没有办法标记一个类型(或者更好的是,一个接口),这样它的实例就不能存储在一个字段中(以类似于
TypedReference
and的方式ArgIterator
)? - 同样,有没有办法防止实例通过匿名方法传递,并且——通常——模仿上述两种类型的行为?
- 这可以通过 ILDasm 或更一般地通过 IL 编辑来完成吗?由于UnconstrainedMelody通过编译程序集的二进制编辑实现了通常无法获得的结果,也许有一种方法可以通过相同的方法“标记”某些类型(或者甚至更好,抽象类型或标记接口)。
我怀疑它在编译器中是硬编码的,因为错误 CS0610 的文档指出:
有些类型不能用作字段或属性。这些类型包括...
在我看来,这暗示了可以扩展这些类型的集合——但我可能是错的。
我在 SO 上进行了一些搜索,虽然我知道无法以编程方式引发编译器错误,但我找不到任何来源说明某些“特殊”类型的行为无法复制。
即使这个问题主要是学术性的,也可能有一些答案的用法。例如,有时确保某个对象的生命周期受限于创建它的方法块可能很有用。
编辑: RuntimeArgumentHandle
是另一种(未提及的)不可存储类型。
编辑 2:如果它有任何用处,CLR 似乎也以不同的方式处理这些类型,如果不仅仅是编译器(仍然假设这些类型与其他类型没有任何不同)。例如,以下程序将抛出一个TypeLoadException
about TypedReference*
。我已经对其进行了调整以使其更短,但您可以随心所欲地解决它。例如,将指针的类型更改为void*
不会引发异常。
.net - 转储引用的程序集
ILDASM 的哪个命令行选项仅转储引用的程序集?如果不可能,是否有替代工具/方法将引用程序集转储到 .NET DLL 中。
ilasm - ILASM 是否适用于混合模式应用程序?
我正在尝试修改第三方 dll 中的方法
- 使用 ILDASM 生成 IL
- 修改 IL 方法
- 使用 ILASM 生成 DLL (FAILURE)
我发现由于此错误的原因是第三方 dll 包含非托管代码。有什么方法可以让我成功吗?
c# - 无法加载由 {dll} 导入的过程
我有几个非托管 C++ 编写的 lib 文件,我需要链接到托管 C++ dll。
然后我需要从 C# 应用程序调用这个托管 C++ 的函数。
第一步没问题 - 创建托管 C++ dll,我可以使用 ildasm 看到它导出了我需要的功能。但是,当我尝试从我的 C# 编写的测试应用程序中调用此函数时,它会说:
未知模块中发生了“System.IO.FileLoadException”类型的未处理异常。
无法加载由 {MyManagedCPP.dll} 导入的过程。
此消息来自 VS2010。
我做了一个简单的实验——从托管 C++ dll 中的所有 lib 文件中删除依赖项并重建它。
有了这个更改就可以了 - 应用程序启动,我可以从 C# 测试应用程序调用托管 C++ dll 的函数。
当 dll 与 lib 文件具有静态链接时,是否无法通过设计调用托管 c++ 函数?技术限制?还是有一些解决方法?
谢谢
c# - 在 Windows XP SP3 PC 上查找错误签名的方法 def
我正在尝试查找要使用 ILDASM.exe 打开的 System.dll 文件并找到方法定义和偏移量,并查看为什么我的应用程序仅在 Windows XP 机器上崩溃。我是否尝试为此错误签名中列出的此程序集打开正确的 dll?我在 System.Core.dll 的 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5 中查找,因为它在由 ILDASM.exe 打开时包含 System 命名空间。
相同的程序在 Windows 7 PC 上运行良好。
我尝试在带有 Service Pack 3 的 Windows XP 机器上运行我的应用程序时出现以下错误签名。
c# - clr 在运行时如何解析.net 引用的程序集名称?
当我的 .net exe 运行时,它会在 rumtime 加载正确的 .net 程序集。我知道有一个探测过程正在发生。
我的问题是,如果我在 ildasm 中打开 .net exe/dll,我只有对 mscorlib.dll 的 .extern 引用,而不是其他引用。
那么 clr 如何获取探测 .net 引用程序集所需的信息呢?
我有一个示例项目和这里的图像。
所以在这种情况下,我在 System、System.Xml.Linq、Questions 等任何地方都看不到 .net 程序集引用,但显然它们是由 clr 加载的,我确实在我的 fusion logviewer 中看到了它们
.net 程序集所需的数据位于何处?
我注意到一些不一致的行为行为,外部程序集如何为某些核心 .net dll 和其他外部 .net dll 放置清单。
谢谢
reflection.emit - .locals init 上方括号的 CLR IL 意义
我正在尝试使用 .NET 中的反射和发射生成动态程序集。我收到错误消息“公共语言运行时检测到无效程序”。我创建了另一个程序,它具有我想要使用硬编码类型的功能。我尝试编写的功能最终将使用动态类型,但我可以使用 ILDasm 来查看我需要生成的 IL。我正在将我生成的 IL 与编译器生成的 IL 进行比较。在一种方法的 .locals init 声明中,我看到编译器生成的代码中有一个额外的项目,
编译器生成:
矿:
我不明白编译器生成的代码中“[0]”和“[1]”的意义。谁能告诉我这是什么意思?
作为一个更普遍的问题,我可以毫不费力地遵循大多数 ILDasm 输出。但是我经常遇到一个有问题的表达式。例如,在 ILDasm 的这一行中
“!!0”可能指的是 Entity<> 的泛型类型,但我不确定,我想知道 ILDasm 输出是否有一个键可以向我解释它更晦涩的输出。
.net - 反汇编和重新组装的 DLL 不会解决相互引用
我正在尝试通过此过程签署一组 DLL:
ildasm
原始 DLL 到 ILilasm
(和强命名)IL 回到 DLL
通过 Visual Studio 对象浏览器看到的每个 DLL 都是正确的,但如果重建的DLL 引用另一个重建的DLL 中的对象(例如扩展其中定义的对象),则无法解析引用。对系统程序集的引用已正确解析。
有人能告诉我为什么吗?
我正在使用具有 x86 架构的 .Net SDK v2。
c# - 使用 ildasm + ilasm 打补丁是否可行?
我有一个正在工作的 .NET 程序集,其源代码已丢失。
我想只替换一种方法来重新编译。我只通过一次重写一个类就看到了这一点。然而,这个类是巨大的,因此这种方法在经济上是不可行的。是否有适用于单一方法的流程?
理想情况下,该过程应该是完全自动化的(即可以从 MSYS Makefile 运行的东西)并且不涉及任何 GUI(例如 Reflector 或 ILSpy。)
c# - C#中类的默认访问修饰符
C# 中类的默认访问修饰符是 internal。但是在用 ildasm 检查班级时,它显示班级是私人的。
知道为什么吗?