По большей части вы просто берете то, что Visual Studio устанавливает для вас по умолчанию ... Я имею в виду BuildAction для каждого файла, выбранного в обозревателе решений. Есть несколько вариантов, и трудно понять, что каждый из них будет делать.
Каковы различные параметры действия сборки в свойствах проекта Visual Studio и что они делают?
Ответы (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-файл, содержащий пользовательский словарь слов для правила правописания < / а>
AdditionalFiles
? Я вижу это в VS 2015, но не могу найти ссылку на это.
- person Holistic Developer; 06.01.2017
AdditionalFiles
описаны в заголовке stackoverflow.com/questions/40029629/
- person UweBaemayr; 25.02.2019
Из документации:
Свойство BuildAction указывает, что Visual Studio делает с файлом при выполнении сборки. BuildAction может иметь одно из нескольких значений:
Нет - файл не входит в группу вывода проекта и не компилируется в процессе сборки. Примером может служить текстовый файл, содержащий документацию, например файл Readme.
Компилировать - файл компилируется в выходные данные сборки. Этот параметр используется для файлов кода.
Содержимое - файл не компилируется, но включается в группу вывода содержимого. Например, этот параметр является значением по умолчанию для файла .htm или другого типа веб-файла.
Встроенный ресурс - этот файл встроен в основной вывод сборки проекта как DLL или исполняемый файл. Обычно он используется для файлов ресурсов.
Страница - принимает указанный файл 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 и выше, есть действие «Тень», которое позволяет вам создавать частные методы доступа для помощи в модульном тестировании частных классов.
VS2010 имеет свойство для «Действия сборки», а также для «Копировать в выходной каталог». Таким образом, действие «Нет» по-прежнему будет копироваться в каталог сборки, если для свойства копирования установлено значение «Копировать, если новее» или «Копировать всегда».
Таким образом, действие сборки Content должно быть зарезервировано для указания содержимого, к которому вы будете получать доступ через Application.GetContentStream.
Я использовал настройку «Действие сборки» для «Нет» и настройку «Копировать в директорию вывода» для «Копировать, если новее» для некоторых подключаемых извне .config.
G.
В 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).
Как насчет этой страницы из Microsoft Connect (с объяснением типов DesignData и DesignDataWithDesignTimeCreatableTypes) . Цитата:
Ниже описаны два действия сборки для файлов образцов данных.
XML-файлам с образцами данных должно быть назначено одно из следующих действий сборки:
DesignData: Примеры типов данных будут созданы как поддельные. Используйте это действие сборки, когда образцы типов данных не могут быть созданы или имеют свойства только для чтения, для которых вы хотите определить значения образцов данных.
DesignDataWithDesignTimeCreatableTypes: Образцы типов данных будут созданы с использованием типов, определенных в образце файла данных. Используйте это действие сборки, когда образцы данных могут быть созданы с использованием их пустого конструктора по умолчанию.
Не так невероятно исчерпывающе, но, по крайней мере, дает намек. Это пошаговое руководство по MSDN также дает некоторые идеи . Я не знаю, применимы ли эти действия сборки и к проектам, не относящимся к Silverlight.
- Подделки: часть Microsoft Fakes (изоляция модульных тестов). Доступно не во всех версиях Visual Studio. Подделки используются для поддержки модульного тестирования в вашем проекте, помогая изолировать тестируемый код, заменяя другие части приложения заглушками или прокладками. Подробнее здесь: https://msdn.microsoft.com/en-us/library/hh549175.aspx
Действия сборки управляют типом элемента MSBuild для каждого элемента в проекте. Например, действие сборки Compile
на MyClass.cs
означает что-то вроде этого в вашем .csproj
файле:
<ItemGroup>
<Compile>MyClass.cs</Compile>
</ItemGroup>
Типы элементов условно имеют определенное значение. Распространенными типами являются Compile
, Content
и None
, но есть и другие.
Например, файлы .editorconfig
имеют собственный тип элемента (EditorConfigFiles
). Файлы можно передать анализаторам, пометив их дополнительным файлом анализатора C # (AdditionalFiles
).
Вы также можете определите свои собственные типы элементов в своем проекте для собственных целей с помощью AvailableItemName
. Например:
<ItemGroup>
<AvailableItemName Include="Foo" />
</ItemGroup>
Это произведет: