This is something that I have actually done a fair bit of recently.
You can use 
AssemblyName name = AssemblyName.Load(string assemblyFile)
to retrieve the strong-name attributes of an assembly. The runtime will
load the DLL temporarily, then release it immediately.
However, I far prefer to go the route of avoiding 'loading' DLLs at all
- STAY AWAY from reflection unless you intend to actually late-bind to
your loaded DLLs.
Reflection has far too many requirements to satisfy, if you only intend
to read some information from the DLL.
Remember, that reflection was designed for EXECUTING MSIL code
dynamically, yes you can read all sorts of data out of the DLL, but in
my opinion it's overkill.

My preferred approach is to treat the DLL as a data document, and read
its meta-data using a library that understands the format of MSIL.

Microsoft has a library for doing just this: Microsoft.Cci
http://ccimetadata.codeplex.com/

Using this library, you can 'read' the DLL into an extremely descriptive
object-model, and obtain any information from it that you desire (even
more information that you can with reflection).

One of the big advantages of this, is that because the DLL is NOT LOADED
FOR BINDING, it doesn't need any of its dependencies (AssemblyName.Load
doesnt either however...), and even more importantly - the DLL can have
been built for a later version of the .net runtime, or different
processor architecture!
So, if your application is .net2, and it is given a .net4 assembly, you
can still read out all the metadata, and present a nice error message
which includes all your assembly-name information, and mention that it
was built for an incompatible version of the .net framework (or however
you want to handle it).

If you use AssemblyName.Load, or Assembly reflection, you will get a
runtime 'BadImageFormatException'...

using Microsoft.Cci is as simple as this:

                    MetadataReaderHost host1 = new
PeReader.DefaultHost();

                    var module = host1.LoadUnitFrom(assemblyPath) as
IModule;
                        // grab the publicKeyToken... but you should
probably check that PublicKeyToken isnt null, as it may not be strongly
named
                    string publicKeyToken = BitConverter.ToString(new
List<byte>(module.ContainingAssembly.PublicKeyToken).ToArray()).Replace(
"-", "").ToLower();
                        // grab the assembly name
                    string assemblyName =
module.ContainingAssembly.Name.Value;
                        // grab the version
                    Version assemblyVersion =
module.ContainingAssembly.Version;
                        // grab the culture
                    string assemblyCulture =
module.ContainingAssembly.Culture;

Note: The MetadataReaderHost used to hold a lock on the assembly until
GC collected these objects, but a recent checkin to Microsoft.Cci has
implemented IDisposable on MetaDataReaderHost which will clean
everything up - nice!

Hope this helps.

Adam Langley
Senior Developer

+64 9 486 9010
+64 21 884400
alang...@winscribe.com
www.winscribe.com

-----Original Message-----
From: pcristini [mailto:pcrist...@paretoplatform.com] 
Sent: Tuesday, 28 September 2010 9:24 a.m.
To: wix-users@lists.sourceforge.net
Subject: [WiX-users] Reading Assembly Information


I'm looking to read information about an assembly (version, culture,
publickey, etc) from an assembly, and store those values in properties
which
will then be added to the application's config file. 

I'm going to be producing elements like this:
<Plugin
        name="UserManager"
        assembly="Plugin.Users, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=9d04a1dca2c654ed"
        class="Plugin.Users.UserManagerPlugin"
        enabled="true" />

Is there any solutions out there for this? I've searched around a bit
but
can't find anything even close to what I'm looking to do.
-- 
View this message in context:
http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Reading-As
sembly-Information-tp5576754p5576754.html
Sent from the wix-users mailing list archive at Nabble.com.

------------------------------------------------------------------------
------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to