Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for remapped info from ikdasm/monodis #14090

Open
directhex opened this issue Apr 16, 2019 · 4 comments
Open

Support for remapped info from ikdasm/monodis #14090

directhex opened this issue Apr 16, 2019 · 4 comments

Comments

@directhex
Copy link
Contributor

Packaging tools for .deb (and especially for RPM) figure out which assemblies exist in a package based on ikdasm --assembly, and which assemblies are needed based on ikdasm --assemblyref

In the modern world where version numbers are largely ignored, this causes a hell where e.g. a package needs version 4.0.0.0 of something, but we have 4.0.1.3

It would be immensely useful if, in cases where remapping exists, we could either query "what is your version" and get the remapped result, OR "what do you need" and see a remapped list. Or both. Some way to get rid of the mile-long grep -v lists I've had to add to RPM packages to simply strip dependencies out.

@lambdageek
Copy link
Member

lambdageek commented Apr 16, 2019

I don't think I quite get what you need. The way the remapping works in the runtime is the opposite of what you say. the app might say "I need System.Foo 4.3.0.5" and mono internally just says "you will use my System.Foo and I don't care what version you asked for, I'm gonna pretend you wanted 4.0.0.0".

This hack happens in mono_assembly_remap_version in the unmanaged code in the runtime.
ikdasm currently probably doesn't have any way to get this stuff right now.

It's probably equal effort to extend monodis to dump this info for a given assembly name+version or to make a private managed API that ikdasm could try and invoke. probably the second one is better in the long term because we keep having discussions about retiring monodis one day.

@directhex
Copy link
Contributor Author

directhex commented Apr 17, 2019

I guess it's an open design question.

Right now, an RPM exports something like the following in the metadata:

$ repoquery --provides mono-core
Microsoft.CodeAnalysis.CSharp.dll.so()(64bit)
Microsoft.CodeAnalysis.dll.so()(64bit)
System.Collections.Immutable.dll.so()(64bit)
System.Reflection.Metadata.dll.so()(64bit)
csc.exe.so()(64bit)
libMonoPosixHelper.so()(64bit)
libikvm-native.so()(64bit)
libmono-btls-shared.so()(64bit)
libmono-native.so.0()(64bit)
mcs.exe.so()(64bit)
mono = 6.0.0.176
mono(Commons.Xml.Relaxng) = 1.0.5000.0
mono(Commons.Xml.Relaxng) = 2.0.0.0
mono(Commons.Xml.Relaxng) = 4.0.0.0
mono(CustomMarshalers) = 1.0.5000.0
mono(CustomMarshalers) = 2.0.0.0
mono(CustomMarshalers) = 4.0.0.0
mono(I18N) = 1.0.5000.0
mono(I18N) = 2.0.0.0
mono(I18N) = 4.0.0.0
mono(I18N.West) = 1.0.5000.0
mono(I18N.West) = 2.0.0.0
mono(I18N.West) = 4.0.0.0
mono(ICSharpCode.SharpZipLib) = 0.6.0.0
mono(ICSharpCode.SharpZipLib) = 0.84.0.0
mono(ICSharpCode.SharpZipLib) = 2.6.0.0
mono(ICSharpCode.SharpZipLib) = 2.84.0.0
mono(ICSharpCode.SharpZipLib) = 4.84.0.0
mono(Microsoft.CSharp) = 4.0.0.0
mono(Microsoft.CodeAnalysis) = 2.8.0.0
mono(Microsoft.CodeAnalysis) = 3.0.0.0
mono(Microsoft.CodeAnalysis.CSharp) = 2.8.0.0
mono(Microsoft.CodeAnalysis.CSharp) = 3.0.0.0
mono(Microsoft.CodeAnalysis.CSharp.Scripting) = 2.8.0.0
mono(Microsoft.CodeAnalysis.Scripting) = 2.8.0.0
mono(Microsoft.CodeAnalysis.VisualBasic) = 2.8.0.0
mono(Microsoft.VisualC) = 10.0.0.0
mono(Microsoft.Win32.Primitives) = 4.0.1.0
mono(Microsoft.Win32.Registry) = 4.1.0.0
mono(Microsoft.Win32.Registry.AccessControl) = 4.0.0.0
mono(Mono.Btls.Interface) = 4.0.0.0
mono(Mono.CSharp) = 4.0.0.0
mono(Mono.Cairo) = 1.0.5000.0
mono(Mono.Cairo) = 2.0.0.0
mono(Mono.Cairo) = 4.0.0.0
mono(Mono.Cecil) = 0.10.3.0
mono(Mono.Cecil) = 0.9.5.0
mono(Mono.CompilerServices.SymbolWriter) = 1.0.5000.0
mono(Mono.CompilerServices.SymbolWriter) = 2.0.0.0
mono(Mono.CompilerServices.SymbolWriter) = 4.0.0.0
mono(Mono.Configuration.Crypto) = 4.0.0.0
mono(Mono.Management) = 4.0.0.0
mono(Mono.Parallel) = 4.0.0.0
mono(Mono.Posix) = 1.0.5000.0
mono(Mono.Posix) = 2.0.0.0
mono(Mono.Posix) = 4.0.0.0
mono(Mono.Profiler.Log) = 4.0.0.0
mono(Mono.Security) = 1.0.5000.0
mono(Mono.Security) = 2.0.0.0
mono(Mono.Security) = 4.0.0.0
mono(Mono.Simd) = 4.0.0.0
mono(Mono.Tasklets) = 4.0.0.0
mono(System) = 1.0.5000.0
mono(System) = 2.0.0.0
mono(System) = 4.0.0.0
mono(System.AppContext) = 4.1.0.0
mono(System.Collections) = 4.0.10.0
mono(System.Collections.Concurrent) = 4.0.10.0
mono(System.Collections.Immutable) = 1.2.1.0
mono(System.Collections.Immutable) = 1.2.3.0
mono(System.Collections.NonGeneric) = 4.0.1.0
mono(System.Collections.Specialized) = 4.0.0.0
mono(System.ComponentModel) = 4.0.0.0
mono(System.ComponentModel.Annotations) = 4.2.0.0
mono(System.ComponentModel.EventBasedAsync) = 4.0.10.0
mono(System.ComponentModel.Primitives) = 4.1.0.0
mono(System.ComponentModel.TypeConverter) = 4.1.0.0
mono(System.Configuration) = 1.0.5000.0
mono(System.Configuration) = 2.0.0.0
mono(System.Configuration) = 4.0.0.0
mono(System.Console) = 4.0.0.0
mono(System.Core) = 4.0.0.0
mono(System.Data.Common) = 4.2.1.0
mono(System.Data.SqlClient) = 4.2.0.0
mono(System.Deployment) = 4.0.0.0
mono(System.Diagnostics.Contracts) = 4.0.0.0
mono(System.Diagnostics.Debug) = 4.0.10.0
mono(System.Diagnostics.FileVersionInfo) = 4.0.0.0
mono(System.Diagnostics.Process) = 4.1.0.0
mono(System.Diagnostics.StackTrace) = 4.1.1.0
mono(System.Diagnostics.TextWriterTraceListener) = 4.0.0.0
mono(System.Diagnostics.Tools) = 4.0.0.0
mono(System.Diagnostics.TraceEvent) = 4.0.0.0
mono(System.Diagnostics.TraceSource) = 4.0.0.0
mono(System.Diagnostics.Tracing) = 4.2.1.0
mono(System.Drawing) = 4.0.0.0
mono(System.Drawing.Primitives) = 4.0.1.0
mono(System.Dynamic) = 4.0.0.0
mono(System.Dynamic.Runtime) = 4.0.10.0
mono(System.Globalization) = 4.0.10.0
mono(System.Globalization.Calendars) = 4.0.1.0
mono(System.Globalization.Extensions) = 4.1.1.0
mono(System.IO) = 4.1.0.0
mono(System.IO.Compression) = 4.0.0.0
mono(System.IO.Compression.FileSystem) = 4.0.0.0
mono(System.IO.Compression.ZipFile) = 4.0.1.0
mono(System.IO.FileSystem) = 4.0.1.0
mono(System.IO.FileSystem.AccessControl) = 4.0.2.0
mono(System.IO.FileSystem.DriveInfo) = 4.0.0.0
mono(System.IO.FileSystem.Primitives) = 4.0.1.0
mono(System.IO.FileSystem.Watcher) = 4.0.0.0
mono(System.IO.IsolatedStorage) = 4.0.1.0
mono(System.IO.MemoryMappedFiles) = 4.0.0.0
mono(System.IO.Pipes) = 4.0.0.0
mono(System.IO.UnmanagedMemoryStream) = 4.0.1.0
mono(System.Json) = 4.0.0.0
mono(System.Json.Microsoft) = 4.0.0.0
mono(System.Linq) = 4.1.0.0
mono(System.Linq.Expressions) = 4.1.0.0
mono(System.Linq.Parallel) = 4.0.0.0
mono(System.Linq.Queryable) = 4.0.0.0
mono(System.Memory) = 4.0.1.0
mono(System.Net) = 4.0.0.0
mono(System.Net.AuthenticationManager) = 4.0.0.0
mono(System.Net.Cache) = 4.0.0.0
mono(System.Net.Http) = 4.0.0.0
mono(System.Net.Http.Formatting) = 4.0.0.0
mono(System.Net.Http.Rtc) = 4.0.0.0
mono(System.Net.Http.WebRequest) = 4.0.0.0
mono(System.Net.HttpListener) = 4.0.0.0
mono(System.Net.Mail) = 4.0.0.0
mono(System.Net.NameResolution) = 4.0.0.0
mono(System.Net.NetworkInformation) = 4.1.0.0
mono(System.Net.Ping) = 4.0.1.0
mono(System.Net.Primitives) = 4.0.10.0
mono(System.Net.Requests) = 4.0.10.0
mono(System.Net.Security) = 4.0.0.0
mono(System.Net.ServicePoint) = 4.0.0.0
mono(System.Net.Sockets) = 4.2.1.0
mono(System.Net.Utilities) = 4.0.0.0
mono(System.Net.WebHeaderCollection) = 4.0.0.0
mono(System.Net.WebSockets) = 4.0.0.0
mono(System.Net.WebSockets.Client) = 4.0.0.0
mono(System.Numerics) = 4.0.0.0
mono(System.Numerics.Vectors) = 4.0.0.0
mono(System.ObjectModel) = 4.0.10.0
mono(System.Reflection) = 4.1.0.0
mono(System.Reflection.Context) = 4.0.0.0
mono(System.Reflection.Emit) = 4.0.1.0
mono(System.Reflection.Emit.ILGeneration) = 4.0.1.0
mono(System.Reflection.Emit.Lightweight) = 4.0.1.0
mono(System.Reflection.Extensions) = 4.0.0.0
mono(System.Reflection.Metadata) = 1.4.1.0
mono(System.Reflection.Metadata) = 1.4.3.0
mono(System.Reflection.Primitives) = 4.0.0.0
mono(System.Reflection.TypeExtensions) = 4.1.2.0
mono(System.Resources.Reader) = 4.0.2.0
mono(System.Resources.ReaderWriter) = 4.0.0.0
mono(System.Resources.ResourceManager) = 4.0.0.0
mono(System.Resources.Writer) = 4.0.2.0
mono(System.Runtime) = 4.1.0.0
mono(System.Runtime.CompilerServices.Unsafe) = 4.0.4.0
mono(System.Runtime.CompilerServices.VisualC) = 4.0.0.0
mono(System.Runtime.Extensions) = 4.1.0.0
mono(System.Runtime.Handles) = 4.0.0.0
mono(System.Runtime.InteropServices) = 4.1.0.0
mono(System.Runtime.InteropServices.RuntimeInformation) = 4.0.3.0
mono(System.Runtime.InteropServices.WindowsRuntime) = 4.0.0.0
mono(System.Runtime.Numerics) = 4.0.0.0
mono(System.Runtime.Serialization.Formatters) = 4.0.1.0
mono(System.Runtime.Serialization.Json) = 4.0.0.0
mono(System.Runtime.Serialization.Primitives) = 4.2.1.0
mono(System.Runtime.Serialization.Xml) = 4.1.1.0
mono(System.Security) = 1.0.5000.0
mono(System.Security) = 2.0.0.0
mono(System.Security) = 4.0.0.0
mono(System.Security.AccessControl) = 4.1.0.0
mono(System.Security.Claims) = 4.0.1.0
mono(System.Security.Cryptography.Algorithms) = 4.3.1.0
mono(System.Security.Cryptography.Csp) = 4.0.0.0
mono(System.Security.Cryptography.DeriveBytes) = 4.0.0.0
mono(System.Security.Cryptography.Encoding) = 4.0.0.0
mono(System.Security.Cryptography.Encryption) = 4.0.0.0
mono(System.Security.Cryptography.Encryption.Aes) = 4.0.0.0
mono(System.Security.Cryptography.Encryption.ECDiffieHellman) = 4.0.0.0
mono(System.Security.Cryptography.Encryption.ECDsa) = 4.0.0.0
mono(System.Security.Cryptography.Hashing) = 4.0.0.0
mono(System.Security.Cryptography.Hashing.Algorithms) = 4.0.0.0
mono(System.Security.Cryptography.Primitives) = 4.0.0.0
mono(System.Security.Cryptography.ProtectedData) = 4.0.2.0
mono(System.Security.Cryptography.RSA) = 4.0.0.0
mono(System.Security.Cryptography.RandomNumberGenerator) = 4.0.0.0
mono(System.Security.Cryptography.X509Certificates) = 4.1.0.0
mono(System.Security.Principal) = 4.0.0.0
mono(System.Security.Principal.Windows) = 4.1.0.0
mono(System.Security.SecureString) = 4.1.1.0
mono(System.ServiceModel.Duplex) = 4.0.3.0
mono(System.ServiceModel.Http) = 4.1.2.0
mono(System.ServiceModel.NetTcp) = 4.1.2.0
mono(System.ServiceModel.Primitives) = 4.2.0.0
mono(System.ServiceModel.Security) = 4.0.2.0
mono(System.ServiceProcess.ServiceController) = 4.2.0.0
mono(System.Text.Encoding) = 4.0.10.0
mono(System.Text.Encoding.CodePages) = 4.1.0.0
mono(System.Text.Encoding.Extensions) = 4.0.10.0
mono(System.Text.RegularExpressions) = 4.1.0.0
mono(System.Threading) = 4.0.10.0
mono(System.Threading.AccessControl) = 4.0.2.0
mono(System.Threading.Overlapped) = 4.1.1.0
mono(System.Threading.Tasks) = 4.0.10.0
mono(System.Threading.Tasks.Dataflow) = 4.0.0.0
mono(System.Threading.Tasks.Parallel) = 4.0.0.0
mono(System.Threading.Thread) = 4.0.0.0
mono(System.Threading.ThreadPool) = 4.0.10.0
mono(System.Threading.Timer) = 4.0.0.0
mono(System.ValueTuple) = 4.0.3.0
mono(System.Web.Mobile) = 4.0.0.0
mono(System.Web.RegularExpressions) = 4.0.0.0
mono(System.Windows) = 4.0.0.0
mono(System.Workflow.Activities) = 4.0.0.0
mono(System.Workflow.ComponentModel) = 4.0.0.0
mono(System.Workflow.Runtime) = 4.0.0.0
mono(System.Xml) = 1.0.5000.0
mono(System.Xml) = 2.0.0.0
mono(System.Xml) = 4.0.0.0
mono(System.Xml.Linq) = 4.0.0.0
mono(System.Xml.ReaderWriter) = 4.1.0.0
mono(System.Xml.Serialization) = 4.0.0.0
mono(System.Xml.XDocument) = 4.0.10.0
mono(System.Xml.XPath) = 4.0.1.0
mono(System.Xml.XPath.XDocument) = 4.1.1.0
mono(System.Xml.XmlDocument) = 4.0.1.0
mono(System.Xml.XmlSerializer) = 4.0.10.0
mono(System.Xml.Xsl.Primitives) = 4.0.0.0
mono(VBCSCompiler) = 2.8.0.0
mono(al) = 0.0.0.0
mono(cert-sync) = 6.0.0.176
mono(certmgr) = 6.0.0.176
mono(chktrust) = 6.0.0.176
mono(crlupdate) = 6.0.0.176
mono(csc) = 2.8.0.0
mono(csc) = 3.0.0.0
mono(cscompmgd) = 0.0.0.0
mono(csharp) = 0.0.0.0
mono(csi) = 2.8.0.0
mono(gacutil) = 0.0.0.0
mono(ikdasm) = 0.0.0.0
mono(mcs) = 6.0.0.176
mono(mono-configuration-crypto) = 4.0.0.0
mono(mozroots) = 6.0.0.176
mono(mscorlib) = 1.0.5000.0
mono(mscorlib) = 2.0.0.0
mono(mscorlib) = 4.0.0.0
mono(netstandard) = 2.0.0.0
mono(setreg) = 6.0.0.176
mono(sn) = 6.0.0.176
mono(vbc) = 2.8.0.0
mono-cairo = 6.0.0.176
mono-core = 6.0.0.176-0.xamarin.7.epel7
mono-core(x86-64) = 6.0.0.176-0.xamarin.7.epel7
mono-drawing = 6.0.0.176
mono-ikvm = 6.0.0.176
mono-posix = 6.0.0.176
mono-xml-relaxng = 6.0.0.176
mono-ziplib = 6.0.0.176
mscorlib.dll.so()(64bit)

This is based on doing an ikdasm --assembly on all assemblies in exported locations (4.5/ and GAC)

Then, a consumer declares its requirements based on a recursive ikdasm --assemblyref of the entire package:

$ repoquery --requires monodevelop
/bin/sh
/usr/bin/env
NUnit
libc.so.6(GLIBC_2.15)(64bit)
libcrypto.so.10()(64bit)
libcrypto.so.10(libcrypto.so.10)(64bit)
libcurl.so.4()(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)
librt.so.1()(64bit)
librt.so.1(GLIBC_2.2.5)(64bit)
libssh2.so.1()(64bit)
libssl.so.10()(64bit)
libssl.so.10(libssl.so.10)(64bit)
libz.so.1()(64bit)
mono(FSharp.Core) = 4.3.0.0
mono(FSharp.Core) = 4.3.1.0
mono(FSharp.Core) = 4.4.0.0
mono(FSharp.Core) = 4.4.1.0
mono(Mono.Cairo) = 4.0.0.0
mono(Mono.Posix) = 4.0.0.0
mono(System.Collections) = 4.0.0.0
mono(System.Collections) = 4.0.10.0
mono(System.Collections.Concurrent) = 4.0.10.0
mono(System.ComponentModel.Composition) = 4.0.0.0
mono(System.ComponentModel.DataAnnotations) = 4.0.0.0
mono(System.Configuration) = 2.0.0.0
mono(System.Configuration) = 4.0.0.0
mono(System.Data) = 2.0.0.0
mono(System.Data) = 4.0.0.0
mono(System.Data.DataSetExtensions) = 4.0.0.0
mono(System.Data.Entity) = 4.0.0.0
mono(System.Data.Linq) = 4.0.0.0
mono(System.Design) = 4.0.0.0
mono(System.Diagnostics.Contracts) = 4.0.0.0
mono(System.Diagnostics.Debug) = 4.0.0.0
mono(System.Diagnostics.Debug) = 4.0.10.0
mono(System.Diagnostics.Tools) = 4.0.0.0
mono(System.DirectoryServices) = 2.0.0.0
mono(System.DirectoryServices) = 4.0.0.0
mono(System.Drawing) = 2.0.0.0
mono(System.Drawing) = 4.0.0.0
mono(System.Dynamic.Runtime) = 4.0.0.0
mono(System.Globalization) = 4.0.0.0
mono(System.Globalization) = 4.0.10.0
mono(System.Globalization) = 4.0.11.0
mono(System.IO) = 4.0.0.0
mono(System.IO) = 4.0.10.0
mono(System.IO.FileSystem) = 4.0.1.0
mono(System.IO.FileSystem.Primitives) = 4.0.1.0
mono(System.Linq) = 4.0.0.0
mono(System.Linq.Expressions) = 4.0.0.0
mono(System.Linq.Expressions) = 4.0.10.0
mono(System.Linq.Parallel) = 4.0.0.0
mono(System.Numerics) = 4.0.0.0
mono(System.ObjectModel) = 4.0.0.0
mono(System.ObjectModel) = 4.0.10.0
mono(System.Reflection) = 4.0.0.0
mono(System.Reflection) = 4.0.10.0
mono(System.Reflection.Extensions) = 4.0.0.0
mono(System.Reflection.Metadata) = 1.4.1.0
mono(System.Reflection.Primitives) = 4.0.0.0
mono(System.Resources.ResourceManager) = 4.0.0.0
mono(System.Runtime) = 4.0.0.0
mono(System.Runtime) = 4.0.20.0
mono(System.Runtime) = 4.1.2.0
mono(System.Runtime.Caching) = 4.0.0.0
mono(System.Runtime.Extensions) = 4.0.0.0
mono(System.Runtime.Extensions) = 4.0.10.0
mono(System.Runtime.InteropServices) = 4.0.0.0
mono(System.Runtime.InteropServices) = 4.0.20.0
mono(System.Runtime.Numerics) = 4.0.0.0
mono(System.Runtime.Remoting) = 2.0.0.0
mono(System.Runtime.Remoting) = 4.0.0.0
mono(System.Runtime.Serialization) = 4.0.0.0
mono(System.Runtime.Serialization.Formatters.Soap) = 2.0.0.0
mono(System.Runtime.Serialization.Primitives) = 4.0.0.0
mono(System.Security) = 2.0.0.0
mono(System.Security) = 4.0.0.0
mono(System.Security.Cryptography.Primitives) = 4.0.0.0
mono(System.ServiceModel) = 4.0.0.0
mono(System.ServiceProcess) = 2.0.0.0
mono(System.ServiceProcess) = 4.0.0.0
mono(System.Text.Encoding) = 4.0.0.0
mono(System.Text.Encoding) = 4.0.10.0
mono(System.Text.Encoding.Extensions) = 4.0.0.0
mono(System.Text.Encoding.Extensions) = 4.0.10.0
mono(System.Text.RegularExpressions) = 4.0.0.0
mono(System.Text.RegularExpressions) = 4.0.10.0
mono(System.Threading) = 4.0.0.0
mono(System.Threading) = 4.0.10.0
mono(System.Threading.Tasks) = 4.0.0.0
mono(System.Threading.Tasks) = 4.0.10.0
mono(System.Threading.Tasks) = 4.0.11.0
mono(System.Threading.Tasks.Dataflow) = 4.5.24.0
mono(System.Threading.Tasks.Parallel) = 4.0.0.0
mono(System.Threading.Thread) = 4.0.0.0
mono(System.Web) = 2.0.0.0
mono(System.Web) = 4.0.0.0
mono(System.Web.Extensions) = 4.0.0.0
mono(System.Web.Services) = 2.0.0.0
mono(System.Web.Services) = 4.0.0.0
mono(System.Windows.Forms) = 2.0.0.0
mono(System.Windows.Forms) = 4.0.0.0
mono(System.Xaml) = 4.0.0.0
mono(System.Xml) = 2.0.0.0
mono(System.Xml) = 4.0.0.0
mono(System.Xml.XDocument) = 4.0.10.0
mono(WindowsBase) = 4.0.0.0
mono(atk-sharp) = 2.12.0.0
mono(gdk-sharp) = 2.12.0.0
mono(glade-sharp) = 2.12.0.0
mono(glib-sharp) = 2.12.0.0
mono(gtk-sharp) = 2.12.0.0
mono(monodoc) = 1.0.0.0
mono(netstandard) = 2.0.0.0
mono(pango-sharp) = 2.12.0.0
mono-basic
mono-devel
mono-web
pkgconfig
xsp

So let's cut that down to a minimal example:

[directhex@localhost Desktop]$ repoquery --provides mono-core | grep -i dataflow
mono(System.Threading.Tasks.Dataflow) = 4.0.0.0
[directhex@localhost Desktop]$ repoquery --requires monodevelop | grep -i dataflow
mono(System.Threading.Tasks.Dataflow) = 4.5.24.0

There's a numbering mismatch, and the dependency is not considered satisfied or satisfiable by RPM.

So how can we either provide the numbering in a less precise way, or consume it in a less precise way? My vague idea is when encoding dependencies, rather than using raw ikdasm --assemblyref as-is to generate the name/version, we could us ikdasm --something to say "so, what dependencies does this have that you're okay to consume?" - i.e. if the loader would use System.Threading.Tasks.Dataflow 4.0.0.0 from the GAC, then say "yeah, I know about version 4.0.0.0 and it's fine" rather than "I need precisely version 4.5.24.0"

@lambdageek
Copy link
Member

we could use ikdasm --something to say "so, what dependencies does this have that you're okay to consume?" - i.e. if the loader would use System.Threading.Tasks.Dataflow 4.0.0.0 from the GAC, then say "yeah, I know about version 4.0.0.0 and it's fine" rather than "I need precisely version 4.5.24.0"

This approach makes sense to me, given how the runtime works.

@lambdageek lambdageek added the area-Runtime: Loader Any assembly loading/binding issue label Apr 17, 2019
@directhex
Copy link
Contributor Author

IMHO there are inherent design flaws to the entire approach taken by mono-find-provides/requires, but changing them now is basically impossible without breaking support with every existing RPM distro which supports Mono 🤷‍♂️

So spitballing a more iterative approach to making the mess less bad.

@marek-safar marek-safar added proposal and removed area-Runtime: Loader Any assembly loading/binding issue area-Tools: monodis labels Apr 18, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants