/*
using System.Reflection;
using System.CodeDom;
using System.CodeDom.Compiler;
*/
private void Compiler()
{
CompilerParameters vCompilerParameters = new CompilerParameters();
vCompilerParameters.GenerateExecutable = false;
vCompilerParameters.GenerateInMemory = true;
vCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");//添加引用
string vSource =
"using System.Windows.Forms; " +//添加引用
"public class ClassTemp " +
"{ public ClassTemp(string ls_cs){MessageBox.Show(ls_cs);}" +
" public void Test(string ls_test) " +
" { " +
" MessageBox.Show(ls_test);" +
" } " +
"} ";
CompilerResults vCompilerResults =
CodeDomProvider.CreateProvider("CSharp").CompileAssemblyFromSource(vCompilerParameters, vSource);
Assembly vAssembly = vCompilerResults.CompiledAssembly;//至此编译出Assembly
Object[] args1 = new Object[1];
args1[0] = "test";
object vTemp = vAssembly.CreateInstance("ClassTemp", true, System.Reflection.BindingFlags.Default, null, args1, null, null);//创建类的实例
MethodInfo vTest = vTemp.GetType().GetMethod("Test");//从实例中取到方法放入MethodInfo中
Object[] args = new Object[1];
args[0] = "test";
vTest.Invoke(vTemp, args);//调用方法
}
分享到:
相关推荐
在.NET框架中,C#程序员有时需要在运行时动态地执行代码字符串,这通常涉及到`System.CodeDom`命名空间中的类。`CodeDom`提供了一种编译和执行字符串代码的方法,而无需直接使用`eval`函数,如JavaScript中常见的...
在WPF应用中,你可以将这个函数封装到一个按钮点击事件或其他适当的事件处理程序中,然后将用户输入的C#代码作为字符串传递给`DynamicCompile`函数。注意,由于动态编译的安全风险,你应该对用户提供或输入的代码...
本示例展示了如何在C#中动态编译一个包含简单方法的字符串,并调用该方法。这个过程通常用于在程序运行时根据用户的输入或配置来生成和执行代码。 首先,我们定义了一个字符串`code`,其中包含了我们要编译的C#源...
- **CompilerAssemblyFromSource(CompilerParameters option, string source)**:这个方法使用指定的编译器,从包含源代码的字符串中编译程序集。 #### CompilerParameters 表示用于调用编译器的一组参数。 - **...
本篇将详细介绍两种C#中实现动态编译的方法,并通过一个名为`ConsoleApplication1`的示例项目来阐述。 ### 方法一:使用`Microsoft.CSharp.CSharpCodeProvider` `Microsoft.CSharp.CSharpCodeProvider`是.NET框架...
通过实例化`CSharpCodeProvider`,可以使用其`CompileAssemblyFromSource`方法将源代码字符串编译为`Assembly`对象。 4. **动态编译步骤** - **创建CodeDom对象**:利用`CodeDom`类创建源代码的抽象表示,例如定义...
接着,使用`CompileAssemblyFromSource`方法将字符串源代码编译为`Assembly`对象。如果编译过程中出现错误,我们可以通过遍历`CompilerResults.Errors`来处理。如果没有错误,我们可以获取`EntryPoint`方法并创建...
例如,我们可以使用CSharpCodeProvider创建一个代码提供者,然后将字符串形式的C#代码传入,编译成一个Assembly。 三、Roslyn编译API 微软的Roslyn项目为C#和VB.NET提供了开源的编译器API,这使得动态编译变得更加...
我们可以实例化这个类,并调用其`CompileAssemblyFromSource`方法来编译CodeDom对象或字符串形式的源代码,得到一个编译后的Assembly对象。 3. **动态编译步骤**: - **创建CodeDom对象**:首先,我们需要根据...
举一个简单的例子,假设我们要创建一个名为`StringConcatenate`的聚合函数,它将所有输入字符串连接成一个长字符串: ```csharp using System; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; ...
CodeDOM允许开发者构建代码对象模型,然后通过CodeDomProvider类将其转换为特定语言(如C#)的源代码字符串。 二、`CSharpCodeProvider` `CSharpCodeProvider`是CodeDomProvider的一个具体实现,专门用于处理C#代码...
本案例将深入探讨如何利用C#实现动态脚本编译和执行,以及相关的知识点。 首先,我们要了解的关键概念是`System.CodeDom.Compiler`命名空间,它提供了编译源代码到中间语言(IL)的能力。其中,`CodeDom`类库允许...
`SyntaxTree`类代表了代码的语法结构,可以使用`CSharpSyntaxGenerator`来生成符合C#语法规则的代码字符串。例如,创建一个简单的类: ```csharp var classDeclaration = SyntaxFactory.ClassDeclaration(...
对于C#开发者,虽然没有内置的`eval`函数,但可以借助Roslyn编译器API将字符串编译为.NET的IL(中间语言)代码,然后执行。例如: ```csharp using System; using Microsoft.CSharp; using Microsoft.CodeAnalysis;...
以下是一个简单的示例,展示了如何从字符串中动态编译C#代码: ```csharp using System.CodeDom.Compiler; using Microsoft.CSharp; // 创建代码提供者 ICodeCompiler compiler = new CSharpCodeProvider()....
- 将所有路径变量处理逻辑替换为使用UTF-8编码转换的实现,即使用`System.Text.Encoding.UTF8.GetBytes(utf8_path)`获取字节,再通过`System.Text.Encoding.Default.GetString()`还原为字符串,以支持中文路径。...
2. `Assembly.Load`: 这个静态方法用于从文件路径、内存字节流或者字符串形式的强名称加载程序集。 3. `Type`: 表示.NET中的类型,可以用来查找和实例化类。 4. `MethodInfo`: 提供了对方法的反射访问,包括获取方法...
下面将详细介绍如何使用C#执行JavaScript动态编译的方法。 首先,C#中的动态编译涉及到`System.CodeDom.Compiler`命名空间,它包含`CodeDomProvider`类,用于编译源代码到可执行的.NET程序集。在本例中,我们使用了...
4. **编译代码**:调用`CSharpCodeProvider`实例的`CompileAssemblyFromSource`方法,传入`CompilerParameters`和源代码字符串,进行编译。如果编译过程中出现错误,`CompilerResults`对象会包含这些错误信息。 5. ...
如果需要编译来自多个源文件的代码,可以将源代码字符串放在一个字符串数组中传递给`CompileAssemblyFromSource`方法。如果源代码保存在单独的文件中,可以使用`CompileAssemblyFromFile`方法,它接受`...