In VO we have applications, libraries and DLLs.
In .NET we don't have any libraries, only assemblies. These assemblies can be executable files (.exe) or DLLs.
In VO, we have an incremental linker, and starting an even big application from the IDE is fast, because there are the .dbg and .vom files that contain executable code, and that are not completely rewritten on every application start.
In .NET all code is compiled all the time, and every time the complete assembly is built.
Therefore in VO is was very efficient to work with monolithic applications (there are exe files largely over 50 MB), but in .NET this not a good idea, because every build process is long (even with the fast X# compiler).
In .NET you should use DLL files (assemblies) for commonly used code, and keep the single assemblies (.exe or .dll) relatively small, so the compile - run cycle during development has not too many waitstates. And the .NET runtime works very efficientely with the DLL assemblies: they are only loaded when needed, so the start of a small application can be fast. And the applications are small because many things are resolved at runtime keeping the overhead small.
In .NET in a single application you can use assemblies that are written in different languages: you can mix between X#, Vulcan.NET, C#, VB.NET and any other .NET language.
For example, you can have a X# assembly with a class that inherits from a class in the .NET framework. Then you can have another assembly in C# with a class that inherits from the X# define class, and finally you can have a VB.NET application that uses the class from the C# assembly.
But you cannot mix languages in the same assembly - that cannot work because every assembly needs to be built by only one compiler (there is no linker in .NET framework).