Type.GetType(string) 应该了解动态生成的类型吗?

2024-03-10

我有一个使用 CodeDom 编译器创建一些代码的应用程序。我可以看到生成的程序集在内存中。但是当我调用 Type.GetType(typeName) 时,它返回 null。我觉得这有点令人困惑。

我究竟做错了什么?

static void Main(string[] args)
{
    // FYI: Code is some dummy class with only 1 instance method.
    string code = System.IO.File.ReadAllText("CodeToCompile.cs.txt");

    string errors = null;
    Assembly asm = DynamicCompiler.Compile(code, generateInMemory: true, generateDebugInfo: false, message: ref errors);

    // Get type from the generated assembly. We know there is only one.
    Type oneAndOnlyTypeInAssembly = asm.GetTypes().First();

    string typeName = oneAndOnlyTypeInAssembly.AssemblyQualifiedName;

    // Tell the type system to return instance of type based on fully qualified name.
    // I'd expect this to work, since the assembly is already loaded to memory.
    Type sameType = Type.GetType(typeName);

    if (sameType != null)
    {
        Console.WriteLine("Type found and equal={0}", oneAndOnlyTypeInAssembly.Equals(sameType));
    }
    else
    {
        Console.WriteLine("Type NOT FOUND");
    }
}

请参阅中的备注部分MSDN http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx。不支持您想做的事情:

GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在使用 System.Reflection.Emit 服务定义的动态程序集中定义的类型,则可能会出现不一致的行为。该行为取决于动态程序集是否是持久的,即使用 System.Reflection.Emit.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集是持久性的,并且在调用 GetType 之前已写入磁盘,则加载程序会在磁盘上查找保存的程序集,加载该程序集,并从该程序集中检索类型。如果调用 GetType 时程序集尚未保存到磁盘,则该方法返回 null。 GetType 不理解瞬态动态程序集;因此,调用 GetType 来检索瞬态动态程序集中的类型将返回 null.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Type.GetType(string) 应该了解动态生成的类型吗? 的相关文章

  • 用户控件内所有控件均为空

    我有一个 UserControl 它使用 UserControl 以及其他控件 In the ascx文件我有以下代码
  • 访问“if”语句之外的变量

    我怎样才能使insuranceCost以外可用if陈述 if this comboBox5 Text Third Party Fire and Theft double insuranceCost 1 在 if 语句之外定义它 double
  • 如何在不实例化一个类的情况下检查它是否继承了另一个类? [复制]

    这个问题在这里已经有答案了 假设我有一个如下所示的类 class Derived some inheritance stuff here 我想在我的代码中检查类似的内容 Derived is SomeType 但看起来像is运算符需要 De
  • 无法从 Web api POST 读取正文数据

    我正在尝试从新的 Asp Net Web Api 中的请求中提取一些数据 我有一个像这样的处理程序设置 public class MyTestHandler DelegatingHandler protected override Syst
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • 导出类时编译器错误

    我正在使用 Visual Studio 2013 但遇到了一个奇怪的问题 当我导出一个类时 它会抛出 尝试引用已删除的函数 错误 但是 当该类未导出时 它的行为会正确 让我举个例子 class Foo note the export cla
  • Qt 计算和比较密码哈希

    目前正在 Qt 中为测验程序构建面向 Web 的身份验证服务 据我了解 在数据库中存储用户密码时 必须对其进行隐藏 以防落入坏人之手 流行的方法似乎是添加的过程Salt https en wikipedia org wiki Salt cr
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • 如何添加重试以调用 Web 服务?

    我有一个应用程序调用使用 wsHttpBinding 的 Web 服务 我需要在连接超时等情况下对 Web 服务调用实现某种重试功能 执行此操作的最佳方法是什么 我已经阅读过有关 WS ReliableMessaging 的内容 但这不是
  • 防止GDB中的PLT(过程链接表)断点

    在最新版本的 GDB 中 在库函数调用上设置断点会导致多个实际断点 调用过程链接表 PLT 实际的函数调用 这意味着当调用库函数时 我们每次都会经历两次中断 在以前的 GDB 版本中 只会创建 2 因此您只能得到一次中断 那么问题来了 是否
  • 格式化货币

    在下面的示例中 逗号是小数点分隔符 我有这个 125456 89 我想要这个 125 456 89 其他示例 23456789 89 gt 23 456 789 89 Thanks 看看这个例子 double value 12345 678
  • 使用 AdHocWorkspace 会导致“不支持语言‘C#’”。

    在VS2015中使用Microsoft CodeAnalysis CSharp Workspaces的RC2 这段代码会抛出异常 var tree CSharpSyntaxTree ParseText var workspace new A
  • 允许使用什么类型的内容作为 C 预处理器宏的参数?

    老实说 我很了解 C 编程语言的语法 但对 C 预处理器的语法几乎一无所知 尽管我有时在编程实践中使用它 所以问题来了 假设我们有一个简单的宏 它扩展为空 define macro param 可以放入宏调用构造中的语法有哪些限制 调用宏时
  • 我们可以使用 EWS 托管 API 连接到 Exchange 2016 吗?

    我使用的是 EWS 托管 API 2 2 它的枚举中没有显示 Exchange 版本 2016 我可以看到 Exchange 2013 之前的版本 那么如何连接到 Exchange Server 2016 该 API 是否尚未从 Micro
  • 将非算术类型作为参数传递给 cmath 函数是否有效?

    给定以下用户定义类型S具有转换功能double struct S operator double return 1 0 以及以下调用cmath http en cppreference com w cpp header cmath使用类型的
  • .NET JIT 编译的代码缓存在哪里?

    NET 程序首先被编译为 MSIL 代码 当它被执行时 JIT编译器会将其编译为本机机器代码 我想知道 这些JIT编译的机器代码存储在哪里 它只存储在进程的地址空间中吗 但由于程序的第二次启动比第一次快得多 我认为即使在执行完成后 该本机代
  • 如何获取 QIcon 的文件/资源​​路径

    假设我做了这样的事情 QIcon myIcon resources icon ico 我稍后如何确定该图标的路径 例如 QString path myIcon getPath 问题是 没有getPath 会员 我找不到类似的东西 但肯定有办
  • C++ [Windows] 可执行文件所在文件夹的路径[重复]

    这个问题在这里已经有答案了 我需要访问一些文件fstream在我的 Windows 上的 C 应用程序中 这些文件都位于我的exe文件所在文件夹的子文件夹中 获取当前可执行文件的文件夹路径的最简单且更重要的 最安全的方法是什么 Use 获取
  • C# 粘贴到文本框时检查剪贴板中的字符

    有没有一些方法可以在粘贴到文本框 C 之前仅检查剪贴板中的字符 Ctrl V 和右键单击 gt 粘贴 但不使用 MaskedTextbox 在文本框文本更改中添加规则以仅接受数字 例如 private string value privat
  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代

随机推荐

  • Google 云视觉 Web 检测 API 仅返回 10 个响应

    我正在使用 Google 云视觉 Web 检测 API 来检测图像的使用位置 但即使是 Google 的徽标 我也总是最多收到 10 个回复 是 API 的限制还是我遗漏了一些东西 因为文档中没有提到任何内容 Cloud Vision AP
  • ffprobe 显示 h264 流的比特率为 0.0 或 N/A

    我有一个 11 分钟的 mkv 文件 带有 h264 视频流 占用 184MB 空间 我想减小这个文件的大小 我想我可以降低比特率 但 ffprobe 不输出任何内容 事实上 它说文件的长度是根据比特率计算的 因此可能不准确 但摘要或 FO
  • 禁止“尝试新的跨平台 PowerShell https://aka.ms/pscore6”

    我不介意一点微软的营销 但是当我只想要一个干净的 PowerShell 提示符时 这很烦人 有没有人找到一种方法来抑制Try the new cross platform PowerShell https aka ms pscore6打开
  • jQuery masonry 如何调用layoutComplete

    我有以下功能 namespace utils pageReorder feed function console log complete do some stuff here no reorder has completed pageRe
  • 使用 CSS 旋转元素后使用高度/宽度 100%

    我有一个想要旋转的元素 视频 然后使用 100 宽度和高度 在应用旋转之前 视频占据 100 的宽度和高度 旋转后 尺寸似乎与旋转之前保持相同 我想重新应用宽度和高度 100 以使视频适应新状态 目标是尝试以横向方式呈现视频 即使 div
  • 如何绘制 Wolfram Alpha 网格? [MATLAB]

    我想绘制这个网格的任何函数 这是 f z gt 1 z 的特殊情况 这是您可以在 Wolfram alpha 上找到的典型图表 尽管如此 我不知道如何继续 这个想法是看看应用 f 后 1 平方的复杂网格的线被发送到哪里 一件很棒的事情是在网
  • bash 脚本中查找函数的结果出现问题

    我的 bash 脚本有问题 我的 for 函数使用 find 函数的结果 长话短说 在 SSH 中 find 函数返回 2 个结果 而在 bash 脚本中返回单个结果 我尝试了以下两个代码 for f in find path name p
  • 在 URL 查询字符串中使用方括号的数组语法是否有效?

    在 URL 查询字符串中使用多维数组语法实际上安全 有效吗 http example com abc 123 abc 456 它似乎适用于每个浏览器 我一直认为它可以使用 但根据本文中的评论 事实并非如此 http www 456berea
  • GetWindowRect 坐标不与屏幕相关

    我正在使用 Visual Studio 2008 C 工作 我有一个 MFC 对话框 里面有一个控件 我正在尝试在控件中放置另一个对话框 第二个对话框上的 SetWindowPos 显然使用屏幕坐标 因此我需要获取控件或父对话框的屏幕坐标
  • 被指令包装后,我如何访问它的范围?

    如何在指令主体中访问指令的隔离范围 我的 DOM 看起来像这样 div div
  • UICollectionView 中的单元格间距

    如何设置某个部分的单元格间距UICollectionView 我知道有一个房产minimumInteritemSpacing我已经将其设置为 5 0 但间距并未出现 5 0 我已经实现了流出委托方法 CGFloat collectionVi
  • 如何在 PHP 中将 UTF-16 十六进制字符串转换为 UTF-8?

    我有来自 strace 的以下输出 我想使用 PHP 将其转换为 UTF 8 R 00f6dhakev 00e4gen 4 R 00e4ntm 00e4starv 00e4gen 24 K 00d8BENHAVN 我认为上面的字符串是 UT
  • 尝试使用列表迭代器删除对象

    我正在尝试使用列表迭代器从列表中删除对象 我已经浏览了网站上的其他解决方案 但没有一个解决方案可以缓解错误 线程 main java util ConcurrentModificationException 中的异常 这是我未执行的代码 v
  • 如何使用rxjava获取retrofit 2.0中的请求url?

    我正在尝试升级到 Retrofit 2 0 并在我的 android 项目中添加 RxJava 我正在进行 api 调用 并希望检索 url 及其以及 sqlite 中的响应数据作为缓存 Observable
  • 如何在Windows上使用JPL(双向Java/Prolog接口)?

    我对在 Java 中嵌入 Prolog 解释器感兴趣 一种选择是使用JPL http www swi prolog org packages jpl java api index html 但是 JPL 网站上的下载链接已损坏 并且安装页面
  • 从本地源安装 anaconda 库

    一段时间以来 我一直尝试在非常复杂的代理后面的 Windows PC 上安装 pymc 有效地使其安装在未连接到互联网的计算机上 我尝试在 condarc 文件中设置代理但未成功 但仍然收到错误消息 conda安装 chttps conda
  • C# - List 初始容量的用途是什么? [复制]

    这个问题在这里已经有答案了 我正在尝试执行以下操作 int count 50 List
  • 如果用户在特定页面上则显示部分

    如果我有一个包含以下 URL 的页面 http www mywebsite com users profile edit http www mywebsite com users profile edit 仅当用户位于该特定页面上时 如何显
  • 当每个函数返回 deferred.promise 时,如何链接函数数组的执行?

    我已经使用 deferred 模块在 Node js 中创建了我的第一个延迟对象 当我将结果传递给下一个函数并触发解析和拒绝时 它效果很好 当每个函数返回 deferred promise 时 如何链接函数数组的执行 我有类似函数的输入参数
  • Type.GetType(string) 应该了解动态生成的类型吗?

    我有一个使用 CodeDom 编译器创建一些代码的应用程序 我可以看到生成的程序集在内存中 但是当我调用 Type GetType typeName 时 它返回 null 我觉得这有点令人困惑 我究竟做错了什么 static void Ma