Ecng.Compilation
1.0.293
dotnet add package Ecng.Compilation --version 1.0.293
NuGet\Install-Package Ecng.Compilation -Version 1.0.293
<PackageReference Include="Ecng.Compilation" Version="1.0.293" />
<PackageVersion Include="Ecng.Compilation" Version="1.0.293" />
<PackageReference Include="Ecng.Compilation" />
paket add Ecng.Compilation --version 1.0.293
#r "nuget: Ecng.Compilation, 1.0.293"
#:package Ecng.Compilation@1.0.293
#addin nuget:?package=Ecng.Compilation&version=1.0.293
#tool nuget:?package=Ecng.Compilation&version=1.0.293
Ecng.Compilation
Dynamic code compilation infrastructure for C#, F#, and Python. Compile code at runtime, manage references, and cache assemblies.
Overview
This library provides a unified interface for runtime code compilation supporting multiple languages through specialized providers.
Core Types
ICompiler Interface
The main abstraction for compilers.
public interface ICompiler
{
string Extension { get; } // e.g., ".cs", ".fs", ".py"
bool IsAssemblyPersistable { get; } // Can save compiled assembly
bool IsTabsSupported { get; } // Language supports tabs
bool IsCaseSensitive { get; } // Language is case-sensitive
bool IsReferencesSupported { get; } // Supports external references
ICompilerContext CreateContext();
Task<CompilationResult> Compile(
string name,
IEnumerable<string> sources,
IEnumerable<(string name, byte[] body)> refs,
CancellationToken ct = default);
Task<CompilationError[]> Analyse(
object analyzer,
IEnumerable<object> analyzerSettings,
string name,
IEnumerable<string> sources,
IEnumerable<(string name, byte[] body)> refs,
CancellationToken ct = default);
}
CompilationResult
Result of a compilation operation.
var result = await compiler.Compile("MyCode", sources, references);
if (result.HasErrors)
{
foreach (var error in result.Errors)
{
Console.WriteLine($"{error.Type}: {error.Message}");
Console.WriteLine($" Line {error.Line}, Column {error.Column}");
}
}
else
{
// Get compiled assembly
Assembly assembly = result.Assembly;
// Or get as bytes for storage
byte[] assemblyBytes = result.AssemblyBytes;
}
CompilationError
Represents a compilation error or warning.
public class CompilationError
{
public CompilationErrorTypes Type { get; } // Error, Warning, Info
public string Id { get; } // e.g., "CS0001"
public string Message { get; }
public int Line { get; }
public int Column { get; }
}
Reference Types
AssemblyReference
Reference to a .NET assembly.
// From file path
var fileRef = new AssemblyReference("path/to/assembly.dll");
// From loaded assembly
var loadedRef = new AssemblyReference(typeof(SomeClass).Assembly);
NuGetReference
Reference to a NuGet package.
var nugetRef = new NuGetReference
{
PackageId = "Newtonsoft.Json",
Version = "13.0.1"
};
Compiler Provider
Manages available compilers and provides access to them.
// Get registered compilers
IEnumerable<ICompiler> compilers = CompilerProvider.Compilers;
// Get compiler by extension
ICompiler csCompiler = CompilerProvider.GetCompiler(".cs");
ICompiler fsCompiler = CompilerProvider.GetCompiler(".fs");
ICompiler pyCompiler = CompilerProvider.GetCompiler(".py");
Compiler Implementations
| Package | Language | Extension |
|---|---|---|
| Ecng.Compilation.Roslyn | C# | .cs |
| Ecng.Compilation.FSharp | F# | .fs |
| Ecng.Compilation.Python | Python | .py |
Expression Formulas
Parse and evaluate mathematical expressions at runtime.
using Ecng.Compilation.Expressions;
// Parse expression
var formula = ExpressionHelper.Parse("(a + b) * 2");
// Get variables used
IEnumerable<string> vars = formula.Variables; // ["a", "b"]
// Evaluate with values
var values = new Dictionary<string, decimal>
{
["a"] = 10,
["b"] = 5
};
decimal result = formula.Calculate(values); // 30
Supported Operations
- Arithmetic:
+,-,*,/,% - Comparison:
<,>,<=,>=,==,!= - Logical:
&&,||,! - Functions:
abs,sqrt,min,max,pow, etc.
Assembly Load Context
Manage assembly loading for isolation.
using Ecng.Compilation;
// Track loaded assemblies
var tracker = new AssemblyLoadContextTracker();
// Load assembly in isolated context
var context = tracker.CreateContext("MyPlugin");
Assembly asm = context.LoadFromAssemblyPath("plugin.dll");
// Unload when done
tracker.Unload("MyPlugin");
Compiler Cache
Cache compiled assemblies for reuse.
public interface ICompilerCache
{
bool TryGet(string key, out byte[] assembly);
void Set(string key, byte[] assembly);
void Remove(string key);
void Clear();
}
Usage Examples
Compile C# Code
var compiler = CompilerProvider.GetCompiler(".cs");
string code = @"
public class Calculator
{
public int Add(int a, int b) => a + b;
}";
var result = await compiler.Compile(
name: "Calculator",
sources: new[] { code },
refs: Array.Empty<(string, byte[])>());
if (!result.HasErrors)
{
var type = result.Assembly.GetType("Calculator");
var instance = Activator.CreateInstance(type);
var method = type.GetMethod("Add");
int sum = (int)method.Invoke(instance, new object[] { 2, 3 });
Console.WriteLine(sum); // 5
}
Compile with References
var refs = new List<(string, byte[])>();
// Add reference
var asmBytes = File.ReadAllBytes("MyLibrary.dll");
refs.Add(("MyLibrary.dll", asmBytes));
var result = await compiler.Compile("MyCode", sources, refs);
NuGet
Install-Package Ecng.Compilation
Install-Package Ecng.Compilation.Roslyn # For C# support
Install-Package Ecng.Compilation.FSharp # For F# support
Install-Package Ecng.Compilation.Python # For Python support
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Ecng.ComponentModel (>= 1.0.428)
-
net6.0
- Ecng.ComponentModel (>= 1.0.428)
NuGet packages (7)
Showing the top 5 NuGet packages that depend on Ecng.Compilation:
| Package | Downloads |
|---|---|
|
StockSharp.Algo
Trading algorithms. More info on web site https://stocksharp.com/store/ |
|
|
Ecng.Compilation.Roslyn
Ecng system framework |
|
|
Ecng.Roslyn
Ecng system framework |
|
|
Ecng.Compilation.Python
Ecng system framework |
|
|
Ecng.Compilation.FSharp
Ecng system framework |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Ecng.Compilation:
| Repository | Stars |
|---|---|
|
StockSharp/StockSharp
Algorithmic trading and quantitative trading open source platform to develop trading robots (stock markets, forex, crypto, bitcoins, and options).
|
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.293 | 189 | 2/10/2026 |
| 1.0.292 | 131 | 2/10/2026 |
| 1.0.291 | 134 | 2/10/2026 |
| 1.0.290 | 367 | 2/4/2026 |
| 1.0.289 | 206 | 2/4/2026 |
| 1.0.288 | 325 | 2/1/2026 |
| 1.0.287 | 279 | 1/26/2026 |
| 1.0.286 | 193 | 1/26/2026 |
| 1.0.285 | 211 | 1/22/2026 |
| 1.0.284 | 202 | 1/22/2026 |
| 1.0.283 | 210 | 1/21/2026 |
| 1.0.282 | 256 | 1/19/2026 |
| 1.0.281 | 194 | 1/19/2026 |
| 1.0.280 | 187 | 1/18/2026 |
| 1.0.279 | 182 | 1/18/2026 |
| 1.0.278 | 203 | 1/16/2026 |
| 1.0.277 | 263 | 1/14/2026 |
| 1.0.276 | 195 | 1/13/2026 |
| 1.0.275 | 198 | 1/13/2026 |
| 1.0.274 | 202 | 1/12/2026 |