Ecng.Compilation 1.0.290

dotnet add package Ecng.Compilation --version 1.0.290
                    
NuGet\Install-Package Ecng.Compilation -Version 1.0.290
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Ecng.Compilation" Version="1.0.290" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Compilation" Version="1.0.290" />
                    
Directory.Packages.props
<PackageReference Include="Ecng.Compilation" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Ecng.Compilation --version 1.0.290
                    
#r "nuget: Ecng.Compilation, 1.0.290"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Ecng.Compilation@1.0.290
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Ecng.Compilation&version=1.0.290
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Compilation&version=1.0.290
                    
Install as a Cake Tool

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.290 214 2/4/2026
1.0.289 150 2/4/2026
1.0.288 321 2/1/2026
1.0.287 278 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
1.0.273 291 1/9/2026
1.0.272 238 1/9/2026
1.0.271 193 1/8/2026
1.0.270 201 1/8/2026
1.0.269 212 1/7/2026
1.0.268 239 1/6/2026
1.0.267 153 1/6/2026
1.0.266 300 1/4/2026
1.0.265 247 1/1/2026
1.0.264 186 12/31/2025
1.0.263 200 12/30/2025
1.0.262 183 12/30/2025
1.0.261 181 12/29/2025
1.0.260 187 12/29/2025
1.0.259 202 12/26/2025
1.0.258 187 12/26/2025
1.0.257 193 12/26/2025
1.0.256 203 12/26/2025
1.0.255 281 12/25/2025
1.0.254 280 12/25/2025
1.0.253 285 12/24/2025
1.0.252 291 12/22/2025
1.0.251 267 12/21/2025
1.0.250 348 12/19/2025
1.0.249 345 12/19/2025
1.0.248 445 12/17/2025
1.0.247 455 12/16/2025
1.0.246 369 12/15/2025
1.0.245 357 12/15/2025
1.0.244 327 12/14/2025
1.0.243 273 12/14/2025
1.0.242 288 12/13/2025
1.0.241 280 12/13/2025
1.0.240 271 12/12/2025
1.0.239 238 12/12/2025
1.0.238 245 12/12/2025
1.0.237 239 12/12/2025
1.0.236 234 12/12/2025
1.0.235 243 12/12/2025
1.0.234 238 12/12/2025
1.0.233 928 12/2/2025
1.0.232 805 12/2/2025
1.0.231 796 12/2/2025
1.0.230 424 11/30/2025
1.0.229 269 11/29/2025
1.0.228 266 11/28/2025
1.0.227 269 11/28/2025
1.0.226 338 11/27/2025
1.0.225 426 11/24/2025
1.0.224 344 11/24/2025
1.0.223 357 11/23/2025
1.0.222 329 11/23/2025
1.0.221 407 11/22/2025
1.0.220 639 11/20/2025
1.0.219 588 11/18/2025
1.0.218 546 11/18/2025
1.0.217 541 11/13/2025
1.0.216 438 11/10/2025
1.0.215 1,315 11/1/2025
1.0.214 415 10/28/2025
1.0.213 424 10/27/2025
1.0.212 371 10/27/2025
1.0.211 300 10/25/2025
1.0.210 343 10/24/2025
1.0.209 545 10/20/2025
1.0.208 565 10/12/2025
1.0.207 338 10/11/2025
1.0.206 625 10/7/2025
1.0.205 442 10/6/2025
1.0.204 662 10/3/2025
1.0.203 466 10/1/2025
1.0.202 372 10/1/2025
1.0.201 396 9/30/2025
1.0.200 421 9/28/2025
1.0.199 461 9/25/2025
1.0.198 3,194 9/5/2025
1.0.197 472 9/2/2025
1.0.196 1,191 8/30/2025
1.0.195 453 8/30/2025
1.0.194 489 8/20/2025
1.0.193 376 8/20/2025
1.0.192 423 8/19/2025
1.0.191 436 8/15/2025
1.0.190 2,569 7/16/2025
1.0.189 865 7/14/2025
1.0.188 468 7/13/2025
1.0.187 391 7/13/2025
1.0.186 381 7/12/2025
1.0.185 719 7/8/2025
1.0.184 690 7/4/2025
1.0.183 434 7/2/2025
1.0.182 842 6/24/2025
1.0.181 1,464 6/16/2025
1.0.180 587 6/9/2025
1.0.179 464 6/8/2025
1.0.178 856 5/25/2025
1.0.177 433 5/21/2025
1.0.176 411 5/21/2025
1.0.175 377 5/17/2025
1.0.174 369 5/17/2025
1.0.173 380 5/17/2025
1.0.172 915 5/12/2025
1.0.171 504 5/12/2025
1.0.170 463 5/12/2025
1.0.169 405 5/11/2025
1.0.168 398 5/11/2025
1.0.167 367 5/10/2025
1.0.166 356 5/10/2025
1.0.165 380 5/3/2025
1.0.164 537 4/17/2025
1.0.163 498 4/15/2025
1.0.162 422 4/12/2025
1.0.161 455 4/9/2025
1.0.160 1,676 3/22/2025
1.0.159 436 3/20/2025
1.0.158 412 3/20/2025
1.0.157 421 3/19/2025
1.0.156 1,382 2/26/2025
1.0.155 394 2/26/2025
1.0.154 1,613 2/8/2025
1.0.153 396 2/8/2025
1.0.152 385 2/8/2025
1.0.151 400 2/6/2025
1.0.150 396 2/6/2025
1.0.149 402 2/6/2025
1.0.148 392 2/6/2025
1.0.147 379 2/6/2025
1.0.146 418 2/5/2025
1.0.145 419 2/5/2025
1.0.144 410 2/5/2025
1.0.143 439 2/3/2025
1.0.142 393 2/2/2025
1.0.141 407 2/1/2025
1.0.140 416 1/31/2025
1.0.139 409 1/30/2025
1.0.138 424 1/26/2025
1.0.137 510 1/21/2025
1.0.136 391 1/21/2025
1.0.135 432 1/20/2025
1.0.134 389 1/20/2025
1.0.133 483 1/19/2025
1.0.132 433 1/19/2025
1.0.131 545 1/17/2025
1.0.130 415 1/17/2025
1.0.129 465 1/14/2025
1.0.128 692 1/12/2025
1.0.127 482 1/12/2025
1.0.126 483 1/12/2025
1.0.125 497 1/12/2025
1.0.124 481 1/12/2025
1.0.123 453 1/12/2025
1.0.122 458 1/12/2025
1.0.121 476 1/11/2025
1.0.120 506 1/10/2025
1.0.119 515 1/10/2025
1.0.118 509 1/9/2025
1.0.117 443 1/9/2025
1.0.116 413 1/9/2025
1.0.115 438 1/9/2025
1.0.114 1,653 12/27/2024
1.0.113 479 12/19/2024
1.0.112 502 11/20/2024
1.0.111 1,326 11/18/2024
1.0.110 721 11/7/2024
1.0.109 364 11/7/2024
1.0.108 393 11/7/2024
1.0.107 368 11/7/2024
1.0.106 367 11/7/2024
1.0.105 366 11/7/2024
1.0.104 365 11/7/2024
1.0.103 389 11/6/2024
1.0.102 402 10/31/2024
1.0.101 484 10/19/2024
1.0.100 1,087 10/12/2024
1.0.99 725 10/9/2024
1.0.98 649 10/5/2024
1.0.97 1,355 9/18/2024
1.0.96 417 9/17/2024
1.0.95 1,093 9/3/2024
1.0.94 401 9/1/2024
1.0.93 1,578 8/8/2024
1.0.92 2,627 6/12/2024
1.0.91 861 5/28/2024
1.0.90 1,494 5/4/2024
1.0.89 1,086 4/23/2024
1.0.88 400 4/21/2024
1.0.87 459 4/14/2024
1.0.86 1,273 3/28/2024
1.0.85 468 3/17/2024
1.0.84 1,461 2/23/2024
1.0.83 439 2/23/2024
1.0.82 1,185 2/18/2024
1.0.81 379 2/18/2024
1.0.80 392 2/16/2024
1.0.79 1,023 2/13/2024
1.0.78 854 2/8/2024
1.0.77 1,139 2/5/2024
1.0.76 402 2/4/2024
1.0.75 1,143 1/23/2024
1.0.74 389 1/23/2024
1.0.73 1,096 1/12/2024
1.0.72 1,215 1/2/2024
1.0.71 443 12/29/2023
1.0.70 1,415 12/15/2023
1.0.69 509 12/15/2023
1.0.68 472 12/13/2023
1.0.67 491 12/13/2023
1.0.66 2,442 11/12/2023
1.0.65 488 11/10/2023
1.0.64 471 11/10/2023
1.0.63 465 11/9/2023
1.0.62 477 11/3/2023
1.0.61 485 11/1/2023
1.0.60 501 11/1/2023
1.0.59 4,196 9/8/2023
1.0.58 443 9/8/2023
1.0.57 454 9/8/2023
1.0.56 519 9/8/2023
1.0.55 480 9/8/2023
1.0.54 473 9/7/2023
1.0.53 583 9/3/2023
1.0.52 631 8/21/2023
1.0.51 616 8/15/2023
1.0.50 548 8/14/2023
1.0.49 536 8/14/2023
1.0.48 548 8/10/2023
1.0.47 3,900 7/1/2023
1.0.46 560 6/29/2023
1.0.45 2,143 5/27/2023
1.0.44 620 5/21/2023
1.0.43 649 5/19/2023
1.0.42 2,471 5/8/2023
1.0.41 669 5/1/2023
1.0.40 653 4/22/2023
1.0.39 652 4/21/2023
1.0.38 4,331 4/3/2023
1.0.37 771 3/27/2023
1.0.36 829 3/21/2023
1.0.35 805 3/13/2023
1.0.34 683 3/12/2023
1.0.33 729 3/11/2023
1.0.32 2,259 3/6/2023
1.0.31 805 2/26/2023
1.0.30 2,607 2/21/2023
1.0.29 796 2/20/2023
1.0.28 825 2/15/2023
1.0.27 829 2/14/2023
1.0.26 3,355 2/9/2023
1.0.25 2,453 2/7/2023
1.0.24 867 2/4/2023
1.0.23 2,606 2/2/2023
1.0.22 2,651 1/30/2023
1.0.21 910 1/18/2023
1.0.20 5,230 12/30/2022
1.0.19 917 12/23/2022
1.0.18 885 12/23/2022
1.0.17 22,991 12/12/2022
1.0.16 66,375 11/11/2022
1.0.15 2,726 11/11/2022
1.0.14 5,143 11/5/2022
1.0.13 29,213 11/1/2022
1.0.12 26,930 10/16/2022
1.0.11 58,882 9/8/2022
1.0.10 3,062 9/8/2022
1.0.9 3,008 9/8/2022
1.0.8 99,306 8/24/2022
1.0.7 17,221 7/26/2022
1.0.6 103,265 7/18/2022
1.0.5 111,303 4/30/2022
1.0.4 23,870 3/29/2022
1.0.3 462,640 12/29/2021
1.0.2 31,423 12/20/2021
1.0.1 63,381 12/6/2021
1.0.0 4,348 12/2/2021