Каковы различные настройки «Build action» в свойствах проекта Visual Studio и что они делают?

По большей части вы просто берете все, что Visual Studio устанавливает для вас по умолчанию ... Я имею в виду свойство BuildAction для каждого файла, выбранного в обозревателе решений. Есть несколько вариантов, и трудно понять, что будет делать каждый из них.

28.09.2008 12:15:38
7 ОТВЕТОВ

Из документации:

Свойство BuildAction указывает, что Visual Studio делает с файлом при выполнении сборки. BuildAction может иметь одно из нескольких значений:

Нет - файл не входит в группу вывода проекта и не компилируется в процессе сборки. Примером является текстовый файл, содержащий документацию, например файл Readme.

Компилировать - файл компилируется в выходные данные сборки. Этот параметр используется для файлов кода.

Содержимое - файл не скомпилирован, но включен в группу вывода содержимого. Например, этот параметр является значением по умолчанию для веб-файла .htm или другого типа.

Внедренный ресурс - этот файл внедряется в вывод основной сборки проекта в виде DLL или исполняемого файла. Обычно используется для файлов ресурсов.

111
28.09.2008 12:20:35
Интересно! У меня установлена ​​VS2008, интересно, почему они не появились в моей документации?
Paul Batum 3.10.2008 22:01:00
А как насчет ресурса PRI?
Yawar 22.05.2015 20:48:36
@PaulBatum вы можете вставить ссылку на это цитируемое определение?
Rajan Prasad 15.11.2015 22:02:57
@Raymond 232: Какое цитируемое определение?
Peter Mortensen 16.05.2016 17:44:20
@PaulBatum: Да, действительно, ссылка будет хорошей. Ответ начинается с «Из документации», поэтому ссылка на эту документацию приветствуется.
Marc 13.02.2017 06:58:03
  • Нет : файл не входит в группу вывода проекта и не компилируется в процессе сборки. Примером является текстовый файл, содержащий документацию, например файл Readme.

  • Компилировать : файл компилируется в выходные данные сборки. Этот параметр используется для файлов кода.

  • Содержимое : позволяет получить файл (в том же каталоге, что и сборка) в виде потока через Application.GetContentStream (URI). Чтобы этот метод работал, ему нужен настраиваемый атрибут AssemblyAssociatedContentFile, который Visual Studio любезно добавляет, когда вы помечаете файл как «Содержимое».

  • Встроенный ресурс. Встраивает файл в эксклюзивный ресурс манифеста сборки.

  • Ресурс (только для WPF) . Встраивает файл в общий (всеми файлами в сборке с аналогичным параметром) ресурс манифеста сборки с именем AppName.g.resources.

  • Страница (только WPF) : используется для компиляции xamlфайла в baml. Затем bamlон внедряется с использованием того же метода, что и Resource(то есть доступно как `AppName.g.resources)

  • ApplicationDefinition (только WPF) : отметьте файл XAML / class, который определяет ваше приложение. Вы указываете код позади с x: Class = "Namespace.ClassName" и устанавливаете форму запуска / страницу с StartupUri = "Window1.xaml"

  • SplashScreen (только WPF) : изображение, помеченное как SplashScreen , отображается автоматически при загрузке приложения WPF, а затем исчезает

  • DesignData : компилирует модели представления XAML, чтобы пользовательские элементы управления можно было предварительно просмотреть с образцами данных в Visual Studio (используются фиктивные типы)

  • DesignDataWithDesignTimeCreatableTypes : компилирует модели представления XAML, чтобы пользовательские элементы управления можно было предварительно просмотреть с образцами данных в Visual Studio (используются фактические типы)

  • EntityDeploy : (Entity Framework) : используется для развертывания артефактов Entity Framework

  • CodeAnalysisDictionary : файл XML, содержащий пользовательский словарь слов для правил орфографии

1012
21.02.2020 19:03:29
« DesignData » используется для «Blendability», позволяя вам добавлять данные на основе разметки WPF, которые при правильных настройках затем отображаются во время разработки.
PGallagher 29.01.2013 21:27:40
Также обратите внимание, что содержимое будет включено при использовании развертывания одним щелчком, но ничего не будет, даже если выбрано «копировать, если новее».
Dax Fohl 23.10.2013 18:38:08
Что насчет подделок, CodeAnalysisDictionary и XamlAppRef?
Crono 19.11.2013 22:18:51
@jxramos Эта информация сохраняется в файле проекта.
Tobias 25.10.2016 09:07:22
Как насчет AdditionalFiles? Я вижу это в VS 2015, но не могу найти ссылку для этого.
Holistic Developer 5.01.2017 22:10:22

Page - принимает указанный файл XAML, компилирует его в BAML и встраивает этот вывод в поток управляемых ресурсов для вашей сборки (в частности AssemblyName.g.resources). Кроме того, если у вас есть соответствующие атрибуты в корневом элементе XAML в файл, он создаст файл blah.g.cs, который будет содержать частичный класс «codebehind» для этой страницы; это в основном включает вызов цикла BAML для повторной гидратации файла в память и для установки любых переменных-членов вашего класса для вновь созданных элементов (например, если вы положили x: Name = "foo" на элемент , вы сможете сделать это.foo.Background = Purple или подобное.

ApplicationDefinition - аналогичен Page, за исключением того, что он идет дальше и определяет точку входа для вашего приложения, которая будет создавать экземпляр объекта вашего приложения, вызывать метод run для него, который затем будет создавать экземпляр типа, установленного свойством StartupUri, и предоставит ваше основное окно ,

Кроме того, чтобы быть ясным, этот вопрос в целом бесконечен в своем наборе результатов; любой может определить дополнительные действия BuildActions, просто создав задачу MSBuild. Если вы посмотрите в каталог% systemroot% \ Microsoft.net \ framework \ v {version} \ и посмотрите файл Microsoft.Common.targets, вы сможете расшифровать гораздо больше (например, с помощью VS Pro и выше, есть действие «Shadow», которое позволяет генерировать частные средства доступа, чтобы помочь с модульным тестированием частных классов.

35
28.09.2008 16:12:14
Надеюсь, вы не возражаете, что я скопировал части вашего ответа в ответ Гишу, чтобы получить более полный справочный ответ.
Ian Boyd 16.02.2012 18:54:45

В VS2008 запись в документе, которая кажется наиболее полезной:

Windows Presentation Foundation Создание приложения WPF (WPF)

мс-помощь: //MS.VSCC.v90/MS.MSDNQTR.v90.en/wpf_conceptual/html/a58696fd-bdad-4b55-9759-136dfdf8b91c.htm

ApplicationDefinition Идентифицирует файл разметки XAML, который содержит определение приложения (файл разметки XAML, корневым элементом которого является Application). ApplicationDefinition является обязательным, если Install имеет значение true, а OutputType - winexe. Приложение WPF и, следовательно, проект MSBuild могут иметь только одно ApplicationDefinition.

Страница Идентифицирует файл разметки XAML, содержимое которого преобразуется в двоичный формат и компилируется в сборку. Элементы страницы обычно реализуются вместе с классом code-behind.

Наиболее распространенными элементами страницы являются файлы XAML, элементами верхнего уровня которых являются следующие:

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).

Ресурс Идентифицирует файл ресурса, который компилируется в сборку приложения. Как упоминалось ранее, UICulture обрабатывает элементы ресурсов.

Содержимое Идентифицирует файл содержимого, который распространяется вместе с приложением. Метаданные, описывающие файл содержимого, компилируются в приложение (с использованием AssemblyAssociatedContentFileAttribute).

5
15.06.2012 12:36:36

VS2010 имеет свойство для «Build Action», а также для «Copy to Output Directory». Таким образом, действие «Нет» все равно будет копироваться в каталог сборки, если для свойства копирования установлено значение «Копировать, если новее» или «Копировать всегда».

Таким образом, действие «Сборка содержимого» должно быть зарезервировано для указания содержимого, к которому вы получите доступ через «Application.GetContentStream».

Я использовал параметр «Build Action» для «None» и «Copy to Output Direcotry» для «Copy if Newer» для некоторых внешних ссылок .config.

Г.

31
9.04.2013 21:37:14
Спасибо за это. Однако я немного смущен тем, как и где я это делаю. В идеале я хотел бы просто «включить» мою папку «Upload», и все дочерние файлы будут включены в публикацию.
SamJolly 3.09.2013 21:39:42
Это относится к свойствам отдельного элемента в проводнике объектов, которые вы увидите на вкладке свойств при выборе элемента или щелчке правой кнопкой мыши и выборе свойств. Для того, что вы хотите, я думаю, что вам просто нужно добавить существующий элемент, когда вы щелкните правой кнопкой мыши по проекту. Кстати, кнопка сохранения диалога добавления существующего элемента имеет выпадающий список, который позволяет добавить его в качестве ссылки. Возможно, вам все еще придется добавить элементы в папку.
Gerard ONeill 4.09.2013 13:14:48

Как насчет этой страницы из Microsoft Connect (объясняющей типы DesignData и DesignDataWithDesignTimeCreatableTypes). Цитирование:

Ниже описаны два действия по созданию файлов с образцами данных.

Образцам .xaml-файлов данных должно быть назначено одно из следующих действий по сборке:

DesignData : образцы типов данных будут созданы как искусственные типы. Используйте это действие по построению, когда образцы типов данных недоступны для создания или имеют свойства только для чтения, для которых вы хотите определить значения образцов данных.

DesignDataWithDesignTimeCreatableTypes : образцы типов данных будут создаваться с использованием типов, определенных в файле примеров данных. Используйте это действие сборки, когда образцы типов данных могут быть созданы с использованием их пустого конструктора по умолчанию.

Не так невероятно исчерпывающе, но, по крайней мере, дает подсказку. Этот MSDN пошаговое руководство также дает некоторые идеи. Я не знаю, применимы ли эти действия по сборке и к проектам, не относящимся к Silverlight.

4
10.10.2013 07:01:45
  • Fakes: часть платформы Microsoft Fakes (модульный тест изоляции). Доступно не во всех версиях Visual Studio. Подделки используются для поддержки модульного тестирования в вашем проекте, помогая вам изолировать код, который вы тестируете, заменяя другие части приложения заглушками или прокладками. Подробнее здесь: https://msdn.microsoft.com/en-us/library/hh549175.aspx
4
26.01.2016 15:53:37