 .NET 
- Conceitos : Arquivos Solutions e Projects
   .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