microsoft / microsoft/coyote

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

Open
#474 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C#
Stars
1.6k
Forks
92
Avg merge
44m
Merged PRs (30d)
1

Description

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!

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with Source/Test/Rewriting/Passes/Rewriting/Types/MethodBodyTypeRewritingPass.cs and Pass.cs, especially the resolution calls named in the stack traces. Reproduce rewriting a WPF .NET 6.0 application and inspect how PresentationCore and IgnoredAssemblies are handled. Done means rewriting completes without ad hoc exception handling and the relevant behavior is covered by tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.