Programas escritos em C# são executados no .NET Framework, um componente do Windows que inclui um sistema de execução virtual chamado Common Language Runtime (CLR) e um conjunto unificado de bibliotecas de classes. O CLR é a implementação comercial da Microsoft da infraestrutura de linguagem comum (CLI), um padrão internacional que é a base para a criação e execução de ambientes de desenvolvimento em que as linguagens e as bibliotecas trabalham juntos sem problemas.
O código-fonte escrito em C# é compilado em uma linguagem intermediária (IL) que está em conformidade com a especificação CLI. O código IL e recursos, como bitmaps e strings, são armazenados no disco em um arquivo executável chamado de um assembly, normalmente com uma extensão .exe ou .dll. Um assembly contém um manifesto que fornece informações sobre os tipos do assembly, versão, cultura e requisitos de segurança.
Quando o programa C# é executado, o aseembly é carregado para o CLR, que pode tomar várias ações com base nas informações do manifesto. Então, se os requisitos de segurança são aprovados, o CLR executa a compilação just in time (JIT) para converter o código IL em instruções de máquina. O CLR também oferece outros serviços relacionados à coleta de lixo
automática, tratamento de exceções e gerenciamento de recursos. Código que é executado pelo CLR é muitas vezes referido como "código gerenciado", em contraste com o "código não-gerenciado", que é compilado em linguagem de máquina nativa e que foca um sistema específico. O diagrama a seguir ilustra as relações entre o tempo de compilação e de execução de arquivos de código-fonte C#, bibliotecas do NET Framework, assemblies e o CLR.

A interoperabilidade entre linguagens é um elemento chave do .NET Framework.
Como o código IL produzido pelo compilador C# está de acordo com o Common Type Specification (CTS), o código IL gerado a partir do C# pode interagir com código que foi gerado das versões .NET do Visual Basic, Visual C++, Visual J #, ou qualquer um das mais de 20 linguagens compatíveis com o CTS.
Um único assembly pode conter vários módulos escritos em diferentes linguagens .NET, e os tipos podem referenciar uns aos outros como se eles tivessem sido escritos na mesma linguagem.
Como adicional aos serviços de execução, o .NET Framework também inclui uma extensa biblioteca de mais de 4000 classes organizadas em namespaces que oferecem uma grande variedade de funcionalidades úteis para tudo, desde manipulação de arquivos, manipulação de strings, manipulação de arquivos XML até utilização de controles Windows Forms. Uma típica aplicação C# utiliza a biblioteca de classes do .NET Framework extensivamente para lidar com o comum "trabalho braçal".
Para obter mais informações sobre o .NET Framrwork, consulte Visão geral sobre o .NET Framework.