如何将导入的命名空间提供给 CompileAssemblyFromSource

2024-05-01

我正在尝试将 VB 源文件加载到内存中。但是,VB 文件假定与其关联的项目具有在项目级别定义的一些全局“导入的命名空间”。此 VB 功能允许单个文件在每个文件上省略 Imports 语句(在 C# 中使用)。

    Dim sourceCode As String = ""
    'sourceCode &= "Imports System.Data" & vbNewLine
    sourceCode &= "Class Foo" & vbNewLine
    sourceCode &= "Sub Print()" & vbNewLine
    sourceCode &= "Dim dtbl As DataTable" & vbNewLine
    sourceCode &= "System.Console.WriteLine(""Hello, world!"")" & vbNewLine
    sourceCode &= "End Sub" & vbNewLine
    sourceCode &= "End Class" & vbNewLine

    Dim compiler As New Microsoft.VisualBasic.VBCodeProvider

    Dim params As New Compiler.CompilerParameters
    params.ReferencedAssemblies.Add("System.dll")
    params.ReferencedAssemblies.Add("System.Data.dll")
    params.ReferencedAssemblies.Add("System.Xml.dll")
    params.GenerateInMemory = True
    params.GenerateExecutable = False

    Dim results As Compiler.CompilerResults = compiler.CompileAssemblyFromSource(params, sourceCode)

    If results.Errors.Count > 0 Then
        For Each compileError In results.Errors
            Console.WriteLine(compileError.ToString)
        Next
        Return
    End If

    Dim assembly = results.CompiledAssembly

第 2 行被注释掉。如果我取消注释并添加 Imports 语句,则代码可以正常工作。如果我将“Dim dtbl As DataTable”更改为“Dim dtbl As System.Data.DataTable”,它也可以正常工作。

有没有办法将此 Imports 语句提供给编译器或参数,而不是取消注释该行代码,就好像它是全局项目级导入命名空间一样?

我可以将此 Imports 语句添加到我读入的每个文件的顶部。但如果它已经存在,那么我会收到一条错误,指出 Imports 语句是重复的。我可以做一些正则表达式检查来查看 Imports 语句是否已经存在,但我想尽可能地利用 System.CodeDom 框架。


好吧,没有答案:(我猜框架没有做我想做的事。这是我使用正则表达式注入 Imports 语句的黑客解决方案。

sourceCode = AddImportsIfNeeded(sourceCode, "System.Data")


Private Function AddImportsIfNeeded(ByVal sourceCode As String, ByVal namespaceToImport As String) As String

    If Not Regex.IsMatch(sourceCode, "^\s*Imports\s+" & Regex.Escape(namespaceToImport) & "\s*$", RegexOptions.Multiline) Then
        Return "Imports " & namespaceToImport & vbNewLine & sourceCode
    End If
    Return sourceCode

End Function

请注意,如果文件包含 Option 语句(如 Option Strict On),这将不起作用。 Imports 语句必须位于 Option 语句下方。

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

如何将导入的命名空间提供给 CompileAssemblyFromSource 的相关文章

  • 如何阻止访问任何文件或exe vb.net?

    如何阻止和取消阻止文件或可执行文件在 vb net 运行时永久打开 您可以使用此代码 并且可以使用Environment UserName获取用户名 这将锁定任何类型的文件 也将锁定文件夹 Dim FSS As FileSystemSecu
  • 安装文件失败调试已启用

    我之前使用过安装项目 没有任何问题 该项目没有 SQLite DB 作为依赖项我现在正在尝试为一个包含 SQLite 作为 System Data SQLite Core 的项目制作一个 EXE 或 msi 文件 该项目是一个带有 WPF
  • VB.NET 中共享变量有什么用?

    有什么用SharedVB NET 中的变量 它是一样的static在 C 和大多数其他语言中 这意味着类中的每个对象都使用变量 属性或方法的相同副本 当与静态方法一起使用时 您不需要对象实例 MyClass DoSomething 而不是
  • 为什么在按下 Tab 键之前​​不显示焦点矩形?

    我有一个奇怪的问题 可能只是为了理解 为什么在测试应用程序中 直到我按 Tab 键才显示焦点矩形 我想显示一个带有两个单选框和两个按钮的对话框 当我显示对话框时 我希望在第一个单选按钮周围看到一个焦点矩形 以便用户可以看到焦点在哪里 我对控
  • 为什么在 C# 中成员初始值设定项中不允许这样做,但在 VB.Net Me 中允许

    我正在将 VB Net 应用程序转换为 C 并注意到在 VB Net 代码中 有一个私有成员变量 它是使用Me像这样 Private m ClassA As New MyCollection Of ClassA Me 当我将其转换为 C 代
  • 使用 GIT 自动增加 AssemblyFileVersion

    好吧 我知道这可能不是传统的 但除此之外 我使用 AssemblyFileVersion 作为我的 构建名称 字符串 它的格式如下 File Version information for an assembly consists of t
  • 为什么 Dictionary 上的这个 Linq 查询不作为数据源工作

    我在VB中有以下内容 Dim sources From source In importSources Select New With Type source Key Source source Value Name dgridSource
  • 特殊名称属性还允许哪些其他巧妙的技巧?

    研究中一个问题 https stackoverflow com questions 13259162 vb net power operator overloading from c sharp关于实现 Visual Basic Power
  • 我刚刚在 Visual Basic 中运行的 COM 对象的 CLSID 是什么

    我需要知道我刚刚运行的 COM 对象的 CLSIDCreateObject xxx xxx 我怎么才能得到它 蒂亚 拉法尔 我认为您无法直接从 VB 本身获取该信息 例如 作为调用的副作用或次要结果 CreateObject 但你可以阅读注
  • 调用退出后应用程序未退出

    我有一个小问题 我似乎无法弄清楚 我正在将 DataGridView 它的内容 保存到 xls 文件中 我这样做没有任何问题 除了在我的任务管理器中它仍然显示它正在运行 我已致电 xlApp Application Quit 这被声明为 D
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • 如何使用 winforms 在 vb.net 中制作大型按钮网格(24x20 或类似)?

    我正在 vb net WinForms 中制作一个座位预订系统 我需要用户能够选择他们想要使用的座位并改变颜色 这样他们就可以知道它已选择 我开始尝试使用按钮 但 480 个按钮严重减慢了表单的加载时间 然后我尝试了在行 列中带有按钮的数据
  • 如何在 VB.NET 中声明和初始化多维数组?

    我想做这个 Dim Numbers As Integer 1 2 3 4 5 6 7 IDE 的下划线4 5 6 7并说Array initializer has 3 too many elements 我究竟做错了什么 以下应该有效 Di
  • 管理调试和发布连接字符串

    在 NET SQLServer 应用程序中管理调试和发布连接字符串的好方法是什么 我有两个 SQL Server 一个是生产服务器 一个是构建 调试服务器 我需要一种在部署 ASP NET 应用程序时在这两个服务器之间进行切换的方法 目前
  • 项目:为了评估索引属性,该属性必须经过限定,并且参数必须由用户显式提供。

    我创建了多个组合框 从中我从创建的存储过程中提取了每个组合框的数据 所有这些框一直工作到今天早些时候 其中 2 个组合框停止工作 检查行的 立即窗口 和列 我得到了列的结果 但是当我检查列时 例如 dsContactTitles Table
  • 检查 DBNull 会引发 StrongTypingException

    我正在使用数据集从数据库中提取数据 一行中的一个字段是NULL 我知道这个 但是 以下 vb net 代码会抛出StrongTypingException 在数据集设计器中自动生成的 get SomeField 方法中 If Not IsD
  • 设置国际货币格式

    我有一个 asp net 应用程序 我们正在 全球化 过程中 我将 currentculture 和 currentUICultre 设置为适当的值 并且货币按预期使用货币格式显示 即 FormatCurrency nPrice 产生 en
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • SQL存储过程执行时间差异

    我在 win form 应用程序中遇到奇怪的问题 我正在调用一个存储过程 并且执行大约需要 6 秒 此存储过程接受多个参数 包括一个输出参数 从应用程序级别我使用 Dim dt1 DateTime Now cmd ExecuteNonQue
  • 数据读取过程中遇到致命错误

    我正在进行定期更新表扫描 Using connect1 As New MySqlConnection ConnectLocalhost serverString connect1 Open Dim cmd New MySqlCommand

随机推荐

  • 如何在我的网站中创建全局搜索[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在我的网站中创建全局搜索 该网站是内部网站 无法在网上使用 我无法使用 Google 搜索来实现此目的 我的信息全部存储在不同的
  • 增加 Instagram API 350 个请求限制

    根据开发人员文档 客户端每小时可以发出 5000 个请求 但目前我的应用程序被限制为每小时 350 个请求 我收到的错误代码是 400 消息是 已超出每小时最大请求数 您在过去一小时内发出了 XXX 个请求 超过了允许的 350 个请求 您
  • 静态资源的 URI 中的上下文路径,我真的需要指定它吗?

    我有一个简单的网络应用程序 webapp static images a gif pages test html WEB INF pages test jsp 在test html中 有 img src static images a gi
  • 背景重复 x/y 在 Firefox/Safari 中不起作用

    我有下面的代码表明background repeat x y由于某些原因 它在 FireFox 上不起作用 它只是删除了这些样式 但并不是说它们是不正确的 它们没有在某处被覆盖 当我尝试将这些风格结合在一起时 background 它也将其
  • FORTRAN 写()

    在开始之前 我必须先声明一下 我是 FORTRAN 的新手 我正在维护 1978 年的一段遗留代码 它的目的是从文件中读取一些数据值 处理这些值 然后将处理后的值输出到另一个文本文件 给出以下 FORTRAN 代码 INTEGER NM S
  • 使用 FocusScope.of(context).unfocus() 重建小部件树

    我有这个例子 override Widget build BuildContext context return Scaffold body SafeArea child Padding padding const EdgeInsets a
  • 未找到列:1054 未知列 laravel

    所以我尝试用 laravel 制作一个表单 但除了新版本之外 他们删除了表单 但我可以让它运行 所以这里是 Route post register function user new User user gt u n Input get u
  • URL中的gs_upl是什么意思?

    在任何谷歌搜索 URL 中 gs upl 是什么意思 例如 那么 gs upl 1045l1663l0l3648l4l4l0l0l0l0l258l682l0 3 1l4l0 在这里意味着什么 从构建的脚本gs upl j 我找到 funct
  • jquery脉动文本

    我正在使用 jquery 来使文本脉动 一切都很好 但我无法理解某些事情 我只想脉动 x 次 然后停止 我正在使用以下代码来使类产生脉动 document ready function function pulsate pulsate an
  • 何时使用Statement而不是PreparedStatement?

    何时使用语句而不是准备好的语句 我想在没有参数的查询中使用语句 但为什么不使用准备好的语句 对于没有参数的查询 哪一个更快 我想在没有参数的查询中使用语句 但为什么不使用准备好的语句 那还差得远 PreparedStatements 用于返
  • aria2c - 有什么办法只保留失败下载的列表吗?

    我在用aria2c下载以文本文件形式组织的相当大的 url 列表 6000 基于此gist https gist github com jonbakerfish 0f7877c050b648169e0958ea2e2c6aca 我使用以下脚
  • 为什么 golang 堆配置文件中的“Total MB”小于顶部的“RES”?

    我有一个用 go 编写的服务 在运行时需要 6 7G 内存 RES 在顶部 所以我使用 pprof 工具试图找出问题所在 go tool pprof pdf http
  • 从 DOM 中删除一行后更新 jQuery Tablesorter 插件

    我目前有一些代码隐藏已删除的行 然后使用 remove 函数将其删除 然而 我很难让它保持 删除 状态 因为每次我刷新表排序分页器插件或我正在使用的过滤器插件插件时 删除的行会重新出现 因为它们当然被缓存了 目前的代码很简单 目前有小部件更
  • 使用 ls 和 grep 列出具有特定扩展名的文件

    我只想从当前目录获取文件 并且只输出 mp4 mp3 exe 文件 没有其他内容 所以我想我可以这样做 ls grep mp4 grep mp3 grep exe 但不会 因为第一个 grep 将仅输出 mp4 因此其他 2 个 grep
  • 如何更改詹金斯主目录位置?

    简单的问题 如何更改jenkins主目录位置 默认情况下它指向 var lib jenkins 而我希望它指向 mnt home jenkins 我已将 JENKINS HOME 更改为 mnt home jenkins 但这对我没有帮助
  • 防止 .Net MVC WS-Federation 站点中的 XmlHttpRequest 重定向响应

    我在 MVC 3 站点上使用 WS 联合 声明感知 身份验证 并且在身份验证失败时无法阻止某些发送 JSON 的 API 控制器返回重定向 我有一个名为 API 的区域 其中有几个仅返回 JSON 的控制器 这些控制器都继承自同一个基类 我
  • 使用 SVM 预测概率

    我编写了这段代码并想获得分类的概率 from sklearn import svm X 0 0 10 10 20 30 30 30 40 30 80 60 80 50 y 0 1 2 3 4 5 6 clf svm SVC clf prob
  • 在 SVG 中使用变换模拟枢轴旋转

    我在 SVG 中有一个矩形 需要从特定点绕轴旋转 我能想到的最好方法是变换到枢轴的 xy 旋转角度 然后再次变换 问题是第二个变换的 xy 我认为它会在某种程度上采用 cos 和 sin 只是不确定在哪里或为什么 会旋转 90度到 也许我以
  • 如何让我的网络爬虫通过C#登录到这个网站

    我有一个应用程序可以读取网站上的部分源代码 这一切都有效 但问题是该页面需要用户登录才能访问该源代码 我的程序需要一种方法来最初使用户登录到网站 完成后 我将能够访问和阅读源代码 需要登录的网站是 mmoinn com index do P
  • 如何将导入的命名空间提供给 CompileAssemblyFromSource

    我正在尝试将 VB 源文件加载到内存中 但是 VB 文件假定与其关联的项目具有在项目级别定义的一些全局 导入的命名空间 此 VB 功能允许单个文件在每个文件上省略 Imports 语句 在 C 中使用 Dim sourceCode As S