RuntimeCompiler 4.1.0
See the version list below for details.
dotnet add package RuntimeCompiler --version 4.1.0
NuGet\Install-Package RuntimeCompiler -Version 4.1.0
<PackageReference Include="RuntimeCompiler" Version="4.1.0" />
paket add RuntimeCompiler --version 4.1.0
#r "nuget: RuntimeCompiler, 4.1.0"
// Install RuntimeCompiler as a Cake Addin #addin nuget:?package=RuntimeCompiler&version=4.1.0 // Install RuntimeCompiler as a Cake Tool #tool nuget:?package=RuntimeCompiler&version=4.1.0
RuntimeCompiler
RuntimeCompiler
affers easy to use Methods which will compile C# code to an Action
or Func
at runtime.
It uses the Roslyn Compiler platform to acchieve the outcome, so the result is just the same as if you had written code and compiled it down to a normal Assembly
.
Usage
Basic
var action = RuntimeCompiler.CompileAction("Console.WriteLine(\"Hello from my dynamic action!\")");
action(); // Output: Hello from my dynamic action!
var func = RuntimeCompiler.CompileFunction<int>("1");
var result = func(1); // result is 1
var greeterFunc = Runtimpiler.CompileFunction<string, string>("\"Hello \" + it");
var greeting = func("World") // greeting is "Hello World"
var sumFunc = RuntimeCompiler.CompileFunction<int, int, int>("x + y", new { "x", "y"});
var sum = func(1, 2); // sum is 3
With method body
var methodBody = @"
for (int i = 0; i < times; i++)
{
Console.WriteLine(""Hello "" + name);
}
";
var multiGreeter = RuntimeCompiler.CompileAction<string, int>(methodBody, new [] { "name", "times" });
multiGreeter("World", 10); // outputs "Hello World" ten times
Custom types
The System
namespace and all namespaces from parameter or return types are automatically added as using statements and the appropriate Assemblies are automatically imported too.
If you need additional types (and usings), you can supply these as parameters.
namespace MyNamespace
{
public class MyClass
{
public int Foo { get; set; }
}
}
// ...
var methodBody = @"
var x = new MyClass();
x.Foo = 3;
Console.WriteLine(x.Foo);
";
var action = Compiler.CompileAction(methodBody, "using MyNamespace;");
action();
Going deeper
If you ned even more control, you can use Compiler.CompileMethod(...)
or Compiler.CompileAssembly(...)
.
Warning
With great power comes great responsibility! This will inject code into your running application so it opens up a very high risk for attackers to compromise your systems. Use it only in environments where you have full control over the inputs given. You must never allow any unverified user input to be passed in!
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- Microsoft.CodeAnalysis.CSharp (>= 4.8.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
4.3.0 | 319 | 7/10/2024 |
4.2.0 | 102 | 5/24/2024 |
4.1.0 | 488 | 1/9/2024 |
4.0.0 | 228 | 11/14/2023 |
3.3.0 | 191 | 9/5/2023 |
3.2.0 | 324 | 6/14/2023 |
3.1.0 | 279 | 4/18/2023 |
3.0.1 | 610 | 11/9/2022 |
3.0.0 | 309 | 11/9/2022 |
2.0.2 | 440 | 10/10/2022 |
2.0.1 | 420 | 8/16/2022 |
2.0.0 | 366 | 8/16/2022 |
1.0.1 | 376 | 8/16/2022 |
1.0.0 | 354 | 5/14/2021 |