Home > .NET > Assembly Manager

Assembly Manager

Setelah mengamati Assembly yg ada di .NET ternyata pada assembly tersebut terdapat metadata yang berisi dependency yang dibutuhkan oleh assemby berikut. Wow.. ini satu pencerahan yang sangat bagus untuk masalah Dependency Management kemaren.

Sepertinya dari modal di atas kita dapat membuat dependency detector untuk menganalisa ketergantungan suatu assembly terhadap assembly yang lain. Dan lebih memungkinkan lagi untuk mendeteksi clash yang terjadi antara assembly yang berbeda. Mungkin bahkan dapat dibuat sesuatu tools yang dapat mendownload dependency2 yang dibutuhkan dari central repository. Tetapi saya masih blum tw apakah sudah ada yang membuat tools tersebut atau tidak.

Code nya kira2 seperti berikut…

...
Assembly a = Assembly.LoadFrom(library);
List<AssemblyName> asmneeded = new List<AssemblyName>();
var asmName = a.GetReferencedAssemblies();
....


Setelah kita mendapatkan dafar assembly yang dibutuhkan. Maka kita dapat melakukan rekursi terhadap list assembly2 tersebut dan mendapatkan full list dari assembly yg dibutuhkan. Teknik yang digunakan bisa dengan menggunakan metode DFS atau BFS pada traversal graph dengan memodelkan assembly sebagai node pada graph tersebut. Tipe graph yang ada adalah Cyclic Graph dan Directed. Oleh karena itu sepertinya metode explorasi Flood Fill cocok digunakan untuk mendapatkan semua Assembly yang ada.

...
             foreach (var asm in asmName)
            {
                // cari jalan untuk melist semua library yg ada di gac
                if (isAlreadyInGAC(asm)) continue;

                if (isAlreadySearched(asm.Name)) continue;

                Console.WriteLine("{0} is depend on : {1}", a.GetName().Name, asm);

                string asmPath = _libraryrepo.GetAssemblyLocation(asm);

                _memo.Add(asm.Name);

                asmneeded.AddRange(GetAllNeededLibrary(asmPath)); // rekursi...
                asmneeded.Add(asm);
            }
...

Kode di atas masih blum sempurna dan masih banyak bolong nya. Blum dapat mengatasi perbedaan versi dll.

Mungkin teman2 dapat memberikan saran…

Categories: .NET Tags:
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: