Skip to content

Exception when trying to rewrite WPF .NET 6.0 application; unable to find PresentationCore #474

@loftyinclination

Description

@loftyinclination

I'm trying to rewrite
Getting logging output:

Failed to resolve assembly: 'PresentationCore, Version=6.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Attempted fixes

Attempted to ignore that assembly, via setting

    "IgnoredAssemblies": [
        "PresentationCore"
    ]

in the passed JSON configuration file, but no luck.

Running with verbosity set to "exhaustive" gave the following stack trace:

Failed to resolve assembly: 'PresentationCore, Version=6.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
   at Mono.Cecil.BaseAssemblyResolver.Resolve(AssemblyNameReference name, ReaderParameters parameters)
   at Mono.Cecil.DefaultAssemblyResolver.Resolve(AssemblyNameReference name)
   at Mono.Cecil.MetadataResolver.Resolve(TypeReference type)
   at Microsoft.Coyote.Rewriting.MethodBodyTypeRewritingPass.TryRewriteMethodReference(MethodReference method, String matchName, MethodReference& result) in D:\a\1\s\Source\Test\Rewriting\Passes\Rewriting\Types\MethodBodyTypeRewritingPass.cs:line 170
   at Microsoft.Coyote.Rewriting.MethodBodyTypeRewritingPass.VisitCallInstruction(Instruction instruction, MethodReference method) in D:\a\1\s\Source\Test\Rewriting\Passes\Rewriting\Types\MethodBodyTypeRewritingPass.cs:line 156
   at Microsoft.Coyote.Rewriting.MethodBodyTypeRewritingPass.VisitInstruction(Instruction instruction) in D:\a\1\s\Source\Test\Rewriting\Passes\Rewriting\Types\MethodBodyTypeRewritingPass.cs:line 85
   at Microsoft.Coyote.Rewriting.Pass.VisitMethod(MethodDefinition method) in D:\a\1\s\Source\Test\Rewriting\Passes\Pass.cs:line 159
   at Microsoft.Coyote.Rewriting.AssemblyInfo.Invoke(Pass pass) in D:\a\1\s\Source\Test\Rewriting\AssemblyInfo.cs:line 181
   at Microsoft.Coyote.Rewriting.RewritingEngine.RewriteAssembly(AssemblyInfo assembly, String outputPath) in D:\a\1\s\Source\Test\Rewriting\RewritingEngine.cs:line 179
   at Microsoft.Coyote.Rewriting.RewritingEngine.Run() in D:\a\1\s\Source\Test\Rewriting\RewritingEngine.cs:line 107
   --- End of stack trace from previous location ---
   at Microsoft.Coyote.Rewriting.RewritingEngine.Run() in D:\a\1\s\Source\Test\Rewriting\RewritingEngine.cs:line 112
   at Microsoft.Coyote.Rewriting.RewritingEngine.Run(RewritingOptions options, Configuration configuration, LogWriter logWriter, Profiler profiler) in D:\a\1\s\Source\Test\Rewriting\RewritingEngine.cs:line 86
   at Microsoft.Coyote.Program.RewriteAssemblies(Configuration configuration, RewritingOptions options) in D:\a\1\s\Tools\Coyote\Program.cs:line 143

I forked the code and wrapped the method.DeclaringType.Resolve() call in a try/catch block, returning false if an exception was thrown, which got me a little further;

Failed to resolve assembly: 'PresentationCore, Version=6.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
   at Mono.Cecil.BaseAssemblyResolver.Resolve(AssemblyNameReference name, ReaderParameters parameters)
   at Mono.Cecil.DefaultAssemblyResolver.Resolve(AssemblyNameReference name)
   at Mono.Cecil.MetadataResolver.Resolve(TypeReference type)
   at Microsoft.Coyote.Rewriting.Pass.IsForeignType(TypeReference type) in C:\Dev\coyote\Source\Test\Rewriting\Passes\Pass.cs:line 343
   at Microsoft.Coyote.Rewriting.InterAssemblyInvocationRewritingPass.VisitInstruction(Instruction instruction) in C:\Dev\coyote\Source\Test\Rewriting\Passes\Rewriting\InterAssemblyInvocationRewritingPass.cs:line 41
   at Microsoft.Coyote.Rewriting.Pass.VisitMethod(MethodDefinition method) in C:\Dev\coyote\Source\Test\Rewriting\Passes\Pass.cs:line 155
   at Microsoft.Coyote.Rewriting.AssemblyInfo.Invoke(Pass pass) in C:\Dev\coyote\Source\Test\Rewriting\AssemblyInfo.cs:line 170
   at Microsoft.Coyote.Rewriting.RewritingEngine.RewriteAssembly(AssemblyInfo assembly, String outputPath) in C:\Dev\coyote\Source\Test\Rewriting\RewritingEngine.cs:line 185
   at Microsoft.Coyote.Rewriting.RewritingEngine.Run() in C:\Dev\coyote\Source\Test\Rewriting\RewritingEngine.cs:line 107
   --- End of stack trace from previous location ---
   at Microsoft.Coyote.Rewriting.RewritingEngine.Run() in C:\Dev\coyote\Source\Test\Rewriting\RewritingEngine.cs:line 112
   at Microsoft.Coyote.Rewriting.RewritingEngine.Run(RewritingOptions options, Configuration configuration, LogWriter logWriter, Profiler profiler) in C:\Dev\coyote\Source\Test\Rewriting\RewritingEngine.cs:line 86
   at Microsoft.Coyote.Program.RewriteAssemblies(Configuration configuration, RewritingOptions options) in C:\Dev\coyote\Tools\Coyote\Program.cs:line 143

Did the same try/catch in that method, wrapping methodReference.ReturnType.Resolve(). Now throwing on IsForeignType check in the same VisitInstruction method;
another try/catch and now the rewriting completed successfully.

I doubt this is the correct way of solving this though!

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