Exception when trying to rewrite WPF .NET 6.0 application; unable to find PresentationCore
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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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