Expor tipos a designers visuais
O Visual Studio deve ter acesso a definições de classe e tipo em tempo de design para exibir um designer visual. As classes são carregadas a partir de um conjunto predefinido de assemblies que incluem o conjunto de dependências completo do projeto atual (referências mais suas dependências). Também pode ser necessário que os designers visuais acessem classes e tipos definidos em arquivos gerados por ferramentas personalizadas.
Os sistemas de projeto Visual Basic e Visual C# fornecem suporte para acessar classes e tipos gerados por meio de arquivos executáveis portáteis temporários (PEs temporários). Qualquer arquivo gerado por uma ferramenta personalizada pode ser compilado em um assembly temporário para que os tipos possam ser carregados desses assemblies e expostos aos designers. A saída de cada ferramenta personalizada é compilada em um PE temporário separado, e o sucesso ou falha dessa compilação temporária depende apenas se o arquivo gerado pode ou não ser compilado. Mesmo que um projeto não possa ser construído como um todo, os PEs temporários individuais ainda podem estar disponíveis para os designers.
O sistema de projeto fornece suporte completo para controlar alterações no arquivo de saída de uma ferramenta personalizada, desde que essas alterações sejam o resultado da execução da ferramenta personalizada. Cada vez que a ferramenta personalizada é executada, um novo PE temporário é gerado e notificações apropriadas são enviadas aos designers.
Observação
Como o arquivo de geração executável temporário do programa acontece em segundo plano, nenhum erro é relatado ao usuário se a compilação falhar.
As ferramentas personalizadas que aproveitam o suporte temporário a PE devem seguir as seguintes regras:
GeneratesDesignTimeSource deve ser definido como 1 no registro.
Nenhuma compilação de arquivo executável do programa ocorre sem essa configuração.
O código gerado deve estar no mesmo idioma que a configuração do projeto global.
O PE temporário é compilado independentemente do que a ferramenta personalizada relata como a extensão DefaultExtension solicitada, desde que GeneratesDesignTimeSource esteja definido como 1 no Registro. A extensão não precisa ser .vb, .cs ou .jsl, pode ser qualquer extensão.
O código gerado pela ferramenta personalizada deve ser válido e deve ser compilado por conta própria usando apenas o conjunto de referências presentes no projeto no momento em que Generate termina a execução.
Quando um PE temporário é compilado, o único arquivo de origem fornecido ao compilador é a saída da ferramenta personalizada. Portanto, uma ferramenta personalizada que usa um PE temporário deve gerar arquivos de saída que podem ser compilados independentemente de outros arquivos no projeto.