Каковы различные настройки «Build action» в свойствах проекта Visual Studio и что они делают? - PullRequest
818 голосов
/ 28 сентября 2008

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

Ответы [ 7 ]

975 голосов
/ 28 сентября 2008
  • Нет : файл не входит в группу вывода проекта и не компилируется в процессе сборки. Примером является текстовый файл, содержащий документацию, например файл 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-файл, содержащий словарь пользовательских слов для правил правописания

107 голосов
/ 28 сентября 2008

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

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

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

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

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

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

34 голосов
/ 28 сентября 2008

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

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

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

29 голосов
/ 10 апреля 2013

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

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

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

G.

5 голосов
/ 31 марта 2009

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

Page Определяет файл разметки 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).

4 голосов
/ 26 января 2016
  • Fakes: Часть платформы Microsoft Fakes (модульный тест изоляции). Доступно не во всех версиях Visual Studio. Подделки используются для поддержки модульного тестирования в вашем проекте, помогая вам изолировать код, который вы тестируете, заменяя другие части приложения заглушками или прокладками. Больше здесь: https://msdn.microsoft.com/en-us/library/hh549175.aspx
4 голосов
/ 10 октября 2013

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

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

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

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

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

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

...