Quais são as várias configurações de “Build action” nas propriedades do projeto do Visual Studio e o que elas fazem?

Na maioria das vezes, você pega o que o Visual Studio define para você como padrão … Estou me referindo à propriedade BuildAction para cada arquivo selecionado no Solution Explorer. Há várias opções e é difícil saber o que cada uma delas fará.

  • Nenhum : o arquivo não está incluído no grupo de saída do projeto e não é compilado no processo de criação. Um exemplo é um arquivo de texto que contém documentação, como um arquivo Leiame.

  • Compile : o arquivo é compilado na saída da compilation. Essa configuração é usada para arquivos de código.

  • Conteúdo : Permite recuperar um arquivo (no mesmo diretório da assembly) como um stream via Application.GetContentStream (URI). Para este método funcionar, ele precisa de um atributo personalizado AssemblyAssociatedContentFile que o Visual Studio graciosamente adiciona quando você marca um arquivo como “Conteúdo”

  • Recurso incorporado : incorpora o arquivo em um recurso de manifesto de assembly exclusivo.

  • Recurso (somente WPF) : Incorpora o arquivo em um recurso de manifesto de assembly compartilhado (por todos os arquivos da assembly com configuração semelhante) denominado AppName.g.resources.

  • Página (somente WPF) : Usada para compilar um arquivo xaml em baml . O baml é então incorporado com a mesma técnica do Resource (isto é, disponível como `AppName.g.resources)

  • ApplicationDefinition (somente WPF) : Marque o arquivo XAML / class que define seu aplicativo. Você especifica o code-behind com o x: Class = “Namespace.ClassName” e define o formulário de boot / página com StartupUri = “Window1.xaml”

  • SplashScreen (somente WPF) : Uma imagem marcada como SplashScreen é mostrada automaticamente quando um aplicativo WPF é carregado e depois desaparece

  • DesignData : compila os modelos de visualização XAML para que os controles de usuário possam ser visualizados com dados de amostra no Visual Studio (usa tipos simulados)

  • DesignDataWithDesignTimeCreatableTypes : Compila modelos de view XAML para que os usercontrols possam ser visualizados com dados de amostra no Visual Studio (usa tipos reais)

  • EntityDeploy : (Entity Framework) : usado para implantar os artefatos do Entity Framework

  • CodeAnalysisDictionary : um arquivo XML contendo dictionary de palavras personalizado para regras de ortografia

Da documentação:

A propriedade BuildAction indica o que o Visual Studio faz com um arquivo quando uma compilation é executada. BuildAction pode ter um dos vários valores:

Nenhum – o arquivo não está incluído no grupo de saída do projeto e não é compilado no processo de criação. Um exemplo é um arquivo de texto que contém documentação, como um arquivo Leiame.

Compile – O arquivo é compilado na saída de compilation. Essa configuração é usada para arquivos de código.

Conteúdo – O arquivo não é compilado, mas está incluído no grupo de saída de conteúdo. Por exemplo, essa configuração é o valor padrão para um arquivo .htm ou outro tipo de arquivo da Web.

Recurso incorporado – este arquivo é incorporado na saída de compilation do projeto principal como uma DLL ou executável. É normalmente usado para arquivos de resources.

Página – Leva o arquivo XAML especificado e compila em BAML e incorpora essa saída no stream de recurso gerenciado para seu assembly (especificamente AssemblyName.g.resources), além disso, se você tiver os atributos apropriados no elemento XAML raiz no arquivo, ele criará um arquivo blah.g.cs, que conterá uma class parcial do “codebehind” para aquela página; isso basicamente envolve uma chamada para o goop BAML para re-hidratar o arquivo na memory e para definir qualquer uma das variables ​​de membro da sua class para os itens agora criados (por exemplo, se você colocar x: Name = “foo” em um item , você poderá fazer this.foo.Background = Purple, ou similar.

ApplicationDefinition – semelhante a Page, exceto que ele segue adiante e define o ponto de input para seu aplicativo que instanciará seu object de aplicativo, chamada run nele, que instanciará o tipo definido pela propriedade StartupUri e dará a sua mainwindow .

Além disso, para ser claro, essa questão é infinita em seu conjunto de resultados; qualquer pessoa pode definir BuildActions adicionais apenas construindo uma tarefa do MSBuild. Se você olhar no diretório% systemroot% \ Microsoft.net \ framework \ v {version} \ e olhar o arquivo Microsoft.Common.targets, será possível decifrar muito mais (por exemplo, com o VS Pro e acima, existe uma ação “Shadow” que permite gerar acessadores privados para ajudar nas aulas particulares de teste de unidade.

O VS2010 tem uma propriedade para ‘Build Action’ e também para ‘Copy to Output Directory’. Portanto, uma ação de ‘Nenhum’ ainda será copiada para o diretório de construção se a propriedade de cópia estiver configurada para ‘Copiar se for Mais Recente’ ou ‘Copiar Sempre’.

Portanto, uma ação de compilation de ‘Conteúdo’ deve ser reservada para indicar o conteúdo que você acessará via ‘Application.GetContentStream’

Eu usei a configuração ‘Build Action’ de ‘None’ e a configuração ‘Copy to Output Direcotry’ de ‘Copy if Newer’ para alguns arquivos .config vinculados externamente.

G.

No VS2008, a input de documento que parece ser mais útil é:

Windows Presentation Foundation Criando um aplicativo WPF (WPF)

ms-help: //MS.VSCC.v90/MS.MSDNQTR.v90.en/wpf_conceptual/html/a58696fd-bdad-4b55-9759-136dfdf8b91c.htm

ApplicationDefinition Identifica o arquivo de marcação XAML que contém a definição do aplicativo (um arquivo de marcação XAML cujo elemento raiz é Aplicativo). ApplicationDefinition é obrigatório quando a instalação é true e OutputType é winexe. Um aplicativo WPF e, conseqüentemente, um projeto MSBuild só pode ter uma ApplicationDefinition.

Page Identifica um arquivo de marcação XAML cujo conteúdo é convertido em um formato binário e compilado em um assembly. Itens de página são normalmente implementados em conjunto com uma class de código por trás.

Os itens de página mais comuns são arquivos XAML cujos elementos de nível superior são um dos seguintes:

 Window (System.Windows..::.Window). Page (System.Windows.Controls..::.Page). PageFunction (System.Windows.Navigation..::.PageFunction<(Of <(T>)>)). ResourceDictionary (System.Windows..::.ResourceDictionary). FlowDocument (System.Windows.Documents..::.FlowDocument). UserControl (System.Windows.Controls..::.UserControl). 

Recurso Identifica um arquivo de resources que é compilado em um assembly de aplicativo. Como mencionado anteriormente, o UICulture processa itens de resources.

Conteúdo Identifica um arquivo de conteúdo distribuído com um aplicativo. Metadados que descrevem o arquivo de conteúdo são compilados no aplicativo (usando AssemblyAssociatedContentFileAttribute).

Como sobre esta página do Microsoft Connect (explicando os tipos DesignData e DesignDataWithDesignTimeCreatableTypes). Citando:

A seguir, descrevemos os dois arquivos Build Actions for Sample Data.

Os arquivos .xaml de dados de amostra devem receber uma das Ações de compilation abaixo:

DesignData : os tipos de dados de amostra serão criados como tipos falsos. Use esta Ação de compilation quando os tipos de dados de amostra não forem criativos ou tiverem propriedades somente leitura para as quais você deseja definir valores de dados de amostra.

DesignDataWithDesignTimeCreatableTypes : Os tipos de dados de amostra serão criados usando os tipos definidos no arquivo de dados de amostra. Use esta ação de compilation quando os tipos de dados de amostra forem criados usando seu construtor vazio padrão.

Não é tão incrivelmente exaustivo, mas pelo menos dá uma dica. Este passo a passo do MSDN também dá algumas idéias. Eu não sei se essas ações de compilation são aplicáveis ​​para projetos não-Silverlight também.

  • Fakes: Parte da estrutura Microsoft Fakes (isolamento de teste de unidade). Não disponível em todas as versões do Visual Studio. As falsificações são usadas para oferecer suporte a testes de unidade em seu projeto, ajudando você a isolar o código que está testando, substituindo outras partes do aplicativo por stubs ou calços. Mais aqui: https://msdn.microsoft.com/pt-br/library/hh549175.aspx