Skip to content

Instantly share code, notes, and snippets.

@kasajian
Created May 20, 2014 03:23
Show Gist options
  • Save kasajian/5464d103dea32669b0ea to your computer and use it in GitHub Desktop.
Save kasajian/5464d103dea32669b0ea to your computer and use it in GitHub Desktop.
Command-line component creation with C Sharp

Create clock.cs:

public class Clock
{
     public System.String Now()
     {
	return "Don't know the time";
     }
}

compile using:

csc /t:library clock.cs

Create cc.cs:

class cc
{
    static void Main()
    {
	Clock c = new Clock();
	System.Console.WriteLine( c.Now() );
    }
}

compile using:

csc /r:clock.dll cc.cs

Run cs.exe

In order for cc.exe to find clock.dll, they must be in the same directory. However, clock.dll may be made into a shared component by installing it in the global assembly cache:

First create a private key:

sn -k orgKey.snk

The recompile the .dll with this public key:

csc /target:library /a.keyfile:orgkey.snk clock.cs

And finally, install the the assembly in the shared assembly cache:

al /i:Clock.dll

To later remove the assembly from the cache, run:

rundll32 fusion.dll, RemoveAssemblyFromCache clock

or right click delete in c:\windows\assembly

Alternative to using "al", is:

rundll32 fusion.dll, AddAssemblyToCacheA -m clock.dll -p

run

dumpbin /exports on fusion.dll

to see a list of other commands.

To create a .reg file which will register the .dll as a COM object run:

regasm /regfile:clock.reg clock.dll

To create a .tlb file which can be used to access the COM object from VB or C++ run:

regasm /tlb:clock.tlb clock.dll

To simply register the DLL as a COM object, type:

regasm clock.dll

To unregister type:

regasm /unregister clock.dll
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment