Вы задаете загруженный вопрос. C # является просто языком и не требует .NET Framework. Процесс его компиляции требует компилятора, который может или не может сам зависеть от .NET Framework (компилятор Microsoft C # этого не делает - он написан на нативном коде). Ваша программа должна ссылаться на некоторую сборку, где можно найти типы, классы и методы для вашего использования. Вы можете удалить system.dll и mscorlib.dll из списка ссылок и сослаться на свои собственные сборки. Таким образом, вы можете избежать зависимостей от .NET Framework, если вы действительно работаете над этим. Но, в конце концов, если у вас нет компилятора C #, который компилирует программы в нативный код, у вас все еще есть зависимость от CLR.
Это очень технический способ сказать ... почти ничего. Но это отвечает на ваш вопрос. :) Практически более полезным, однако, является то, как заставить ваши программы на C # работать с минимумом зависимостей. mkbundle из mono фактически позволит вам скомпилировать все это в .exe практически без каких-либо зависимостей.
Но если вы хотите придерживаться Microsoft .NET Framework, вы можете добиться гораздо меньшего объема и более быстрой установки зависимостей, которые вам обычно нужны, используя профиль клиента .NET 3.5 SP1. Вы можете прочитать об этом здесь:
http://msdn.microsoft.com/en-us/library/cc656912.aspx