As Judah said, you could can easily communicate with both because they do compile to IL (this is the fundamental principal of the CLI). A single compiler can't handle both, though. If you want to maintain a single DLL with this, however, there is a way (though VS.NET 2002 and 2003 won't be any help). You can compile either the VB.NET or C# source to a module using the command-line compiler and passing the switch /t:module. When you compile the other language source, you can embed this module into your assembly using /addmodule:_filename_ on the command line, along with the rest of the params (like /t:dll). Your assembly now contains two modules that define the IL. Consumers of your assembly won't know the difference (unless they used a disassembler, but that really doesn't matter).
Microsoft MVP, Visual C# My Articles