Каковы различные параметры действия сборки в свойствах проекта Visual Studio и что они делают?

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


person Gishu    schedule 28.09.2008    source источник


Ответы (8)


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

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

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

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

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

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

  • ApplicationDefinition (только WPF): отметьте XAML / файл класса, который определяет ваше приложение. Вы указываете код программной части с помощью 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-файл, содержащий пользовательский словарь слов для правила правописания < / а>

person Gishu    schedule 28.09.2008
comment
@Gishu: страница предназначена для определенного типа файла XAML, но большинство файлов XAML в любом случае подпадают под него. - person user7116; 28.09.2008
comment
DesignData используется для смешивания, позволяя добавлять данные на основе разметки WPF, которые, когда применяются правильные настройки, затем отображаются во время разработки. - person PGallagher; 30.01.2013
comment
Также обратите внимание, что Контент будет включен при использовании развертывания в один щелчок, но Нет, даже если копировать, если выбрано более новое. - person Dax Fohl; 23.10.2013
comment
А как насчет фейков, CodeAnalysisDictionary и XamlAppRef? - person Crono; 20.11.2013
comment
AssemblyAssociatedContentFile предназначен только для проектов WPF, поэтому все еще немного неясно, что такое Content Action и Content output group ... - person Frode Nilsen; 17.08.2016
comment
А что насчет AdditionalFiles? Я вижу это в VS 2015, но не могу найти ссылку на это. - person Holistic Developer; 06.01.2017
comment
Также полезно отметить, что вы можете настроить собственное действие сборки: blogs.msdn.microsoft.com/msbuild/2005/10/06/ - person dier; 19.12.2017
comment
AdditionalFiles описаны в заголовке stackoverflow.com/questions/40029629/ - person UweBaemayr; 25.02.2019

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

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

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

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

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

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

person Paul Batum    schedule 28.09.2008
comment
Интересно! У меня установлен VS2008, интересно, почему они не появились в моей документации? - person Paul Batum; 04.10.2008
comment
А как насчет ресурса PRI? - person Yawar; 22.05.2015
comment
@PaulBatum, вы можете вставить ссылку на это цитируемое определение? - person Rajan Prasad; 16.11.2015
comment
@Raymond 232: Какое цитируемое определение? - person Peter Mortensen; 16.05.2016
comment
@PaulBatum: Да, действительно, ссылка была бы неплохой. Ответ начинается с «Из документации», поэтому будет приветствоваться ссылка на эту документацию. - person Marc; 13.02.2017
comment
Друзья мои, это был ответ 2008 года. Тогда документации не было в сети - она ​​была установлена ​​на моем компьютере! Дай мне передохнуть :) - person Paul Batum; 19.05.2018

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

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

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

person Dominic Hopton    schedule 28.09.2008
comment
Надеюсь, вы не возражаете, что я скопировал части вашего ответа в ответ Гишу, чтобы получить более полный справочный ответ. - person Ian Boyd; 16.02.2012

VS2010 имеет свойство для «Действия сборки», а также для «Копировать в выходной каталог». Таким образом, действие «Нет» по-прежнему будет копироваться в каталог сборки, если для свойства копирования установлено значение «Копировать, если новее» или «Копировать всегда».

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

Я использовал настройку «Действие сборки» для «Нет» и настройку «Копировать в директорию вывода» для «Копировать, если новее» для некоторых подключаемых извне .config.

G.

person Gerard ONeill    schedule 09.04.2013
comment
Спасибо за это. Однако я немного смущен тем, как / где я это делаю. В идеале я хотел бы просто включить свою папку загрузки, и все дочерние файлы будут включены в публикацию. - person SamJolly; 04.09.2013
comment
Это относится к свойствам отдельного элемента в проводнике объектов, которые вы увидите на вкладке свойств, когда выберете элемент или щелкните правой кнопкой мыши и выберите свойства. Для того, что вы хотите, я думаю, вам просто нужно добавить существующий элемент, щелкнув проект правой кнопкой мыши. Кстати, кнопка сохранения в диалоговом окне добавления существующего элемента имеет раскрывающийся список, который позволяет вам добавить его в качестве ссылки. Возможно, вам все равно придется добавить элементы в папку. - person Gerard ONeill; 04.09.2013

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

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

ms-help: //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, содержимое которого преобразовано в двоичный формат и скомпилировано в сборку. Элементы страницы обычно реализуются вместе с классом кода программной части.

Наиболее распространенными элементами страницы являются файлы 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).

person James Moore    schedule 31.03.2009

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

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

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

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

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

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

person Per Lundberg    schedule 10.10.2013
comment
Первая ссылка в ответе устарела - Microsoft Connect больше не работает. - person Pang; 24.11.2020

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

Действия сборки управляют типом элемента MSBuild для каждого элемента в проекте. Например, действие сборки Compile на MyClass.cs означает что-то вроде этого в вашем .csproj файле:

<ItemGroup>
  <Compile>MyClass.cs</Compile>
</ItemGroup>

Типы элементов условно имеют определенное значение. Распространенными типами являются Compile, Content и None, но есть и другие.

Например, файлы .editorconfig имеют собственный тип элемента (EditorConfigFiles). Файлы можно передать анализаторам, пометив их дополнительным файлом анализатора C # (AdditionalFiles).

Вы также можете определите свои собственные типы элементов в своем проекте для собственных целей с помощью AvailableItemName. Например:

<ItemGroup>
  <AvailableItemName Include="Foo" />
</ItemGroup>

Это произведет:

введите описание изображения здесь

person Drew Noakes    schedule 13.05.2021