.NET - Conceitos : Arquivos Solutions e Projects


Arquivos de solução do Visual Studio

Para cada solução o VS.NET cria dois arquivos:

1- <solutionname>.sln  : Um arquivo texto que contém todos as informações sobre os projetos e itens de soluções e as propriedades que se aplicam para todos os projetos da solução

2- <solutionname>.suo. : Um arquivo binário que contém informação por usuário que não afeta como os projetos são criados. Geralmente as janelas que você abriu , as localizações do seus breakpoints e o projeto que será disparado quando sua aplicação for iniciada ou debugada. A informação deste arquivo não é obrigatória e ela não afeta a saida da construção do projeto na compilação.

Arquivo .sln :  Cada arquivo .sln inicia com o seguinte cabeçalho:

Microsoft Visual Studio Solution File, Format Version 8.00

A seguir vem as seções do projeto:

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InBetween",
"InBetween.csproj", "{FF8A9B86-1B01-42A8-816B-A8EE2E8B2057}"
    ProjectSection(ProjectDependencies) = postProject
    EndProjectSectionEndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CardLibrary", "..\CardLibrary\
CardLibrary.csproj", "{8E615625-7709-4677-A39B-C14C67089D3C}"
    ProjectSection(ProjectDependencies) = postProject
    EndProjectSectionEndProject
EndProject

Cada projeto na solução tems sua própria tag Project/EndProject. O GUID da tag do projeto indica o tipo de projeto.(C# , VB.NEt , etc...)

Os valores dos GUIDs estão no registro em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\Projects

Todos os projetos contém um ProjectSection chamada ProjectDependencies que contém qualquer dependência explicita entre os projetos. Um projeto com uma dependência explicita em outro projeto tem a seguinte aparência:

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApplication1",
"ConsoleApplication1\ConsoleApplication1.csproj",
"{4871AAA0-DE72-449B-A25D-B39B9A80FE1B}"
 ProjectSection(ProjectDependencies) = postProject
  {89AC25CD-AA1D-4F08-8AAE-4ED052C716CA} = {89AC25CD-AA1D-4F08-8AAE-4ED052C716CA}
 EndProjectSection
EndProject

O próximo item no arquivo é a seção marcada com as marcas Global e EndGlobal. Esta seção contém uma série de tags GlobalSection/EndGlobalSection  cuja sintaxe é :

GlobalSection(<sectionname>) = <preSolution|postSolution>
    <settings go here>
EndGlobalSection

Se um ou mais de seus projetos estiverem submetidos ao controle de versão (CVS), uma seção global chamada SourceCodeControl estará presente. Esta seção contém a informação que o VS.NEt precisa para verificar os projetos que estão dentro e/ou fora do banco de dados do controle de versão.

Todos os arquivos da solução contém uma seção global chamada SolutionConfiguration que se parece com :

GlobalSection(SolutionConfiguration) = preSolution
    Debug = Debug
    Debug = Release
EndGlobalSection

Esta seção contém apenas uma lista das configurações da solução e é seguida pela seção global ProjectConfiguration que determina qual configuração de projeto será construída em qualquer configuração particular de solução.

GlobalSection(ProjectDependencies) = postSolution
{3C3CF2F4-AD9A-42E0-82BA-32293ADC0756}.0 = {F068A500-1332-4918-9D78-A42FF13C7FC4}
EndGlobalSection

As duas seções finais são para uso com add-ins. A seção ExtensibilityGlobals fornece add-ins com um local para armazenar informação.  A seção ExtensibilityAddins contém uma lista de add-ins que serão usados com a solução:

GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection


Arquivos de Projeto do Visual Studio


Cada configuração de projeto é armazenada em um ou mais arquivos de projetos. Diferentes tipos de projeto possuem seus próprios formatos de arquivos e alguns podem criar muitos arquivos diferentes para armazenar as propriedades dos projetos. Temos quatros tipos de projetos para as linguagens : C#, J#, VB.NET, e C++. e embora Cada um tem sua própria extensão : .csproj, .vjsproj, .vbproj, and .vcproj. eles utilizam todos o mesmo formato básico : são todos arquivos XML com esquema comum.

Além de armazenar propriedades dos projetos , estes arquivos também contém a lista de referencias para outras assemblies. Abaixo temos um exemplo para uma lista de referencia:

<References>
<Reference
Name = "System"
AssemblyName = "System"
HintPath = "..\..\WINDOWS\Microsoft.NET\Framework\v1.0.3705\System.dll"
/>
<Reference
Name = "System.XML"
AssemblyName = "System.Xml"
HintPath = "..\..\WINDOWS\Microsoft.NET\Framework\v1.0.3705\System.XML.dll"
/>
<Reference
Name = "BusObj"
Project = "{D045135B-9113-44CB-8E73-971DDF807358}"
Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"
/>
</References>


Embora estas referências contenham caminhos relativos para as DLS do sistema, o VS.NET é robusto o suficiente para re-alocar projetos quando necessário. Assim , se você alterar a localização de um projeto no arquivo de sistema , isto irá quebrar os caminhos relativos mas quando isto ocorre , VS.NET irá procurar os arquivos novamente, usando a heurística e procurar restaurar o ambiente.

O último elemento Reference do arquivo é uma referencia de projeto. Note como ele usa o GUID do projeto para identificar o projeto e não usa o path para o arquivo de projeto.

Além destes arquivos , os projetos do tipo C# , J# e VB.NET criam um segundo arquivo de projeto que tem o mesmo nome que o projeto principal e é identificado pela extensão .user .Ex: csproj.user.

Este arquivo contém certas propriedades relacionadas com o usuário e referentes ao projeto global. Seu relacionamento com as configurações do projeto é idêntica ao relacionamento entre os arquivos .sln e .suo ; ele contém configurações que afetam a operação do IDE mas não tem impacto na construção do projeto.

Para projetos web usando C# e VB.NET existe um projeto adicional com extensão .webinfo que contém o XML conforme exibido abaixo:

<VisualStudioUNCWeb>
<Web URLPath = "http://localhost/WebUI/WebUI.vbproj" />
</VisualStudioUNCWeb>

O elemento Web tem um atributo - URLPath - que aponta o VS.NET para a URL correta para este projeto.

Agora você já tem uma visão macro do que são e para que servem os arquivos de solução(Solution) e os arquivos de projetos

Tchau .. 


José Carlos Macoratti