Oi!
O ponto principal é o seguinte: um programa C# não é só o arquivo .cs com o código, ele precisa de um projeto .NET ao redor dele para conseguir rodar corretamente.
Quando você usa o comando
dotnet new console -n NomeDoProjeto
você está pedindo para o .NET criar toda a estrutura mínima necessária para um programa de console funcionar. Isso inclui:
- o arquivo
.csproj, que diz qual versão do .NET usar, como compilar, etc. - um
Program.cs já no formato esperado pela versão do C#/.NET - pastas e configurações internas que o
dotnet build e o dotnet run precisam
Sem isso, o .NET simplesmente não sabe como compilar e executar aquele código.
Agora, sobre a sua primeira pergunta:
“**Sempre que for abrir um arquivo é necessário abrir ele dessa forma em qualquer projeto?**”
Não é “abrir um arquivo”, e sim criar um projeto.
Você não precisa usar dotnet new console toda vez que for programar, mas precisa usar pelo menos uma vez para cada projeto novo.
Depois que o projeto existe:
- você só abre a pasta ou o
.csproj no Visual Studio - cria novos arquivos
.cs dentro dele - escreve o código normalmente
O que não funciona é pegar um arquivo .cs solto, fora de um projeto, e tentar rodar como se fosse um programa completo.
Sobre o seu “Hello World” que funcionou sem o dotnet new console:
Provavelmente aconteceu uma destas situações (bem comuns):
- o Visual Studio criou o projeto automaticamente para você em segundo plano
- você usou algum template gráfico do Visual Studio (“Aplicativo de Console”) sem perceber
- ou o código estava em um projeto que já existia
Ou seja: o projeto existia, só não foi criado via terminal.
Agora, a parte mais confusa (e importante):
“O Visual Studio consertou o código e funcionou na primeira vez, mas depois não funcionou em outro arquivo”.
Isso acontece porque o Visual Studio é esperto, mas ele só consegue ajudar quando o contexto está correto.
Exemplo:
- você cola um código válido de C#
- mas ele está fora de um projeto, ou
- está em um arquivo que não pertence ao namespace/projeto certo, ou
- o projeto está usando outra versão do .NET/C#
Na primeira vez, o Visual Studio pode ter:
- ajustado o
Main - corrigido
using - transformado o código para o modelo de top-level statements (padrão atual do C#)
Mas quando você tentou repetir isso em outro arquivo ou fora do projeto, ele já não tinha como “adivinhar” tudo de novo, e aí não rodou.
Um detalhe importante:
Hoje, no C#, só um arquivo pode conter o ponto de entrada do programa (o Main, mesmo que ele esteja “escondido” pelo modelo moderno).
Se você tentar colocar o mesmo código de início em outro arquivo dentro do mesmo projeto, o programa quebra mesmo.
Para o seu próximo teste, a melhor forma é:
- criar um projeto novo com
dotnet new console - abrir a pasta no Visual Studio
- mexer apenas no
Program.cs - rodar com o botão verde ou
dotnet run
Abraços;