Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os tipos de projeto no Visual Studio usam uma fábrica de projeto para criar instâncias de objetos de projeto. Uma fábrica de projeto é semelhante a uma fábrica de classe padrão para objetos COM criáveis conjuntamente. No entanto, os objetos do projeto não são criáveis; eles só podem ser criados usando uma fábrica de projeto.
O IDE do Visual Studio chama a fábrica de projeto implementada em seu VSPackage quando um usuário carrega um projeto existente ou cria um novo projeto no Visual Studio. O novo objeto de projeto fornece ao IDE informações suficientes para preencher o Gerenciador de Soluções. O novo objeto de projeto também fornece as interfaces necessárias para suportar todas as ações relevantes da interface do usuário iniciadas pelo IDE.
Você pode implementar a IVsProjectFactory interface em uma classe em seu projeto. Normalmente, ele reside em seu próprio módulo.
Os projetos que suportam a agregação por um proprietário devem manter uma chave de proprietário em seu arquivo de projeto. Quando o método CreateProject é chamado num projeto com uma chave de proprietário, o projeto detido converte a sua chave de proprietário num GUID de fábrica de projeto e depois invoca o método CreateProject nessa fábrica de projeto para realizar a criação efetiva.
Criar um projeto próprio
Um proprietário cria um projeto próprio em duas fases:
Chamando o método PreCreateForOwner. Isso dá ao projeto proprietário a oportunidade de criar um objeto de projeto agregado com base no controlo de entrada
IUnknown. O projeto de propriedade passa o objeto internoIUnknowne agregado de volta para o projeto proprietário. Isso dá ao projeto uma oportunidade de armazenar o conteúdo deIUnknown.Chamando o método InitializeForOwner. O projeto de propriedade faz toda a sua instanciação quando esse método é chamado em vez de chamar
IVsProjectFactory::CreateProject, como seria o caso para projetos que não são de propriedade. A enumeração de entradaVSOWNEDPROJECTOBJECTé normalmente o projeto de propriedade agregado. O projeto de propriedade pode usar essa variável para determinar se seu objeto de projeto já foi criado (cookie não é igual a NULL) ou deve ser criado (cookie é igual a NULL).Os tipos de projeto são identificados por um GUID exclusivo do projeto, semelhante ao CLSID de um objeto COM que pode ser cocriado. Normalmente, uma fábrica de projeto lida com a criação de instâncias de um único tipo de projeto, embora seja possível ter uma fábrica de projeto manipulando mais de um GUID de tipo de projeto.
Os tipos de projeto estão associados a uma extensão de nome de arquivo específica. Quando um usuário tenta abrir um arquivo de projeto existente ou tenta criar um novo projeto clonando um modelo, o IDE usa a extensão no arquivo para determinar o GUID do projeto correspondente.
Assim que o IDE determina se deve criar um novo projeto ou abrir um projeto existente de um tipo específico, o IDE usa as informações no registro do sistema em [HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\8.0\Projects] para encontrar qual VSPackage implementa a fábrica de projeto necessária. O IDE carrega este VSPackage. No método SetSite, o VSPackage deve registrar a sua fábrica de projetos com o IDE através do método RegisterProjectType.
O método primário da
IVsProjectFactoryinterface é CreateProject, que deve lidar com dois cenários: abrir um projeto existente e criar um novo projeto. A maioria dos projetos armazena seu estado de projeto em um arquivo de projeto. Normalmente, novos projetos são criados fazendo uma cópia do arquivo de modelo passado para oCreateProjectmétodo e, em seguida, abrindo a cópia. Os projetos existentes são instanciados abrindo diretamente o arquivo de projeto passado para oCreateProjectmétodo. OCreateProjectmétodo pode exibir recursos adicionais da UI ao utilizador, conforme necessário.Um projeto também pode usar nenhum arquivo e, em vez disso, armazenar seu estado de projeto em um mecanismo de armazenamento diferente do sistema de arquivos, como um banco de dados ou servidor Web. Nesse caso, o parâmetro de nome de arquivo passado para o
CreateProjectmétodo não é, na verdade, um caminho do sistema de arquivos, mas uma cadeia de caracteres exclusiva — uma URL — para identificar os dados do projeto. Não é necessário copiar os arquivos de modelo que são passados paraCreateProjectpara acionar a sequência de construção apropriada.