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


844

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

Ответы:


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


9
« DesignData » используется для «Blendability», позволяя вам добавить данные на основе разметки WPF, которые при правильных настройках затем отображаются во время разработки.
PGallagher

6
Также обратите внимание, что содержимое будет включено при использовании развертывания одним щелчком, но ничего не будет, даже если выбрано «копировать, если новее».
Дакс Фол

4
Что насчет подделок, CodeAnalysisDictionary и XamlAppRef?
Crono

1
@jxramos Эта информация сохраняется в файле проекта.
Тобиас

18
Как насчет AdditionalFiles? Я вижу это в VS 2015, но не могу найти ссылку для этого.
Целостный разработчик

111

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

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

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

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

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

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


1
Интересно! У меня установлена ​​VS2008, интересно, почему они не появились в моей документации?
Пол Батум

А как насчет ресурса PRI?
Явар

1
@PaulBatum Вы можете вставить ссылку на это цитируемое определение?
Раджан Прасад

@Raymond 232: какое приведенное определение?
Питер Мортенсен

1
@PaulBatum: Да, действительно, ссылка будет хорошей. Ответ начинается с «Из документации», поэтому ссылка на эту документацию приветствуется.
Марк

35

Страница - принимает указанный файл 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», которое позволяет генерировать частные средства доступа, чтобы помочь с модульным тестированием частных классов.


Надеюсь, вы не возражаете, что я скопировал части вашего ответа в ответ Гишу, чтобы получить более полный справочный ответ.
Ян Бойд

32

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

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

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

Г.


Спасибо за это. Однако я немного смущен тем, как и где я это делаю. В идеале я хотел бы просто «включить» мою папку «Upload», и все дочерние файлы будут включены в публикацию.
SamJolly

Это относится к свойствам отдельного элемента в проводнике объектов, которые вы увидите на вкладке свойств при выборе элемента или щелчке правой кнопкой мыши и выборе свойств. Для того, что вы хотите, я думаю, что вам просто нужно добавить существующий элемент, когда вы щелкните правой кнопкой мыши по проекту. Кстати, кнопка сохранения диалога добавления существующего элемента имеет выпадающий список, который позволяет добавить его в качестве ссылки. Возможно, вам все еще придется добавить элементы в папку.
Джерард ONeill

5

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


4

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

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

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

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

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

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


4
  • Fakes: часть платформы Microsoft Fakes (модульный тест изоляции). Доступно не во всех версиях Visual Studio. Подделки используются для поддержки модульного тестирования в вашем проекте, помогая вам изолировать код, который вы тестируете, заменяя другие части приложения заглушками или прокладками. Подробнее здесь: https://msdn.microsoft.com/en-us/library/hh549175.aspx
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.