Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
242 changes: 122 additions & 120 deletions src/CSScriptLib/src/CSScriptLib/CSScriptLib.csproj
Original file line number Diff line number Diff line change
@@ -1,129 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>CSScriptLib</AssemblyName>
<LangVersion>latest</LangVersion>
<PackageId>CS-Script</PackageId>
<!--<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>-->
<!--<PackageTargetFallback>$(PackageTargetFallback);dnxcore50</PackageTargetFallback>-->
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<IncludeSymbols>true</IncludeSymbols>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>4.14.7.0</Version>
<Authors>Oleg Shilo</Authors>
<Description>CS-Script engine Class Library for .NET</Description>
<Copyright>(C) 2018-2026 Oleg Shilo</Copyright>
<PackageLicenseUrl></PackageLicenseUrl>
<PackageProjectUrl>https://github.com/oleg-shilo/cs-script</PackageProjectUrl>
<PackageIconUrl></PackageIconUrl>
<RepositoryUrl>https://github.com/oleg-shilo/cs-script.git</RepositoryUrl>
<RepositoryType>Git</RepositoryType>
<PackageTags>C#, scripting, script, dynamic, .NET. .NET Core</PackageTags>
<PackageReleaseNotes>---
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>CSScriptLib</AssemblyName>
<LangVersion>latest</LangVersion>
<PackageId>CS-Script</PackageId>
<!--<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>-->
<!--<PackageTargetFallback>$(PackageTargetFallback);dnxcore50</PackageTargetFallback>-->
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<IncludeSymbols>true</IncludeSymbols>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>4.14.8.0</Version>
<Authors>Oleg Shilo</Authors>
<Description>CS-Script engine Class Library for .NET</Description>
<Copyright>(C) 2018-2026 Oleg Shilo</Copyright>
<PackageLicenseUrl></PackageLicenseUrl>
<PackageProjectUrl>https://github.com/oleg-shilo/cs-script</PackageProjectUrl>
<PackageIconUrl></PackageIconUrl>
<RepositoryUrl>https://github.com/oleg-shilo/cs-script.git</RepositoryUrl>
<RepositoryType>Git</RepositoryType>
<PackageTags>C#, scripting, script, dynamic, .NET. .NET Core</PackageTags>
<PackageReleaseNotes>
---

## Changes
## Changes

### CLI
### CLI

- &amp;lt;no changes&amp;gt;
- &amp;lt;no changes&amp;gt;


### CSScriptLib
### CSScriptLib

- #453: CSScriptLib: allow //css_precompiler directive proessing for Roslyn compiler engine.</PackageReleaseNotes>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<AssemblyVersion>4.14.7.0</AssemblyVersion>
<FileVersion>4.14.7.0</FileVersion>
<PackageVersion>4.14.7.0</PackageVersion>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageIcon>css_logo.png</PackageIcon>
<SignAssembly>True</SignAssembly>
<AssemblyOriginatorKeyFile>sgKey.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
</ItemGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>CSScriptLib.xml</DocumentationFile>
<PlatformTarget>AnyCPU</PlatformTarget>
<DefineConstants>TRACE;class_lib</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DocumentationFile>CSScriptLib.xml</DocumentationFile>
<DefineConstants>TRACE;class_lib</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Compile Remove="AppDomain.cs" />
<Compile Remove="CSScriptLib.Eval.CodeDom.cs" />
<Compile Remove="output\aggregate.cs" />
<Compile Remove="output\Test.cs" />
<Compile Remove="sample.cs" />
<Compile Remove="samples.cs" />
</ItemGroup>
<ItemGroup>
<None Remove="CSScriptLib.xml" />
<None Remove="nuget-samples.cmd" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\..\cscs\CodeDom\CompilerResults.cs" Link="CodeDom\CompilerResults.cs" />
<Compile Include="..\..\..\cscs\CodeDom\CompilerError.cs" Link="CodeDom\CompilerError.cs" />
<Compile Include="..\..\..\cscs\fileparser.cs" Link="fileparser.cs" />
<Compile Include="..\..\..\cscs\Precompiler.cs" Link="Precompiler.cs" />
<Compile Include="..\..\..\cscs\Project.cs" Link="Project.cs" />
<Compile Include="..\..\..\cscs\ScriptParser.cs" Link="ScriptParser.cs" />
<Compile Include="..\..\..\cscs\ScriptParsingResult.cs" Link="ScriptParsingResult.cs" />
<Compile Include="..\..\..\cscs\Utils\CoreExtensions.cs" Link="Utils\CoreExtensions.cs" />
<Compile Include="..\..\..\cscs\Utils\CurrentDirGuard.cs" Link="Utils\CurrentDirGuard.cs" />
<Compile Include="..\..\..\cscs\Utils\LinqExtensions.cs" Link="Utils\LinqExtensions.cs" />
<Compile Include="..\..\..\cscs\Utils\NugetPackageDownloader.cs" Link="NugetPackageDownloader.cs" />
<Compile Include="..\..\..\cscs\Utils\PathExtensions.cs" Link="Utils\PathExtensions.cs" />
<Compile Include="..\..\..\cscs\Utils\Globals.cs" Link="Utils\Globals.cs" />
<Compile Include="..\..\..\cscs\Utils\Profiler.cs" Link="Profiler.cs" />
<Compile Include="..\..\..\cscs\Utils\ReflectionExtensions.cs" Link="Utils\ReflectionExtensions.cs" />
<Compile Include="..\..\..\cscs\Utils\Runtime.cs" Link="Utils\Runtime.cs" />
<Compile Include="..\..\..\cscs\Utils\SimpleAsmProbing.cs" Link="SimpleAsmProbing.cs" />
<Compile Include="..\..\..\cscs\Utils\SocketExtensions.cs" Link="SocketExtensions.cs" />
<Compile Include="..\..\..\cscs\Utils\StringExtensions.cs" Link="Utils\StringExtensions.cs" />
<Compile Include="..\..\..\cscs\Utils\WildCardExtensions.cs" Link="Utils\WildCardExtensions.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.14.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Scripting.Common" Version="4.14.0" />
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="9.0.7" />
<PackageReference Include="System.Text.Json" Version="9.0.7" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\logo\css_logo.png">
<Pack>True</Pack>
<PackagePath></PackagePath>
</None>
<None Include="samples.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="CodeDom\" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<Generator>ResXFileCodeGenerator</Generator>
<CustomToolNamespace>CSScripting</CustomToolNamespace>
</EmbeddedResource>
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="IF exist &quot;$(ProjectDir)out&quot; ( echo . ) ELSE ( md &quot;$(ProjectDir)out&quot;)&#xD;&#xA;&#xD;&#xA;copy &quot;$(TargetDir)$(TargetFileName)&quot; &quot;$(ProjectDir)output\$(TargetFileName)&quot;&#xD;&#xA;copy &quot;$(TargetDir)$(ProjectName).xml&quot; &quot;$(ProjectDir)output\$(ProjectName).xml&quot;&#xD;&#xA;rem copy &quot;$(ProjectDir)..\..\src\CSScriptLib.Client\Test.cs&quot; &quot;$(ProjectDir)output\Test.cs&quot;&#xD;&#xA;rem copy &quot;$(ProjectDir)..\..\src\CSScriptLib.Client\Test.cs&quot; &quot;$(ProjectDir)bin\$(ConfigurationName)\Test.cs&quot;&#xD;&#xA;&#xD;&#xA;" />
</Target>
- #453: CSScriptLib: allow //css_precompiler directive proessing for Roslyn compiler engine.
</PackageReleaseNotes>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<AssemblyVersion>4.14.8.0</AssemblyVersion>
<FileVersion>4.14.8.0</FileVersion>
<PackageVersion>4.14.8.0</PackageVersion>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageIcon>css_logo.png</PackageIcon>
<SignAssembly>True</SignAssembly>
<AssemblyOriginatorKeyFile>sgKey.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
</ItemGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>CSScriptLib.xml</DocumentationFile>
<PlatformTarget>AnyCPU</PlatformTarget>
<DefineConstants>TRACE;class_lib</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DocumentationFile>CSScriptLib.xml</DocumentationFile>
<DefineConstants>TRACE;class_lib</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Compile Remove="AppDomain.cs" />
<Compile Remove="CSScriptLib.Eval.CodeDom.cs" />
<Compile Remove="output\aggregate.cs" />
<Compile Remove="output\Test.cs" />
<Compile Remove="sample.cs" />
<Compile Remove="samples.cs" />
</ItemGroup>
<ItemGroup>
<None Remove="CSScriptLib.xml" />
<None Remove="nuget-samples.cmd" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\..\cscs\CodeDom\CompilerResults.cs" Link="CodeDom\CompilerResults.cs" />
<Compile Include="..\..\..\cscs\CodeDom\CompilerError.cs" Link="CodeDom\CompilerError.cs" />
<Compile Include="..\..\..\cscs\fileparser.cs" Link="fileparser.cs" />
<Compile Include="..\..\..\cscs\Precompiler.cs" Link="Precompiler.cs" />
<Compile Include="..\..\..\cscs\Project.cs" Link="Project.cs" />
<Compile Include="..\..\..\cscs\ScriptParser.cs" Link="ScriptParser.cs" />
<Compile Include="..\..\..\cscs\ScriptParsingResult.cs" Link="ScriptParsingResult.cs" />
<Compile Include="..\..\..\cscs\Utils\CoreExtensions.cs" Link="Utils\CoreExtensions.cs" />
<Compile Include="..\..\..\cscs\Utils\CurrentDirGuard.cs" Link="Utils\CurrentDirGuard.cs" />
<Compile Include="..\..\..\cscs\Utils\LinqExtensions.cs" Link="Utils\LinqExtensions.cs" />
<Compile Include="..\..\..\cscs\Utils\NugetPackageDownloader.cs" Link="NugetPackageDownloader.cs" />
<Compile Include="..\..\..\cscs\Utils\PathExtensions.cs" Link="Utils\PathExtensions.cs" />
<Compile Include="..\..\..\cscs\Utils\Globals.cs" Link="Utils\Globals.cs" />
<Compile Include="..\..\..\cscs\Utils\Profiler.cs" Link="Profiler.cs" />
<Compile Include="..\..\..\cscs\Utils\ReflectionExtensions.cs" Link="Utils\ReflectionExtensions.cs" />
<Compile Include="..\..\..\cscs\Utils\Runtime.cs" Link="Utils\Runtime.cs" />
<Compile Include="..\..\..\cscs\Utils\SimpleAsmProbing.cs" Link="SimpleAsmProbing.cs" />
<Compile Include="..\..\..\cscs\Utils\SocketExtensions.cs" Link="SocketExtensions.cs" />
<Compile Include="..\..\..\cscs\Utils\StringExtensions.cs" Link="Utils\StringExtensions.cs" />
<Compile Include="..\..\..\cscs\Utils\WildCardExtensions.cs" Link="Utils\WildCardExtensions.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.14.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Scripting.Common" Version="4.14.0" />
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="9.0.7" />
<PackageReference Include="System.Text.Json" Version="9.0.7" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\logo\css_logo.png">
<Pack>True</Pack>
<PackagePath></PackagePath>
</None>
<None Include="samples.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="CodeDom\" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<Generator>ResXFileCodeGenerator</Generator>
<CustomToolNamespace>CSScripting</CustomToolNamespace>
</EmbeddedResource>
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="IF exist &quot;$(ProjectDir)out&quot; ( echo . ) ELSE ( md &quot;$(ProjectDir)out&quot;)&#xD;&#xA;&#xD;&#xA;copy &quot;$(TargetDir)$(TargetFileName)&quot; &quot;$(ProjectDir)output\$(TargetFileName)&quot;&#xD;&#xA;copy &quot;$(TargetDir)$(ProjectName).xml&quot; &quot;$(ProjectDir)output\$(ProjectName).xml&quot;&#xD;&#xA;rem copy &quot;$(ProjectDir)..\..\src\CSScriptLib.Client\Test.cs&quot; &quot;$(ProjectDir)output\Test.cs&quot;&#xD;&#xA;rem copy &quot;$(ProjectDir)..\..\src\CSScriptLib.Client\Test.cs&quot; &quot;$(ProjectDir)bin\$(ConfigurationName)\Test.cs&quot;&#xD;&#xA;&#xD;&#xA;" />
</Target>
</Project>
79 changes: 77 additions & 2 deletions src/CSScriptLib/src/CSScriptLib/Evaluator.CodeDom.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
using System.Reflection;
using System.Text;
using System.Threading;
using Microsoft.CodeAnalysis.Scripting;
using csscript;
using CSScripting;
using CSScripting.CodeDom;
Expand Down Expand Up @@ -167,6 +168,66 @@ protected override void Validate(CompileInfo info)
"named parent class. You are using CodeDomEvaluator so you should not set CompileInfo.RootClass to any custom value");
}

/// <summary>
/// Resets Evaluator.
/// <para>
/// Resetting means clearing all referenced assemblies, recreating evaluation infrastructure
/// (e.g. compiler setting) and reconnection to or recreation of the underlying compiling services.
/// </para>
/// <para>
/// Optionally the default current AppDomain assemblies can be referenced automatically with
/// <paramref name="referenceDomainAssemblies"/>.
/// </para>
/// </summary>
/// <param name="referenceDomainAssemblies">
/// if set to <c>true</c> the default assemblies of the current AppDomain will be referenced
/// (see <see
/// cref="M:CSScriptLib.EvaluatorBase`1.ReferenceDomainAssemblies(CSScriptLib.DomainAssemblies)"/> method).
/// </param>
/// <returns>The freshly initialized instance of the <see cref="T:CSScriptLib.IEvaluator"/>.</returns>
public override IEvaluator Reset(bool referenceDomainAssemblies = true)
{
referencedAssemblies.Clear();
referencedAssembliesAliases.Clear();

if (referenceDomainAssemblies)
ReferenceDomainAssemblies();

return this;
}

/// <summary>
/// Clones itself as <see cref="CSScriptLib.IEvaluator"/>.
/// <para>
/// This method returns a freshly initialized copy of the
/// <see cref="CSScriptLib.IEvaluator"/>. The cloning 'depth' can be
/// controlled by the <paramref name="copyRefAssemblies"/>.
/// </para>
/// <para>
/// This method is a convenient technique when multiple
/// <see cref="CSScriptLib.IEvaluator"/> instances are required (e.g.
/// for concurrent script evaluation).
/// </para>
/// </summary>
/// <param name="copyRefAssemblies">if set to <c>true</c> all referenced
/// assemblies from the parent <see cref="CSScriptLib.IEvaluator"/>
/// will be referenced in the cloned copy.</param>
/// <returns>The freshly initialized instance of the
/// <see cref="CSScriptLib.IEvaluator"/>.</returns>
public override IEvaluator Clone(bool copyRefAssemblies = true)
{
var clone = new CodeDomEvaluator();
if (copyRefAssemblies)
{
clone.Reset(false);
foreach (var a in this.GetReferencedAssemblies())
clone.ReferenceAssembly(a);
clone.referencedAssembliesAliases.AddItems(this.referencedAssembliesAliases);
}

return clone;
}

/// <summary>
/// Compiles the specified script text.
/// </summary>
Expand Down Expand Up @@ -468,7 +529,14 @@ public string CompileAssemblyFromCode(string scriptText, CompileInfo info, out P
gac_asms.AddRange(Directory.GetFiles(gac, "Microsoft.*.dll").Where(x => !x.Contains("Native")));

foreach (string file in gac_asms.Concat(ref_assemblies).Distinct())
refs_args.Add($"/r:\"{file}\"");
{
var aliasesList = "";

var aliases = AliasesOf(file);
if (aliases.Any())
aliasesList = aliases.JoinBy(",") + "=";
refs_args.Add($"/r:{aliasesList}\"{file}\"");
}
}
else
{
Expand Down Expand Up @@ -626,6 +694,9 @@ public string CompileAssemblyFromCode(string scriptText, CompileInfo info, out P
}

List<string> referencedAssemblies = new List<string>();
Dictionary<string, string[]> referencedAssembliesAliases = new();

string[] AliasesOf(string assembly) => referencedAssembliesAliases.TryGetValue(assembly, out var aliases) ? aliases : [];

/// <summary>
/// References the given assembly.
Expand All @@ -635,14 +706,15 @@ public string CompileAssemblyFromCode(string scriptText, CompileInfo info, out P
/// </para>
/// </summary>
/// <param name="assembly">The assembly instance.</param>
/// <param name="aliases">The optional aliases for the assembly.</param>
/// <returns>
/// The instance of the <see cref="T:CSScriptLib.IEvaluator"/> to allow fluent interface.
/// </returns>
/// <exception cref="System.Exception">
/// Current version of {EngineName} doesn't support referencing assemblies " + "which are
/// not loaded from the file location.
/// </exception>
public override IEvaluator ReferenceAssembly(Assembly assembly)
public override IEvaluator ReferenceAssembly(Assembly assembly, string[] aliases = null)
{
if (assembly != null)//this check is needed when trying to load partial name assemblies that result in null
{
Expand All @@ -655,6 +727,9 @@ public override IEvaluator ReferenceAssembly(Assembly assembly)

if (referencedAssemblies.FirstOrDefault(x => asmFile.SamePathAs(x)) == null)
referencedAssemblies.Add(asmFile);

if (aliases != null)
referencedAssembliesAliases[asmFile] = aliases;
}
return this;
}
Expand Down
Loading
Loading