Partilhar via


Herança de propriedade em projetos do Visual Studio

O sistema de projetos nativo do Visual Studio é baseado no MSBuild. O MSBuild define formatos de arquivo e regras para a criação de projetos de qualquer tipo. Ele gerencia a maior parte da complexidade de criação para várias configurações e plataformas. Você achará interessante entender como ele funciona. Ele é especialmente importante caso deseje definir configurações personalizadas. Ou criar conjuntos de propriedades reutilizáveis que você pode compartilhar e importar para vários projetos.

O arquivo .vcxproj, arquivos .props e arquivos .targets

As propriedades do projeto são armazenadas em vários arquivos. Algumas são armazenadas diretamente no arquivo de projeto .vcxproj. Outros vêm de outros arquivos .targets ou .props importados pelo arquivo de projeto e que fornecem valores padrão. Você encontrará os arquivos de projeto do Visual Studio 2015 em uma pasta específica da localidade no diretório base %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\v140.

As propriedades do projeto são armazenadas em vários arquivos. Algumas são armazenadas diretamente no arquivo de projeto .vcxproj. Outros vêm de outros arquivos .targets ou .props importados pelo arquivo de projeto e que fornecem valores padrão. Você encontrará os arquivos de projeto do Visual Studio 2017 em uma pasta específica da localidade no diretório base %VSINSTALLDIR%Common7\IDE\VC\VCTargets\.

As propriedades do projeto são armazenadas em vários arquivos. Algumas são armazenadas diretamente no arquivo de projeto .vcxproj. Outros vêm de outros arquivos .targets ou .props importados pelo arquivo de projeto e que fornecem valores padrão. Você encontrará os arquivos de projeto do Visual Studio em uma pasta específica da localidade no diretório base %VSINSTALLDIR%\MSBuild\Microsoft\VC\<version>. O <version> é específico para cada versão do Visual Studio. Ele é v160 para o Visual Studio 2019.

As propriedades também são armazenadas em arquivos .props personalizados que você pode adicionar ao seu próprio projeto. É altamente recomendável que você NÃO edite esses arquivos manualmente. Em vez disso, use as páginas de propriedades no IDE para modificar todas as propriedades, especialmente as que participam da herança, a menos que você conheça profundamente o MSBuild e os arquivos .vcxproj.

Conforme mostrado anteriormente, a mesma propriedade para a mesma configuração pode receber um valor diferente nesses arquivos diferentes. Quando você compila um projeto, o mecanismo do MSBuild avalia o arquivo de projeto e todos os arquivos importados em uma ordem bem definida que é descrita mais tarde. Conforme cada arquivo for avaliado, os valores de propriedade definidos nesse arquivo substituirão os valores existentes. Os valores não especificados são herdados dos arquivos que foram avaliados anteriormente. Quando você define uma propriedade com páginas de propriedades, também é importante se atentar ao local em que você a define. Se você definir uma propriedade como "X" em um arquivo ..props, mas a propriedade for definida como "Y" no arquivo de projeto, o projeto será compilado com a propriedade definida como "Y". Se a mesma propriedade for definida como "Z" em um item de projeto, como um arquivo .cpp, o mecanismo do MSBuild usará o valor "Z".

Veja a árvore básica de herança:

  1. Configurações padrão do Conjunto de Ferramentas CPP do MSBuild (o arquivo Microsoft.Cpp.Default.props no diretório base, que é importado pelo arquivo .vcxproj.)

  2. Folhas de propriedade

  3. arquivo .vcxproj. (Esse arquivo pode substituir as configurações padrão e as da folha de propriedades.)

  4. Metadados de itens

Dica

Em uma página de propriedades, uma propriedade em negrito é definida no contexto atual. Uma propriedade na fonte normal é herdada.

Exibir um arquivo de projeto expandido com todos os valores importados

Às vezes é útil ver o arquivo expandido para determinar como um valor de propriedade fornecido é herdado. Para ver a versão expandida, digite o comando a seguir em um prompt de comando do Visual Studio. (Altere os nomes dos arquivos de espaço reservado com o nome que você deseja usar.)

msbuild /pp:temp.txt myapp.vcxproj

Os arquivos de projeto expandidos podem ser grandes e difíceis de entender, a menos que você esteja familiarizado com o MSBuild. Veja a estrutura básica de um arquivo de projeto:

  1. Propriedades fundamentais do projeto, que não são expostas no IDE.

  2. Importação de Microsoft.cpp.default.props, que define algumas propriedades básicas e independentes do conjunto de ferramentas.

  3. Propriedades de Configuração Global (expostas como propriedades padrão de PlatformToolset e Project na página Configuração Geral). Essas propriedades determinam quais folhas de propriedade intrínseca e conjuntos de ferramentas são importados no Microsoft.cpp.props na próxima etapa.

  4. Importação de Microsoft.cpp.props, que define a maioria dos padrões do projeto.

  5. Importação de todas as folhas de propriedade, incluindo arquivos .user. Essas folhas de propriedade podem substituir tudo, exceto as propriedades padrão PlatformToolset e Project.

  6. As demais propriedades de configuração do projeto. Esses valores podem substituir o que foi definido nas folhas de propriedade.

  7. Itens (arquivos) com seus metadados. Esses itens são sempre a última palavra em regras de avaliação do MSBuild, mesmo que ocorram antes de outras propriedades e importações.

Para mais informações, consulte Propriedades do MSBuild.

Configurações de build

Uma configuração é apenas um grupo arbitrário de propriedades que recebem um nome. O Visual Studio fornece configurações de Depuração e Versão. Cada uma define várias propriedades apropriadamente para uma compilação de depuração ou compilação de versão. Você pode usar a ferramenta Gerenciador de Configuração para definir configurações personalizadas. Elas são uma forma conveniente de agrupar propriedades em uma variante específica de compilação.

Para obter uma ideia melhor das configurações de compilação, abra o Gerenciador de Propriedades. Você pode abri-lo escolhendo Exibir > Gerenciador de Propriedades ou Exibir > Outro Gerenciador de Propriedades > Windows, dependendo de suas configurações. O Gerenciador de Propriedades contém nós para cada par de configuração e plataforma no projeto. Em cada um desses nós estão os nós das folhas de propriedades (arquivos .props) que definem algumas propriedades específicas para essa configuração.

Captura de tela da janela do Gerenciador de Propriedades.

Por exemplo, você pode ir para o painel Geral nas Páginas de Propriedades. Altere a propriedade Conjunto de Caracteres para "Não Definir" em vez de "Usar Unicode" e clique em OK. Agora, o Gerenciador de Propriedades não mostra uma folha de propriedades de Suporte Unicode. Ele é removido da configuração atual, mas ainda está presente para outras configurações.

Para obter mais informações sobre o Gerenciador de Propriedades e as folhas de propriedades, confira Compartilhar ou reutilizar as configurações de projeto do Visual Studio C++.

Dica

O arquivo .user é um recurso herdado. É recomendável excluí-lo para manter as propriedades agrupadas corretamente de acordo com a configuração e a plataforma.