I first ran into netmodules before VS 2002 was shipped. The netmodule gave me precisely what I asked for, without actually solving my problem.  I wanted to use multiple languages (C#, and C++ /clr) in a single assembly.  It turns out a single assembly can be multi-module.  Multi-module means a single .Net assembly is spread across multiple win32 dlls.  What I really wanted was a single module assembly written in multiple languages. Netmodules couldn't solve my problem back then, but with the VS 2005 C++ linker they can now.

 

Check out JuFeng's articles for some more in depth coverage, and an explanation why you might want a multi-module assembly:

 

MultiModule Assemblies

Netmodule vs. Assembly

 

Since JuFeng's examples didn't show how to create debug info I thought I'd make an updated example here.

Here's a quick example with a multi-module assembly:

a_source

b_source

From the Visual Studio  2005 Command Prompt:

 

C:\blog\linkexample>vbc /target:module /debug+ b.vb

C:\blog\linkexample>csc /debug+ /addmodule:b.netmodule a.cs

C:\blog\linkexample>devenv /debugexe a.exe

Check out the modules window:

multi_module

And the callstack window:

multi2_callstack 

To get a single file assembly I'll need to recompile the cs file into a netmodule then use the c++ linker.

 

C:\blog\linkexample>csc /addmodule:b.netmodule /target:module /debug+ a.cs

C:\blog\linkexample>link /entry:fooCS.Main /out:theone.exe /subsystem:console /debug a.netmodule b.netmodule

C:\blog\linkexample>devenv /debugexe theone.exe

 

Now check out the modules window:

single_module 

And the callstack window:

 single2_callstack