问题标签 [system-codedom-compiler]

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.

0 投票
1 回答
262 浏览

c# - 可以释放使用 CodeDomProvider 生成的程序集吗?

我想编写一个允许用户定义 GUI 驱动的代码片段的应用程序。

在这种情况下,我的目标是将这些片段定义发送到一个服务,该服务将能够出于多种目的编译和运行它(代码 dom、代码 dom 提供程序……)。

由于这些编译的程序集会生成很多次,我的问题是如何在需要时释放它们。

我知道从文件加载的程序集不能从内存中释放,除非加载到单独的应用程序域中(我们需要释放整个应用程序域)。

但是对于动态编译的程序集来说是这样吗?并且,如果需要,如何在单独的应用程序域中生成这些程序集?

例如,在我的情况下是否需要这个问题中指出的方法(这里我猜整个编译过程和运行时使用应该在一个单独的应用程序域中完成)?

0 投票
0 回答
47 浏览

vb.net - 使用外部库时应用程序冻结

我的应用程序包含一个主文件,允许使用 Codedom 生成可执行文件。这个可执行文件是从我的文件中生成的Source.vb

我想在后者中使用外部库。特别是,这是 Rebex:这将允许我从服务器 sFTP 下载文件。这是我的 Codedom 设置:

尽管在我的 Codedom 设置中正确实现了相关库,但当我尝试使用它们时没有任何反应:没有错误,我的应用程序在执行时停止。Rebex 库由 NuGet 安装提供:Rebex.Common.dllRebex.Networking.dllRebex.Sftp.dll。但是,我在代码中编写的用于导入这些库的参数与本文档一致。

当我在我的 Stub 中实现这部分代码时,我的可执行文件冻结Source.vb

我真的不明白这个问题来自哪里。没有出现错误的事实更让我感到困惑:我不知道用哪种方法来解决错误。你可以帮帮我吗?

0 投票
0 回答
229 浏览

c# - 错误代码:CS2021(文件名 'C:" /debug- /optimize+ C:\svo2trpm.0.cs' 太长或无效)使用 CODEDOM 创建程序集时

我正在尝试使用 CODEDOM 创建程序集。正在创建的程序集将包含一个 POCO 类,并且该类将携带的属性将来自数据库。一切都很好,但是在尝试从 codecompliationunit 创建程序集时,我收到以下错误。

错误代码:CS2021(文件名 'C:" /debug- /optimize+ C:\svo2trpm.0.cs' 太长或无效)使用 CODEDOM 创建程序集时。

我在 Windows 7 上使用 .net framework 4.5 和 Visual Studio 2019。我尝试在 Windows Server 2016 上运行相同的代码,但仍然是同样的问题。

0 投票
1 回答
45 浏览

c# - 是否可以使用 c# 编译器添加 PostSharp 进行动态编译

我正在使用Microsoft.CodeDom.Providers.DotNetCompilerPlatformnuget packge 在运行时编译代码。这是可以实现的,但在我的场景中,我的动态类需要用于Postsharp面向方面的编程。

任何人都可以指向命令行支持,以Postsharp使用 为编译的程序集添加依赖注入csc.exe,就像 MSBuild 或 Visualstudio.

0 投票
0 回答
25 浏览

vb.net - 如何使用 VB.Net CodeDomProvider 编译带有空条件运算符或多行字符串的源代码

我能够使用 VB.Net CodeDomProvider 来编译使用大多数 VB.Net 功能的源代码。我无法成功编译使用空条件运算符或多行字符串的源代码。

测试 2 和测试 3 中的附加 ur_code_text 行不应阻止程序编译。它们是有效的陈述。

对于我在哪里可以找到更多文档如何使用 VB.Net CodeDomProvider 来启用这些功能,您有什么建议吗?还是在某处说不支持这些功能?

0 投票
0 回答
38 浏览

c# - 使用 codedom 编译器编译二进制文件时嵌入到资源中的 C# 导入 DLL

我想从用 codedom 编译器编译的 exe 文件的资源中导入用 C++ 编写的 DLL。我正在使用 CompilerParameters 和 EmbeddedResources.Add 函数将我的 .dll 文件添加到资源中。我的问题是访问此资源并将其导入而不将其放到磁盘上。我找不到太多关于从资源中导入 DLL 并同时将其保留在其中的信息 + 我正在使用 codedom 编译器来构建将其保留在其中的 exe。

我尝试过的:搜索我尝试使用 Assembly.GetManifestResourceStream() 以某种方式导入 dll 的文档,但它没有奏效。

我的目标是在资源中使用嵌入的 dll 文件编译 exe,然后使用参数运行这个 dll 函数。我不想删除 dll,如果文件保留在资源中,那就太好了。

0 投票
0 回答
65 浏览

roslyn - Project.GetCompilationAsync() 与 CSharpCodeProvider.CompileAssemblyFromSource() 用于在运行时使用 Roslyn 编译源代码

我继承了一个使用 Microsoft.CSharp.CSharpCodeProvider 的项目,该项目现已成为旧版,因此我已切换到新的 Roslyn 版本 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,如下所述:

问题 50241006

现在我想为我正在编译的项目添加使用 NuGet 包的功能,最好是在 SDK 样式的 .csproj 文件中使用较新的包引用格式。

我的问题是使用 Microsoft.CodeAnalysis 会更好吗?Project.GetCompilationAsync比 CSharpCodeProvider.CompileAssemblyFromSource(),如果是这样怎么办?我说得更好,因为它看起来像 DotNetCompilerPlatform 是由 APS.NET 团队生产的,而且我没有使用 ASP.NET(但它似乎仍然可以工作)。( ref ) 我无法很好地概述这两者之间的区别,或者为什么后者甚至存在。

请注意,我对通过 CodeDom API 生成代码不感兴趣,我想编译在我的应用程序部署后创建的用户代码,并且该代码可能依赖于包。

我不只是尝试它的原因是我不知道如何加载 Microsoft.CodeAnalysis.Project。它没有构造函数,但可以从没有构造函数的解决方案中获得,而后者又可以从工作空间获得,工作空间有一个需要 HostServices 的构造函数,如果你有工作空间,可以通过工厂方法创建传递给它。

我仍然不确定 CodeAnalysis 是否适合从源代码编译或仅编译通过 CodeDom 生成的内容。

谢谢。

0 投票
1 回答
45 浏览

vb.net - System.CodeDom.Compiler 接口 IScript 未定义

我使用以下答案来测试编译代码:

https://stackoverflow.com/a/21382083/9942758

https://stackoverflow.com/a/14711110/9942758

这是我的代码:

我不断收到编译器错误“未定义类型'IScript'”

如果我在我的字符串生成器中明确定义 IScript 接口,我不会收到编译器错误,但是从“类脚本”转换为 IScript 会失败。

我在这里想念什么?

0 投票
1 回答
49 浏览

c# - C# GenerateCodeFromCompileUnit 正在生成带有特殊字符的代码 [Microsoft.CSharp.CSharpCodeProvider]

我正在使用GenerateCodeFromCompileUnitIndentedTextWriterC#源文件生成代码。这样做我可以生成一个.cs文件。但是我看到@在每个声明的变量和函数返回类型之前都插入了一个特殊字符。这是我的代码。

我正在使用一个Class来保存要插入的功能详细信息。

输出