.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