Skip to content

dotnet-script fails with StateSmith because it uses Microsoft.CodeAnalysis.CSharp 4.5.0.0 or higher #703

Closed
@adamfk

Description

@adamfk

Hello,

I ran into an interesting problem with dotnet-script. It appears that it cannot use the 0.8.2 version of StateSmith because StateSmith uses a newer version of 'Microsoft.CodeAnalysis.CSharp`.

dbug: Dotnet.Script.Core.ScriptCompiler[0]
      Suppressed diagnostic CS1705: error CS1705: Assembly 'StateSmith' with identity 'StateSmith, Version=0.8.2.0, Culture=neutral, PublicKeyToken=null' uses 'Microsoft.CodeAnalysis.CSharp, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'Microsoft.CodeAnalysis.CSharp' with identity 'Microsoft.CodeAnalysis.CSharp, Version=4.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

I've created a minimal reproduction repo here: https://github.com/adamfk/dotnet-script-issue1

It has a proj directory for a regular C# project (that works), and a script directory for the dotnet-script equivalent which fails.

The script file test.csx is tiny:

#!/usr/bin/env dotnet-script
#r "nuget: StateSmith, 0.8.2-alpha"
using StateSmith.Output.Gil;

WriteLine("Started running...");
GilHelper.Compile("public class Blah{}", out var a, out var b);
WriteLine("Finished running.");

When I run it with --debug --no-cache, here's the output I get:

click to expand
PS C:\Users\akruck\Downloads\dotnet-script-issue1> cd script   
PS C:\Users\akruck\Downloads\dotnet-script-issue1\script> dotnet-script test.csx
Object reference not set to an instance of an object.
PS C:\Users\akruck\Downloads\dotnet-script-issue1\script> dotnet-script test.csx --debug --no-cache
dbug: Dotnet.Script.Core.Commands.ExecuteScriptCommand[0]
      The script C:\Users\akruck\Downloads\dotnet-script-issue1\script\test.csx was executed with the '--no-cache' flag. Skipping cache.
info: Dotnet.Script.Core.ScriptCompiler[0]
      Current runtime is 'win'.
dbug: Dotnet.Script.DependencyModel.ProjectSystem.ScriptProjectProvider[0]
      Creating project file for C:\Users\akruck\Downloads\dotnet-script-issue1\script\test.csx
dbug: Dotnet.Script.DependencyModel.ProjectSystem.ScriptParser[0]
      Parsing C:\Users\akruck\Downloads\dotnet-script-issue1\script\test.csx
dbug: Dotnet.Script.DependencyModel.ProjectSystem.ScriptProjectProvider[0]
      Project file saved to C:\Users\akruck\AppData\Local\Temp\dotnet-script\C\Users\akruck\Downloads\dotnet-script-issue1\script\net6.0\script.csproj
dbug: Dotnet.Script.DependencyModel.ProjectSystem.ScriptProjectProvider[0]
      <?xml version="1.0" encoding="utf-8"?>
      <Project Sdk="Microsoft.NET.Sdk">
        <PropertyGroup>
          <OutputType>Exe</OutputType>
          <TargetFramework>net6.0</TargetFramework>
          <LangVersion>latest</LangVersion>
        </PropertyGroup>
        <ItemGroup>
          <PackageReference Include="StateSmith" Version="0.8.2-alpha" />
        </ItemGroup>
        <Target Name="RecordReferencePaths" AfterTargets="AfterResolveReferences">
          <WriteLinesToFile File="$(OutputPath)/ReferencePaths.txt" Lines="@(ReferencePath)" />
        </Target>
      </Project>
dbug: Dotnet.Script.DependencyModel.Context.DotnetRestorer[0]
dbug: Dotnet.Script.DependencyModel.Context.ProfiledRestorer[0]
      Restoring C:\Users\akruck\AppData\Local\Temp\dotnet-script\C\Users\akruck\Downloads\dotnet-script-issue1\script\net6.0\script.csproj took 892ms
dbug: Dotnet.Script.Core.ScriptCompiler[0]
      Configuration/Optimization mode: Debug
dbug: Dotnet.Script.Core.ScriptCompiler[0]
      Suppressed diagnostic CS1705: error CS1705: Assembly 'StateSmith' with identity 'StateSmith, Version=0.8.2.0, Culture=neutral, PublicKeyToken=null' uses 'Microsoft.CodeAnalysis.CSharp, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'Microsoft.CodeAnalysis.CSharp' with identity 'Microsoft.CodeAnalysis.CSharp, Version=4.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
System.NullReferenceException: Object reference not set to an instance of an object.
   at Dotnet.Script.Core.ScriptPublisher.CreateScriptAssembly[TReturn,THost](ScriptContext context, String outputDirectory, String assemblyFileName) in C:\Users\runneradmin\AppData\Local\Temp\tmpFE4C\Dotnet.Script.Core\ScriptPublisher.cs:line 106
   at Dotnet.Script.Core.ScriptPublisher.CreateAssembly[TReturn,THost](ScriptContext context, LogFactory logFactory, String assemblyFileName) in C:\Users\runneradmin\AppData\Local\Temp\tmpFE4C\Dotnet.Script.Core\ScriptPublisher.cs:line 45
   at Dotnet.Script.Core.Commands.PublishCommand.Execute(PublishCommandOptions options) in C:\Users\runneradmin\AppData\Local\Temp\tmpFE4C\Dotnet.Script.Core\Commands\PublishCommand.cs:line 44
   at Dotnet.Script.Core.Commands.ExecuteScriptCommand.GetLibrary(ExecuteScriptCommandOptions executeOptions) in C:\Users\runneradmin\AppData\Local\Temp\tmpFE4C\Dotnet.Script.Core\Commands\ExecuteScriptCommand.cs:line 73
   at Dotnet.Script.Core.Commands.ExecuteScriptCommand.Run[TReturn,THost](ExecuteScriptCommandOptions options) in C:\Users\runneradmin\AppData\Local\Temp\tmpFE4C\Dotnet.Script.Core\Commands\ExecuteScriptCommand.cs:line 34
   at Dotnet.Script.Program.<>c__DisplayClass4_0.<<Wain>b__9>d.MoveNext() in C:\Users\runneradmin\AppData\Local\Temp\tmpFE4C\Dotnet.Script\Program.cs:line 261
--- End of stack trace from previous location ---
   at McMaster.Extensions.CommandLineUtils.CommandLineApplication.ExecuteAsync(String[] args, CancellationToken cancellationToken)
   at McMaster.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args)
   at Dotnet.Script.Program.Wain(String[] args) in C:\Users\runneradmin\AppData\Local\Temp\tmpFE4C\Dotnet.Script\Program.cs:line 270
   at Dotnet.Script.Program.Main(String[] args) in C:\Users\runneradmin\AppData\Local\Temp\tmpFE4C\Dotnet.Script\Program.cs:line 28
PS C:\Users\akruck\Downloads\dotnet-script-issue1\script>
PS C:\Users\akruck\Downloads\dotnet-script-issue1\script> dotnet-script --version
1.4.0
PS C:\Users\akruck\Downloads\dotnet-script-issue1\script> 

I'm hopeful that I can simply downgrade the StateSmith Roslyn dependencies to 4.4.0. Any other ideas?

Sidebar: StateSmith generates state machine code written in C#, then I use Roslyn to transpile that C# to C99, and also a more efficient C# implementation. I'll be transpiling to javascript/typescript in a few weeks. I'm hoping to have StateSmith create state machines for most programming languages :)

Thanks for the awesome project!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions