Demystifying the .NET Global Assembly Cache (C:\Windows\Assembly\GAC*)

An extremely detailed (and i presume accurate) depictions of the “.NET Global Assembly Cache” :

Associated directories are



By , 14 Jan 2004


My first introduction to the .NET Global Assembly Cache (henceforth referred to only as the GAC) was during a Guerrilla .NET Course conducted by Develop Mentor a week after the .NET Framework Beta 1 Release. I was immediately fascinated by this magical and mysterious piece within the entire .NET puzzle (yes, .NET had been a puzzle to me for a very long time). While ordinary (Private) assemblies cohabit peacefully within their master’s (client executable’s) folder or sub-folders thereof, the highly sociable (Shared) assemblies, including the all important .NET System assemblies implementing the Framework Class Library, reside within this majestic abode called the GAC.

The primary purpose behind writing this article is to share my findings related to the GAC with the development community. The information presented herein is original and a direct result of my personal research. To the best of my knowledge, these details have not been covered in any .NET article or book.

Since references to Fusion occur throughout this article, it may be appropriate to clarify the significance of this name vis-à-vis the GAC. Fusion is the internal name of the project at Microsoft to eliminate the problems of sharing DLL code. The GAC was originally called the Fusion cache and is currently implemented within Fusion.dll.


The Basics

For the benefit of those that are genuinely unaware of what the GAC is, I am providing this simple description which has been plagiarized from the online documentation:

Each computer wherein the common language runtime is installed has a machine-wide code cache called the Global Assembly Cache. This Global Assembly Cache stores .NET assemblies specifically designated to be shared by several applications on that computer.

As a general rule, the Windows Registry is considered legacy within .NET and XCOPY [meaning, you can XCOPY all files from developer to user without another “installer” -jvk] deployment is highly encouraged, which in turn implies building assemblies that are private to a program’s main executable. Yet, there is a definite need for a central repository for .NET System assemblies as well as other user created Shared assemblies and it is this very need which is addressed by the GAC. Refer to .NET Framework Developer’s Guide: Global Assembly Cache for the formal product documentation on this topic.

The Microsoft KB article Q315682 HOW TO: Install an Assembly into the Global Assembly Cache in Visual Studio .NET walks the uninitiated through the steps required to install a .NET assembly into the GAC. If it is not already obvious, a key point to note here is that once your application installs Assemblies in the GAC, it loses the benefits of XCOPY deployment as these assemblies (other than the .NET System Libraries) must be explicitly installed in the GAC.

While covering the basics, it is important to understand the concept of Identity as it pertains to a .NET Assembly. An Assembly’s identity includes its simple textual name, a version number, an optional culture if the assembly contains localized resources, and an optional public key used to guarantee name uniqueness and to protect the name from unwanted reuse (name spoofing). An assembly with a simple Identity includes just the mandatory simple textual name and version number components. Since the GAC is the machine-wide repository for shared assemblies, it is very easy to run into the problem of name collisions if these assemblies only had simple identities because they are developed independently by different vendors and even developers within your own organization. Hence it is mandatory that every shared assembly installed in the GAC have a Strong Name. The formal definition of the term in the online documentation is …

Refer to Strong-Named Assemblies and Creating and Using Strongly-named assemblies for the details around strongly-named assemblies.


The Public and not so public faces of the GAC

In order for the GAC to be useful, we need to be able to interact with it. I am aware of the following five interfaces available for such interaction.

  1. The Windows Installer 2.0
  2. The command line tool GACUtil.exe
  3. The Windows Shell namespace extension implemented in SHFusion.dll
  4. The .NET Framework Configuration Administrative tool
  5. Programmatically accessing the GAC through APIs

Each of these is explored in detail within the following sections. The GAC itself is implemented as a hierarchy of directories. When using these interfaces to interact with the GAC, we are isolated from the implementation details of the GAC (which by-the-way is a good thing).\


thanks for reading 🙂

Microsoft “Windows 8” vs “Windows RT”

Windows RT

Windows RT is only for the ARM microprocessor, which is used in iPad, Samsung and Andriod tablets.

No software that you have that runs on Windows will run on Windows RT! That’s probably the most important thing to know about Windows RT. It aims to be like iOS or Andriod, meaning it has Apps you can download from the “Windows Store”.

To try to be at least a little like what we all know as “Windows” it DOES have

  • Office 2013 pre-installed.
  • a USB port and peripherals. Maybe 1 out of 100 of the devices out there are supported. But that’s greater than iOS and the other tablets which support: NONE.
  • Internet Explorer (IE). (It’s the ONLY browser supported (unless someone writes an app and submits it to the Windows Store and Microsoft approves it.))

But it does not have Outlook nor Windows Media Player. You have to get a (Windows Store) App for that.

Windows 8

Windows 8, on the other hand, is just Windows 7 with the “Metro shell” the touch-screen enabled icons that look like a tablet or smartphone. But you can click on the Desktop icon, or just turn Metro shell off completely, and you’ll be in front of something that looks and acts likes Windows 7.

Except with touchscreen.

tablet vs laptop

From: by

Tony makes the point that the data on sales volume is skewed by low-end, small tablets.

For $200, that same consumer can get a tablet with a sharper display and higher pixel density. The processor and RAM may seem similar on paper, but the ARM architecture, and a mobile OS like Android or iOS will deliver blazing performance instead of lagging and frustration. The $200 tablet is lighter, thinner, and can run all day on a single charge.

Granted, it’s not entirely an apples-to-apples comparison. The netbook probably has a larger storage capacity, and it’s capable of running standard Windows software. But, the tablet can do email, instant messaging, Web, social networking, and play games—which sums up about 90-plus percent of what most people need to do from a mobile device.

It’s easy to see why (cheap) tablets will beat netbooks.



There is some cannibalization of laptop sales. The simple reality is that many of the things people need to do can be done just as well or better from a tablet. And, even if we’re talking about the 9 and 10 inch tablets that average in the $500 and $600 range, it’s a more versatile, less expensive alternative to $1,000-plus notebooks.



tablets in general may chip away at overall notebook sales, but businesses still need powerful, capable laptops.

Tony makes the point that a tablet is just a different style of PC, and so old-style PCs and new-style tablets will eventually merge and we’ll just call them all “the PC market.”



cmos battery code

You may have seen a “CR2032” cmos battery. The “2032” is broken out into “20” and “32” and means 20mm diameter and 3.2mm thick.  Similarly, a “2025” is 20mm diameter and 2.5mm thick.  So a 2025 is thinner than a 2032.  In the same way, a “1220” is 12mm diameter and 2.0mm thick, so smaller and thinner than both .

A “CR” means primary cell; an “ML” means secondary cell.

Intel’s list of hw tools (most 3rd party)


Feature/Area Tool/Software/Site Description
Processor Intel® Processor Diagnostic Tool The Intel Processor Diagnostic Tool is a free application used to verify the functionality of an Intel microprocessor. The diagnostic checks for brand identification, verifies the processor operating frequency, tests specific processor features and performs a stress test on the processor.
Processor Intel® Processor Identification Utility The Intel® Processor Identification Utility is provided by Intel to enable customers to identify the brand, features, package, intended frequencies and actual operating frequencies of their Intel microprocessor. You can also use the utility to discern whether or not an Intel® Processor is being operated above its Intel rated frequency.
Processor PerfMonitor* PerfMonitor is a processor performance monitoring tool that allows you to track the frequency of 4 events chosen in a set of model-specific list. It can be used to identify the performance bottlenecks of a system, or to monitor a program for cache-miss rate or mis-predicted branches. PerfMonitor can also be used as a hardware-level CPU comparison tool, comparing the key parameters of different CPUs running the same benchmark.
Processor Tmonitor* TMonitor displays the active clock of each individual core of the processor. A very high refresh rate (20 times per second) allows you to visualize the smallest clock variation in real time. TMonitor is able to detect mechanisms such as Intel® Turbo Boost Technology, and therefore allows you to clearly visualize its effect as the processor is working.
Processor, memory CPU-Z* CPU-Z is a freeware application that gathers information on some of the main devices of your system.
Memory Memtest86+* A free, stand-alone memory testing program.
Memory Windows Memory Diagnostic* A free memory test tool provided by Microsoft*. Very similar to other memory testing programs, Windows Memory Diagnostic performs a series of extensive tests to determine what, if anything, is wrong with your computer memory.
Overclocking* is an online community which includes forums, reviews, and articles related to overclocking.
Overclocking* is an online community which includes forums, reviews, and articles related to overclocking.
Overclocking Prime95* A useful stability testing program for overclockers.
Complete system AIDA64* A complete PC diagnostics software utility that assists you while installing, optimizing or troubleshooting your computer by providing all the information you can think of about your system, from hardware devices and installed drivers to operating system security and stability metrics.
Complete system PC Wizard 2010* A utility designed for detection of hardware; also analyzes and benchmarks hardware, such as CPU performance, cache performance, RAM performance, hard disk performance, CD/DVD-ROM performance, removable/flash media performance, video performance, and MP3 compression performance.
Complete system HWMonitor* HWMonitor is a hardware monitoring program that reads PC systems main health sensors: voltages, temperatures, fans speed. The program handles the most common sensor chips, like ITE* IT87 series, most Winbond* ICs, and others. In addition, it can read modern CPUs on-die core thermal sensors, as well has hard drives temperature via S.M.A.R.T, and video card GPU temperature.
Complete system BurnIn Test* A software tool that allows all the major sub-systems of a computer to be simultaneously stress tested for endurance, reliability and stability.
Complete system WinSAT* The Windows System Assessment Tool (WinSAT) assesses the performance characteristics and capabilities of a computer. Developers can use this API to develop software that can access the performance and capability information of a computer to determine the optimal application settings based on that computer’s performance capabilities.
Complete system SpeedFan* SpeedFan monitors voltages, fan speeds and temperatures in computers with hardware monitor chips. It also can access S.M.A.R.T. info and show hard disk temperatures.
Complete system Open HW Monitor* Open Hardware Monitor is a free open source application that monitors temperature sensors, fan speeds, voltages, load and clock speeds of a computer. It supports most hardware monitoring chips found on today’s motherboards.
Complete system HWiNFO32* HWiNFO32 is a hardware information and diagnostic tool supporting latest components, industry technologies and standards. It is designed to collect and present the maximum amount of information possible about a computer’s hardware.
Complete system Hmonitor* Hardware sensors monitor utilizes sensor chips on smart motherboards to track system and CPU core temperatures, voltages and cooling fans. Hmonitor continually monitors the various parameters.
Complete system PerformanceTest* PassMark PerformanceTest allows you to objectively benchmark a PC using a variety of different speed tests and compare the results to other computers.
Complete system Speccy* Speccy gives you detailed statistics on every piece of hardware in your computer, including CPU, motherboard, RAM, graphics cards, hard disks, optical drives, and audio support. Additionally, Speccy adds the temperatures of the different components.
Graphics 3DMark* Benchmark programs that run intense tests that strain even the latest hardware. By comparing your benchmark score with millions of others you can find problems with hardware and software.
Graphics MonitorTest* Allows you to investigate the quality and performance of your computer monitor or LCD flat panel screen.
Audio SoundCheck* Allows you to test your PC sound card, speakers and microphone; verify that your sound card can record and playback sounds at various audio sample rates; and check the capability of your speakers to reproduce the highest and lowest frequencies.
Hard drive Intel® Solid-State Drive Toolbox Tools and diagnostics for Intel® Solid-State Drives.
Hard drive Seagate SeaTools* A comprehensive, easy-to-use diagnostic tool that helps you quickly determine the condition of the disk drive in your external hard drive, desktop or laptop computer. It includes several tests that will examine the physical media on your Seagate or Maxtor disk drive and any other non-Seagate disk drive.
Wireless WirelessMon* Allows you to monitor the status of wireless WiFi adapter(s) and gather information about nearby wireless access points and hot spots in real time.
Keyboard KeyboardTest* Checks that all the keys on a keyboard are functioning correctly, checks the keyboard LEDs, looks at the internal scan codes being generated by the keyboard and measures typing speed.
USB USB 2.0 Loopback* Active loopback plugs are the quickest, most effective way to verify that a PC’s USB ports are working correctly.

Some Thoughts on Drive Imaging Software

Taken from the article “Best Free Drive Imaging Program” < > at and augmented with details from the tools’ websites.

Recommendation: I have been using Paragon Backup and Recovery Free frequently and it has been reliable and has all the features i need.  It will clone the working system.

I have used Drive Image XML, PING, and Clonezilla with success.  I did not try Macrium Reflect Free because you can not restore to another drive unless you buy their commercial version.

Note if you’re imaging a drive you have already removed from a system, a sata-to-esata cable plugged into a esata port on a computer is very fast (you still have to provide stata power to the drive, somehow).

attribute Macrium Reflect Free Edition Paragon Backup and Recovery (Advanced) Free Drive Image XML PING (Partimage Is Not Ghost) Clonezilla
registration required? no yes, register on web, get email with prod key and sn no no no
clone – raw sector by sector image yes
clone a working, running system yes. both? both? yes (“uses Microsoft’s Volume Shadow Services (VSS)”
/ both?
offline boot offline boot
clone directly to another drive called “Drive to Drive”
clone to dest Any backup destination – including external storages, CD/DVD/Blu-ray discs, network as well as the secured hidden partition (Backup Capsule)
attribute Macrium Paragon Drive Image XML PING Clonezilla
file backup no not listed in feature list
mount image file yes yes yes
restore file from image yes via mounting yes via mounting yes via mounting
recovery “Linux Rescue CD” or “Windows” PE (Pre-install Environment) Recovery linux(/dos from website) based bootable CD (“Create bootable USB Flash drive, CD or DVD” –from website) tutorial and plugin to do Bart PE yourself
from the comments, from the author: “And if you can only get an optical booting disk [ie no USB boot] with any of these, there are numerous programs out there to turn that into a bootable USB drive, I’ve had the best luck with Unetbootin, YUMI, and Universal USB Installer. YUMI is great for a multiboot USB device, it is the first multibooting USB creator that works most of the time, and it has worked with almost everything I’ve tried so far. Hope this helps and good luck.”
attribute Macrium Paragon Drive Image XML PING Clonezilla
partition editing very basic
time (8GB) 9 min 28 min
differential backups no yes
restore to different / smaller? partitions There is NO Restore to dissimilar hardware in free version! yes, even smaller different drive, same size or larger
virtualize system disks yes
backup is a hidden full system mirror that can take over should the original become damaged called ‘Backup Capsule’
attribute Macrium Paragon Drive Image XML PING Clonezilla

javascript fontSize – the best description i’ve seen

This is the best description i’ve seen of javascript fontSize and for that matter, css font-size

javascript STYLE fontSize

@June 18, 2009, 10:39 a.m.
fontSize Firefox/Netscape/NN 6 IE 4 Chrome/Safari/DOM 2 Read/Write
Indicates the font size of the element. The font size can be set in several ways. A collection of constants (xx-small, x-small, small, medium, large, x-large, xx-large) defines what are known as absolute sizes. In truth, these are absolute only in a single browser in a single operating system, since the reference point for these sizes varies with browser and operating system (analogous to the old HTML font sizes of 1 through 7). But they do let the author have confidence that one element set to large is rendered larger than medium.
Another collection of constants (larger, smaller) is known as relative sizes. Because the font-size style attribute is inherited from the parent element, these relative sizes are applied to the parent element to determine the font size of the current element. It is up to the browser to determine exactly how much larger or smaller the font size is, and a lot depends on how the parent element’s font size is set. If it is set with one of the absolute sizes (large, for example), a child’s font size of larger means the font is rendered in the browser’s x-large size. The increments are not as clear-cut when the parent font size is set with a length or percentage.
If you elect to use a length value for the fontSize property, you will achieve greater consistency across operating systems if units such as pixels (px) or ems (em), instead of points (pt). Em units are calculated with respect to the size of the parent element’s font size. Finally, you can set fontSize to a percentage, which is calculated based on the size of the parent element’s font size.
document.getElementById("teeny").style.fontSize = "x-small";
Case-insensitive string values from any of the following categories. For an absolute size, one of the following constants: xx-small | x-small | small | medium | large | x-large | xx-large. For a relative size, one of the following constants: larger | smaller. For a percentage, the percentage value and the % symbol.
Parent element’s font size.

‘Should I Remove It?’ Helps You Decide Which Windows Apps To Uninstall


i have not tested this yet, but it looks interesting:

‘Should I Remove It?’ Helps You Decide Which Windows Apps To Uninstall


Even long time computer users aren’t always sure whether to uninstall PC programs but this tool helps you make a decision – it analyzes your installed programs and suggests programs you can safely remove. One of the great features of this app is having access to program details, descriptions, the Windows versions it runs on, popularity, user rating, install base statistics by countries and PC manufacturers, and a lot more.