O que é o formato de ficheiro CSPROJ?
Arquivos com a extensão .csproj são arquivos de projeto C# pertencentes à categoria de arquivos de desenvolvedor.
O que os arquivos .csproj contêm?
O conteúdo dos arquivos .csproj inclui configurações de compilação para projetos escritos em C#. Eles são gerados pelo Microsoft Visual Studio ou pelas ferramentas de linha de comando do .NET SDK quando um novo projeto é criado. As seguintes informações podem ser encontradas em arquivos .csproj:
- nome do projeto e tipo de saída (executável ou biblioteca de classes),
- referências a arquivos de projeto, dependências de pacotes NuGet (
<PackageReference>) e outras referências de projeto, - parâmetros de compilação e framework de destino (ex:
net9.0ounet48), - metadados de assembly, como números de versão e informações do autor.
O conteúdo dos arquivos .csproj é escrito usando marcação XML. Projetos modernos usam o formato compacto estilo SDK, introduzido com o .NET Core e Visual Studio 2017, que abre com <Project Sdk="Microsoft.NET.Sdk"> e geralmente tem apenas algumas linhas - os arquivos de origem .cs são detectados automaticamente via globbing implícito. Projetos legados mais antigos (anteriores a 2017) usam um formato mais detalhado com uma declaração de namespace xmlns="http://schemas.microsoft.com/developer/msbuild/2003" explícita e listam cada arquivo de origem individualmente.
Para que servem os arquivos .csproj?
Com arquivos .csproj, é possível armazenar todos os parâmetros de compilação de projetos frequentemente muito complexos - que podem consistir em centenas de arquivos de origem e dependências externas - em um único documento. O mecanismo de compilação MSBuild (ou o comando CLI dotnet build) lê o .csproj para compilar o projeto. As informações nos arquivos .csproj também garantem um comportamento consistente em diferentes máquinas e ambientes de CI, eliminando a necessidade de fornecer parâmetros de compilação a cada vez. Um ou mais projetos .csproj são agrupados por um arquivo de solução (.sln ou o mais novo .slnx).
Note que o .csproj em si não contém código-fonte - todo o código C# reside nos arquivos .cs separados que ele referencia.
Posso abrir arquivos .csproj?
Arquivos .csproj são gerados automaticamente após selecionar a opção de criar um novo projeto. Como são escritos em XML, até mesmo o editor de texto mais simples, como o Notepad, é suficiente para visualizá-los ou editá-los. No entanto, vale lembrar que a sintaxe XML pode ser implacável - sem uma necessidade clara, modificações manuais em arquivos .csproj são desencorajadas. Alterações precipitadas em seu conteúdo podem levar a inconsistências entre os elementos do projeto, resultando em problemas ao abrir o projeto no Visual Studio ou em outras ferramentas de desenvolvimento.
Segurança e proteção
RISCO: MEDIUMO arquivo .csproj em si é XML puro e inofensivo para leitura. O risco real é o que acontece quando você COMPILA ou RESTAURA: um projeto C# pode executar alvos do MSBuild, scripts pré/pós-compilação, restauração de pacotes NuGet (que podem executar scripts de instalação), geradores de código e o código compilado ao depurar/executar - portanto, abrir um projeto não confiável e clicar em Build/Run pode executar código arbitrário. O Visual Studio mostra um aviso de confiança para projetos baixados exatamente por esse motivo. Inspecione os alvos, referências de pacotes e scripts de um .csproj desconhecido antes de compilar, e não compile código em que você não confia.
Detalhes do formato
em resumoProgramas que abrem arquivos CSPROJ
Detalhes técnicos
especificação profunda| Estrutura do arquivo | XML com um elemento raiz <Project> contendo elementos filhos <PropertyGroup>, <ItemGroup> e opcionalmente <Target> |
| Variantes de formato de projeto | Estilo SDK (desde .NET Core / VS 2017): compacto, usa atributo Sdk e globbing *.cs implícito. Legado full-framework: detalhado, lista cada arquivo de origem explicitamente, esquema xmlns 2003 |
| Atributo SDK | <Project Sdk="Microsoft.NET.Sdk"> abre todo projeto moderno estilo SDK; variantes incluem Microsoft.NET.Sdk.Web (ASP.NET Core) e Microsoft.NET.Sdk.Worker |
| Declaração do framework de destino | O elemento <TargetFramework> especifica o alvo de compilação (ex: net9.0, net48, netstandard2.0); <TargetFrameworks> (separados por ponto e vírgula) permite multi-targeting em um arquivo |
| Declaração de dependência NuGet | Elementos <PackageReference Include="PackageName" Version="x.y.z" /> dentro de um <ItemGroup>; substitui a abordagem antiga packages.config |
| Referências de projeto para projeto | Elementos <ProjectReference Include="../Other/Other.csproj" />; o MSBuild resolve a ordem de compilação e o gráfico de dependências automaticamente |
| Inclusão de arquivos de origem (estilo SDK) | Implícita - todos os arquivos *.cs sob o diretório do projeto são compilados automaticamente sem entradas <Compile> explícitas |
| Tipos de saída | Exe (aplicativo de console), WinExe (GUI Windows), Library (biblioteca de classes ou pacote NuGet); definido via propriedade <OutputType> |
| Mecanismo de compilação | MSBuild - invocado diretamente ou via dotnet build, dotnet run e dotnet publish a partir da CLI do .NET SDK |
| Codificação de texto | Texto simples UTF-8; sem assinatura binária ou magic bytes; o BOM é opcional e omitido na maioria das ferramentas modernas |
| Tamanho típico do arquivo | Menos de 1 KB para projetos estilo SDK; até ~50 KB para grandes projetos legados com muitas entradas de arquivos explícitas |
| Tipo MIME | application/xml (também aceito como text/xml ou text/plain) |
| Arquivo complementar | .csproj.user armazena configurações de IDE locais da máquina e por usuário (ex: argumentos de lançamento de depuração) e não deve ser enviado ao controle de versão |
| Agrupamento de soluções | Um ou mais projetos .csproj são combinados em um arquivo de solução .sln ou o mais novo .slnx para compilações em IDE e CLI multiprojetos |
| Formatos de projeto equivalentes | .vbproj (Visual Basic .NET) e .fsproj (F#) usam o mesmo esquema XML do MSBuild e podem coexistir na mesma solução |
| Lançado | 2002 (Visual Studio .NET / .NET Framework 1.0) |
| Versão mais recente | SDK-style project format (since .NET Core / VS 2017, 2017); current with .NET 9 (2024) |
| Padrão aberto | Sim · livre de royalties |
| Especificação | learn.microsoft.com |
Conversões de CSPROJ
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos CSPROJ.