Its a concept called "Just In Time" (JIT) compilation. When you go to execute a .NET assembly, the .NET VM compiles it into native code and caches it for future use. When the cached copy becomes out of date, because of a recompile, or whatever, a fresh copy is compiled again from the assembly.

So you can use the assembly anywhere that has the framework. The original assembly is not affected by the JIT compiler.