altcover icon indicating copy to clipboard operation
altcover copied to clipboard

Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'System.Drawing.Common, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'

Open kanecko opened this issue 8 months ago • 1 comments

Using AltCover 9.0.1 via dotnet tool install --global altcover.global. My project is a very large C# .NET 4.8 desktop app with more than 2500 DLLs.

When cd-ing to my \bin folder and executing altcover.exe --verbose --dependency=C:\Windows\Microsoft.NET\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WindowsBase.dll I get an exception:

Console output: Assembly symbol GUID = d97695fa-e174-4fd2-a9fd-47c0a0c60943 mvid = 3a74029b-fd96-4ca0-9a97-bcae076fb83a Symbol file \yetanother.pdb GUID = d97695fa-e174-4fd2-a9fd-47c0a0c60943 Assembly \yetanother.exe symbols from folder '"\yetanother.pdb"' __Instrumented\yetanother.exe <= yetanother, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

ERROR *** Instrumentation phase failed

Failed to resolve assembly: 'System.Drawing.Common, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'

Details written to __Instrumented\AltCover-2025-05-16--11-50-17.log

AltCover-2025-05-16--11-50-17.log output: Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'System.Drawing.Common, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' at Mono.Cecil.BaseAssemblyResolver.Resolve(AssemblyNameReference name, ReaderParameters parameters) at Mono.Cecil.DefaultAssemblyResolver.Resolve(AssemblyNameReference name) at Mono.Cecil.MetadataResolver.Resolve(TypeReference type) at Mono.Cecil.MetadataResolver.GetType(ModuleDefinition module, TypeReference reference) at Mono.Cecil.MetadataResolver.Resolve(TypeReference type) at Mono.Cecil.MetadataBuilder.GetConstantType(TypeReference constant_type, Object constant) at Mono.Cecil.MetadataBuilder.AddConstant(IConstantProvider owner, TypeReference type) at Mono.Cecil.MetadataBuilder.AddParameters(MethodDefinition method) at Mono.Cecil.MetadataBuilder.AddMethods(TypeDefinition type) at Mono.Cecil.MetadataBuilder.AddType(TypeDefinition type) at Mono.Cecil.MetadataBuilder.BuildModule() at Mono.Cecil.MetadataBuilder.BuildMetadata() at Mono.Cecil.ModuleWriter.<>c.<BuildMetadata>b__2_0(MetadataBuilder builder, MetadataReader ) at Mono.Cecil.ModuleDefinition.Read[TItem,TRet](TItem item, Func3 read) at Mono.Cecil.ModuleWriter.Write(ModuleDefinition module, Disposable1 stream, WriterParameters parameters) at Mono.Cecil.ModuleWriter.WriteModule(ModuleDefinition module, Disposable1 stream, WriterParameters parameters) at AltCover.Instrument.I.writeAssembly(AssemblyDefinition assembly, String path) in /_//AltCover.Engine/Instrument.fs:line 515 at AltCover.Instrument.I.writeAssemblies(AssemblyDefinition definition, String file, IEnumerable1 targets, FSharpFunc2 sink) in /_//AltCover.Engine/Instrument.fs:line 871 at AltCover.Instrument.I.visitAfterAssembly(InstrumentContext state, AssemblyEntry assembly) in /_//AltCover.Engine/Instrument.fs:line 1102 at AltCover.Instrument.I.instrumentationVisitorWrapper(FSharpFunc2 core, InstrumentContext state, Node node) in ///AltCover.Engine/Instrument.fs:line 1455 at [email protected](T node) in ///AltCover.Engine/Visitor.fs:line 1703 at Microsoft.FSharp.Primitives.Basics.List.mapToFreshConsTail[a,b](FSharpList1 cons, FSharpFunc2 f, FSharpList1 x) in D:\a\_work\1\s\src\FSharp.Core\local.fs:line 236 at Microsoft.FSharp.Primitives.Basics.List.map[T,TResult](FSharpFunc2 mapping, FSharpList1 x) in D:\a\_work\1\s\src\FSharp.Core\local.fs:line 245 at Microsoft.FSharp.Collections.SeqModule.Fold[T,TState](FSharpFunc2 folder, TState state, IEnumerable1 source) in D:\a\_work\1\s\src\FSharp.Core\seq.fs:line 907 at AltCover.Visitor.visit(IEnumerable1 visitors, IEnumerable1 assemblies) in /_//AltCover.Engine/Visitor.fs:line 1688 at [email protected](Unit unitVar0) in /_//AltCover.Engine/Main.fs:line 784 at AltCover.PathOperation.DoPathOperation[TAny](FSharpFunc2 operation, FSharpFunc`2 handle) in ///AltCover.Engine/Output.fs:line 21 AssemblyReference = System.Drawing.Common, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 FileName = FusionLog = TargetSite = Mono.Cecil.AssemblyDefinition Resolve(Mono.Cecil.AssemblyNameReference, Mono.Cecil.ReaderParameters) Data = seq [] InnerException = HelpLink = Source = "Mono.Cecil" HResult = -2147024894

kanecko avatar May 16 '25 09:05 kanecko

I've added various System.Drawing.Common.dll paths to --depedency, like "system.drawing.common\6.0.0\lib\net461\System.Drawing.Common.dll", but the error persist.

Workaround: I've removed all DLLs that referenced System.Drawing.dll, then re-added around 10 due to some other "file not found" error. I think it won't be an acceptable solution since a few DLLs that I want instrumented; aren't now instrumented. But acceptable enough to continue evaluating AltCover. EDIT: But I have a hunch that my problem can be mitigated via --dependency or --assemblyExcludeFilter

kanecko avatar May 16 '25 11:05 kanecko