Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Uma solução é uma estrutura para organizar projetos no Visual Studio. A solução mantém as informações de estado para projetos em dois arquivos:
.slnarquivo (baseado em texto, compartilhado).suoarquivo (opções de solução binárias específicas do usuário)
Para obter mais informações sobre arquivos .suo, consulte o arquivo Opções do Usuário da Solução (.suo).
Se o VSPackage for carregado devido a .sln ser referenciado no arquivo, o ambiente chamará ReadSolutionProps para ler no .sln arquivo.
O .sln arquivo contém informações baseadas em texto que o ambiente usa para localizar e carregar os parâmetros nome-valor para os dados persistentes e o PROJETO VSPackages que ele faz referência. Quando um usuário abre uma solução, o ambiente percorre o preSolutionProjectarquivo e postSolution as informações no .sln arquivo para carregar a solução, projetos dentro da solução e todas as informações persistentes anexadas à solução.
O arquivo de cada projeto contém informações adicionais lidas pelo ambiente para preencher a hierarquia com os itens desse projeto. A persistência de dados da hierarquia é controlada pelo projeto. Normalmente, os .sln dados não são armazenados no arquivo, embora você possa gravar informações de projeto intencionalmente no .sln arquivo se optar por fazê-lo. Para obter mais informações sobre persistência, consulte Persistência do Projeto e Abertura e Salvamento de Itens do Projeto.
Cabeçalho do arquivo
O cabeçalho de um .sln arquivo tem esta aparência:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32505.173
MinimumVisualStudioVersion = 10.0.40219.1
Definições
Microsoft Visual Studio Solution File, Format Version 12.00
Cabeçalho padrão que define a versão de formato de arquivo.
# Visual Studio Version 17
A versão principal do Visual Studio que (mais recentemente) salvou esse arquivo de solução. Essas informações controlam o número de versão no ícone da solução.
VisualStudioVersion = 17.2.32505.173
A versão completa do Visual Studio que (mais recentemente) salvou o arquivo de solução. Se o arquivo de solução for salvo por uma versão mais recente do Visual Studio que tenha a mesma versão principal. Esse valor não é atualizado para diminuir a rotatividade no arquivo.
MinimumVisualStudioVersion = 10.0.40219.1
A versão mínima (mais antiga) do Visual Studio que pode abrir esse arquivo de solução.
Corpo do arquivo
O corpo de um .sln arquivo consiste em várias seções rotuladas GlobalSection, como esta:
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1", "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}"
EndProject
Global
GlobalSection(SolutionNotes) = postSolution
EndGlobalSection
GlobalSection(SolutionConfiguration) = preSolution
ConfigName.0 = Debug
ConfigName.1 = Release
EndGlobalSection
GlobalSection(ProjectDependencies) = postSolution
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}.Debug.ActiveCfg = Debug|x86
{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}.Debug.Build.0 = Debug|x86
{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}.Release.ActiveCfg = Release|x86
{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}.Release.Build.0 = Release|x86
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal
Para carregar uma solução, o ambiente faz a seguinte sequência de tarefas:
O ambiente lê a seção Global do
.slnarquivo e processa todas as seções marcadaspreSolution. Neste arquivo de exemplo, há uma instrução desse tipo:GlobalSection(SolutionConfiguration) = preSolution ConfigName.0 = Debug ConfigName.1 = ReleaseQuando o ambiente lê a
GlobalSection('name')marca, ele mapeia o nome para um VSPackage usando o registro. O nome da chave deve existir no registro em[HKLM\\<Application ID Registry Root\>\SolutionPersistence\AggregateGUIDs]. O valor padrão das chaves é o GUID do Pacote (REG_SZ) do VSPackage que escreveu as entradas.O ambiente carrega o VSPackage, chama
QueryInterfaceo VSPackage para a IVsPersistSolutionProps interface e chama o ReadSolutionProps método com os dados na seção para que o VSPackage possa armazenar os dados. O ambiente repete esse processo para cadapreSolutionseção.O ambiente itera por meio dos blocos de persistência do projeto. Nesse caso, há um projeto.
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1", "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}" EndProjectEsta instrução contém o GUID de projeto exclusivo e o GUID do tipo de projeto. Essas informações são usadas pelo ambiente para localizar o arquivo de projeto ou arquivos que pertencem à solução e o VSPackage necessário para cada projeto. O GUID do projeto é passado para IVsProjectFactory carregar o VSPackage específico relacionado ao projeto e, em seguida, o projeto é carregado pelo VSPackage. Nesse caso, o VSPackage carregado para este projeto é o Visual Basic.
Cada projeto pode persistir uma ID de instância de projeto exclusiva para que possa ser acessada conforme necessário por outros projetos na solução. O ideal é que, se a solução e os projetos estiverem sob controle do código-fonte, o caminho para o projeto deverá ser relativo ao caminho da solução. Quando a solução é carregada pela primeira vez, os arquivos de projeto não podem estar no computador do usuário. Ao ter o arquivo de projeto armazenado no servidor em relação ao arquivo de solução, é mais simples que o arquivo de projeto seja encontrado e copiado para o computador do usuário. Em seguida, ele copia e carrega o restante dos arquivos necessários para o projeto.
Com base nas informações contidas na seção de projeto do
.slnarquivo, o ambiente carrega cada arquivo de projeto. O projeto em si é então responsável por preencher a hierarquia do projeto e carregar quaisquer projetos aninhados.Depois que todas as seções do
.slnarquivo são processadas, a solução é exibida no Gerenciador de Soluções e está pronta para modificação pelo usuário.
Se algum projeto na solução que implementa o VSPackage falhar ao carregar, o OnProjectLoadFailure método será chamado e todos os projetos na solução ignorarão as alterações que ele pode ter feito durante o carregamento. Para quaisquer erros de análise, o máximo de informações possível é preservado com os arquivos da solução. O ambiente exibe uma caixa de diálogo avisando ao usuário que a solução está corrompida.
Quando a solução é salva ou fechada, o QuerySaveSolutionProps método é chamado. Ele é passado para a hierarquia para ver se foram feitas alterações na solução que precisam ser inseridas no .sln arquivo. Um valor nulo, passado para QuerySaveSolutionProps dentro VSQUERYSAVESLNPROPS, indica que as informações estão sendo mantidas para a solução. Se o valor não for nulo, as informações persistentes serão para um projeto específico, determinado pelo ponteiro para a IVsHierarchy interface.
Se houver informações a serem salvas, a IVsSolutionPersistence interface será chamada com um ponteiro para o SaveSolutionProps método. Em WriteSolutionProps seguida, o método é chamado pelo ambiente para recuperar os pares nome-valor da IPropertyBag interface e gravar as informações no .sln arquivo.
SaveSolutionProps e WriteSolutionProps objetos são chamados recursivamente pelo ambiente para recuperar informações a serem salvas da IPropertyBag interface até que todas as alterações sejam inseridas no .sln arquivo. Dessa forma, você pode garantir que as informações serão mantidas com a solução e disponíveis na próxima vez que a solução for aberta.
Cada VSPackage carregado é enumerado para ver se ele tem algo a salvar no .sln arquivo. É apenas no momento da carga que as chaves do Registro são consultadas. O ambiente sabe sobre todos os pacotes carregados porque eles estão na memória no momento em que a solução é salva.
Somente o .sln arquivo contém entradas nas seções e preSolution nas postSolution seções. Não há seções semelhantes no arquivo .suo, pois a solução precisa que essas informações sejam carregadas corretamente. O .suo arquivo contém opções específicas do usuário, como anotações privadas que não se destinam a serem compartilhadas ou colocadas sob controle do código-fonte.