Quais são as várias configurações de "Ação de compilação" nas propriedades do projeto do Visual Studio e o que elas fazem?

844

Na maioria das vezes, você aceita o padrão que o Visual Studio define para você ... Estou me referindo à propriedade BuildAction para cada arquivo selecionado no Gerenciador de Soluções. Existem várias opções e é difícil saber o que cada uma delas fará.

Gishu
fonte

Respostas:

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

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

  • Conteúdo : permite recuperar um arquivo (no mesmo diretório que o assembly) como um fluxo via Application.GetContentStream (URI). Para que esse método funcione, ele precisa de um atributo personalizado AssemblyAssociatedContentFile que o Visual Studio agradavelmente adiciona quando você marca um arquivo como "Conteúdo"

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

  • Recurso (apenas WPF) : incorpora o arquivo em um recurso de manifesto de montagem compartilhado (por todos os arquivos na montagem com configuração semelhante) chamado AppName.g.resources.

  • Página (apenas WPF) : usado para compilar um xamlarquivo baml. O bamlé então incorporado com a mesma técnica que Resource(ou seja, disponível como `AppName.g.resources)

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

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

  • DesignData : Compila os modos de exibição XAML para que os controles do usuário possam ser visualizados com dados de exemplo no Visual Studio (usa tipos simulados)

  • DesignDataWithDesignTimeCreatableTypes : Compila modos de exibição XAML para que os controles do usuário possam ser visualizados com dados de exemplo no Visual Studio (usa tipos reais)

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

  • CodeAnalysisDictionary : um arquivo XML que contém um dicionário de palavras personalizado para regras de ortografia

Gishu
fonte
9
" DesignData " é usado para "Blendability", permitindo adicionar dados baseados em marcações WPF, ou seja, quando as configurações corretas são aplicadas, mostradas no tempo de design.
precisa saber é o seguinte
6
Observe também que o Conteúdo será incluído ao usar a implantação com um clique, mas Nenhum nem mesmo se "copiar se mais novo" estiver selecionado.
Dax Fohl # 23/13
4
E quanto a Fakes, CodeAnalysisDictionary e XamlAppRef?
Crono
1
@jxramos Essas informações são salvas no arquivo do projeto.
Tobias
18
Que tal AdditionalFiles? Eu o vejo no VS 2015, mas não consegui encontrar uma referência para isso.
Desenvolvedor Holístico
111

A partir da documentação:

A propriedade BuildAction indica o que o Visual Studio faz com um arquivo quando uma compilação é 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 construção. Um exemplo é um arquivo de texto que contém documentação, como um arquivo Leia-me.

Compilar - O arquivo é compilado na saída da compilação. 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 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 compilação do projeto principal como uma DLL ou executável. Geralmente é usado para arquivos de recursos.

Paul Batum
fonte
1
Interessante! Eu tenho o VS2008 instalado, gostaria de saber por que eles não apareceram na minha documentação?
Paul Batum
E o recurso PRI?
Yawar
1
@PaulBatum você pode inserir a referência para esta definição citada?
Rajan Prasad
@ Raymond 232: Qual definição citada?
Peter Mortensen
1
@PaulBatum: Sim, de fato a referência seria legal. A resposta começa com "Da documentação" para que um link para esta documentação seja apreciado.
Marc
35

Página - Pega o arquivo XAML especificado e compila no BAML e incorpora essa saída no fluxo de recursos gerenciados para seu assembly (especificamente AssemblyName.g.resources). Além disso, se você tiver os atributos apropriados no elemento XAML raiz no diretório arquivo, ele criará um arquivo blah.g.cs, que conterá uma classe parcial do "codebehind" dessa página; isso basicamente envolve uma chamada para o BAML goop para re-hidratar o arquivo na memória e definir qualquer uma das variáveis ​​de membro da sua classe para os itens agora criados (por exemplo, se você colocar x: Name = "foo" em um item , você poderá fazer isso .oo.Background = Purple; ou similar.

ApplicationDefinition - semelhante a Page, exceto que continua a ultrapassar os limites e define o ponto de entrada para o seu aplicativo que instanciará o objeto do aplicativo, executará a chamada, que instancia o tipo definido pela propriedade StartupUri e exibirá a janela principal .

Além disso, para ficar claro, essa questão geral é infinita em seu conjunto de resultados; qualquer um pode definir BuildActions adicionais apenas criando uma tarefa MSBuild. Se você procurar no diretório% systemroot% \ Microsoft.net \ framework \ v {version} \ e observar o arquivo Microsoft.Common.targets, poderá decifrar muito mais (por exemplo, no VS Pro e acima, existe uma ação "Sombra" que permite gerar acessadores particulares para ajudar no teste de unidade de classes particulares.

Dominic Hopton
fonte
Espero que você não se importe de ter copiado partes da sua resposta na resposta de Gishu, para obter uma resposta de referência mais completa.
22812 Ian Boyd
32

O VS2010 possui 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 como 'Copiar se mais recente' ou 'Copiar sempre'.

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

Usei a configuração 'Build Action' de 'None' e a configuração 'Copy to Output Direcotry' de 'Copy if Newer' para algumas inclusões .config vinculadas externamente.

G.

Gerard ONeill
fonte
Obrigado por isso. No entanto, estou um pouco confuso sobre como / onde faço isso. Idealmente, gostaria de apenas "incluir" minha pasta "Upload" e todos os arquivos filhos serão incluídos na publicação.
precisa saber é o seguinte
Isso se aplica às propriedades de um item individual no explorador de objetos, que você verá na guia Propriedades ao selecionar um item ou clicar com o botão direito do mouse e selecionar propriedades. Para o que você deseja, acho que você só precisa adicionar um item existente quando clicar com o botão direito do mouse no projeto. BTW, o botão salvar da caixa de diálogo para adicionar item existente tem um menu suspenso que permite adicioná-lo como um link. Você ainda pode precisar adicionar os itens dentro da pasta.
precisa saber é o seguinte
5

No VS2008, a entrada do documento que parece 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 é Application). ApplicationDefinition é obrigatório quando Install for true e OutputType for winexe. Um aplicativo WPF e, consequentemente, um projeto MSBuild podem ter apenas uma ApplicationDefinition.

Página Identifica um arquivo de marcação XAML cujo conteúdo é convertido em um formato binário e compilado em um assembly. Os itens da página geralmente são implementados em conjunto com uma classe code-behind.

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 recurso que é compilado em um assembly de aplicativo. Como mencionado anteriormente, o UICulture processa itens de recursos.

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

James Moore
fonte
4

Que tal esta página do Microsoft Connect (explicando os tipos DesignData e DesignDataWithDesignTimeCreatableTypes). Citação:

A seguir, são descritas as duas ações de compilação para arquivos de dados de amostra.

Arquivos .xaml de dados de amostra devem receber uma das ações de compilação abaixo:

DesignData : os tipos de dados de amostra serão criados como tipos falsos. Use esta Ação de criação quando os tipos de dados de amostra não puderem ser criados 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 compilação quando os tipos de dados de amostra puderem ser 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 fornece algumas idéias. Não sei se essas ações de compilação também são aplicáveis ​​a projetos que não são do Silverlight.

Per Lundberg
fonte
4
  • Falsificações: parte da estrutura do 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 dar suporte ao teste de unidade em seu projeto, ajudando a isolar o código que está sendo testado, substituindo outras partes do aplicativo por stubs ou shims. Mais aqui: https://msdn.microsoft.com/en-us/library/hh549175.aspx
Jorge Garcia
fonte