Na nossa classe Program.cs, já tínhamos atribuído o uso do namespace System por conta de estarmos utilizando a classe Console para leitura e escrita de mensagens na nossa ConsoleApplication. Porém ao adicionarmos a IOException em nosso catch, tivemos que atribuir um novo using para o namespace System.IO. Minha pergunta é: se já tínhamos o namespace System atribuído a nossa aplicação, porque tivemos a necessidade de adicionar o System.IO? Se não me falha a memória, em versões mais antigas do VS e do .Net, bastava apenas referenciar o namespace raiz e com ele conseguíamos ter acesso a todos os seus namespaces derivados. Ex: bastaria apenas atribuir o "using System;" e através dele teríamos a visibilidade da classe IOException proveniente do namespace IO derivado do namespace System.