问题标签 [assemblybuilder]
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# - 动态创建 DLL FileVersion 不起作用
我正在动态构建一个 DLL 并且编写 FileVersion 不起作用。
我正在使用的代码来自此 Microsoft 链接,我希望 EXE/DLL 版本为 1.0.0.2001:http://msdn.microsoft.com/en-us/library/system.reflection.assemblyname.version 。 aspx
但实际结果是没有写入FileVersion:
c# - 来自动态代码的异常堆栈跟踪中的错误文件路径和行号
我们使用 System.Reflection.Emit 在运行时从源代码生成代码(是的 - 就像在编译器中一样)。我们使用 MarkSequencePoint 等向 ILGenerator 提供正确的符号信息,并启用 AssemblyBuilder 上的所有调试标志。程序集在编译它的同一进程中保存在内存中并直接执行。
当使用 Visual Studio 调试器单步调试动态生成代码的源代码时,它实际上工作得很好,而且 Visual Studio 似乎完全知道代码来自文件和行号的位置。
但是 - 当生成的代码抛出异常时,System.Exception 对象包含完全错误的堆栈跟踪。它们指向其他(有效但错误的)文件和行号。它正确地获取了类和方法名,但指向的文件和行号与异常实际来自的代码路径无关。
指向的文件是如此无关,似乎无法链接到内联或优化。我能发现的唯一模式是它似乎被某些文件抵消了(在构建程序集的源文件的虚构字母顺序列表中)。然而,这种模式并不是 100% 一致的,这与问题的根源有关似乎是不合理的。
如果我从异常构造一个 System.Diagnostics.Debug 对象,它包含相同的错误信息。
我假设 .NET 运行时使用与调试器用于单步执行代码的元数据相同的元数据来构造异常堆栈跟踪,在这种情况下,这种行为真的很奇怪。
我试图找出在处理动态内存程序集时这是否是 .NET 中的一个已知错误,或者是否有人在其他领域看到过类似的问题。
c# - EnumBuilder 是否总是创建不符合 CLS 的枚举?如何使枚举 CLS 兼容?
下面的代码示例生成 TempAssembly.dll,其中包含枚举 Elevation。
我引用了 TempAssembly.dll 并在另一个项目(比如项目 TestA)中使用了枚举 Elevation。由于我希望代码符合 CLS,因此我将以下属性添加到项目 TestA 中。
[程序集:System.CLSCompliant(true)]
我收到警告的代码是:
警告
警告 1 类型的“TestA.TestClass.Elev”不符合 CLS
我检查了有关如何编写符合 CLS 的代码的文档,但由于枚举是动态创建的,因此我无法做很多事情。任何建议,我怎样才能使枚举 CLS 兼容?
c# - 从动态程序集中删除类型
AssemblyBuilder
我使用/ ModuleBuilder
/创建了一个新类型TypeBuilder
。有没有办法在以后从同一运行时删除这种类型?
c# - 在 C# 中使用 EnumBuilder
我正在使用https://stackoverflow.com/a/792332/910502中描述的 EnumBuilder来创建基于数据库值的枚举,并且希望在非开发人员机器上使用这种方法 - 我可以部署一个假人程序集,但没有构建后事件并且无法触发控制台应用程序,因为该程序集已被引用它的 exe 使用,因此访问被拒绝。
一种方法可能是使用第三个应用程序作为启动器:首先启动创建程序集的控制台应用程序,然后启动使用它的应用程序。
对于这种情况,推荐的方法是什么?
c# - 反射 | 发射 | 动态资源生成 - 使用 IResourceWriter.AddResource(key,value) 添加的资源值无法读取
我正在尝试使用一些资源生成一个程序集文件。我System.Reflection.Emit.ModuleBuilder
用来定义资源。AssemblyBuilder
保存程序集而不给出任何错误,但是当我尝试读取资源时,ResourceManager
它没有任何条目ResourceSets
。我不确定AssemblyBuilder
是否保存添加的资源或我的资源读取代码有问题。
汇编生成代码:
资源读取代码:
资源管理器可以加载资源,但它没有任何键值对。
c# - 动态创建的类到cs文件?
我正在使用 AssemblyBuilder 创建一个复杂的类,我稍后会从中创建对象。然而,如何真正构建这个类存在不确定性。那么有没有办法将这个动态创建的类写入cs文件进行检查呢?
我可以将 dll 文件写入磁盘,但我需要 cs 文件。
c# - 使用 AssemblyBuilder 构建完整的装配
使用 AssemblyBuilder 构建动态程序集时,您可以创建多个 TypeBuilder 实例,并使用 TypeBuilder.CreateType() 构建您的类型。当我的程序集中有 10 种类型时,我必须一个一个地调用它吗?或者有没有办法说“创建程序集并‘全部编译’”。
由于类型可能相互交叉引用,一个类型必须在另一个之前构建,因此创建的类型仍然不是可用的类型。将使用对未创建类型的引用来创建类型。如果为每个 TypeBuilder 调用 CreateType(),一切都很好。只是想知道是否还有更简单的方法。
是否有“完成”程序集的概念,或者它是否始终“打开”并期望添加更多类型?
.net - 如何使用 Emit 从 DynamicAssembly 加载程序集
如何在 .NET5 中加载 DynamicAssembly 使用 Emit?
我在 loadContext.LoadFromAssemblyName(...) 处收到错误
InvalidOperationException:已解析程序集的简单名称应与请求的程序集相同。
我错过了什么?任何帮助或示例代码都对我有用。