Які існують різні параметри «Створення дії» у властивостях проекту 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
Також зауважте, що Вміст буде включено при використанні розгортання одним клацанням, але None навіть не буде, якщо вибрано "Копіювати, якщо новіше".
Дакс Фол

4
А як щодо фактів, CodeAnalysisDictionary та XamlAppRef?
Кроно

1
@jxramos Ця інформація зберігається у файлі проекту.
Тобіас

18
Про що AdditionalFiles? Я бачу це у VS 2015, але не можу знайти посилання на це.
Цілісний розробник

111

З документації:

Властивість BuildAction вказує, що Visual Studio робить з файлом, коли виконується збірка. BuildAction може мати одне з декількох значень:

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

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

Зміст - файл не компілюється, але входить у групу вихідних даних вмісту. Наприклад, це налаштування є значенням за замовчуванням для .htm або іншого типу веб-файлів.

Вбудований ресурс - Цей файл вбудований у основний вихід проекту збірки як DLL або виконуваний файл. Зазвичай використовується для файлів ресурсів.


1
Цікаво! У мене встановлений VS2008, цікаво, чому вони не відображалися в моїй документації?
Пол Батум

Що з ресурсом PRI?
Явар

1
@PaulBatum Ви можете вставити посилання на це цитоване визначення?
Раджан Прасад

@Raymond 232: Що цитується визначення?
Пітер Мортенсен

1
@PaulBatum: Так, справді посилання було б непоганим. Відповідь починається з "З документації", тому посилання на цю документацію будуть вдячні.
Марк

35

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

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

Крім того, щоб бути зрозумілим, це питання в цілому є надзвичайним в його наборі результатів; кожен може визначити додаткові BuildActions, просто створивши MSBuild Task. Якщо ви заглянете в каталог% systemroot% \ Microsoft.net \ Framework \ v {версія} \ і перегляньте файл Microsoft.Common.targets, ви зможете розшифрувати ще багато інших (наприклад, з VS Pro і вище, є дія "Тінь", яка дозволяє генерувати приватні користувачі, щоб допомогти з тестуванням одиничних приватних класів.


Я сподіваюся, ви не заперечуєте, що я скопіював частини вашої відповіді у відповідь Гішу, щоб отримати більш повну відповідь.
Ян Бойд

32

VS2010 має властивість для 'Build Action', а також для 'Copy to Output Directory'. Отже, дія "None" все одно буде копіюватися в каталог збірки, якщо для властивості копіювання встановлено значення "Copy if Newer" або "Copy Always".

Отже, дія збірки "Вміст" має бути зарезервована, щоб вказати вміст, до якого ви отримаєте доступ через "Application.GetContentStream"

Я використав налаштування "Дія збірки" параметра "Немає" та "Копіювати у вихідний напрямок" налаштування "Копіювати, якщо новіше" для деяких зовнішньо пов'язаних .config включає.

Г.


Дякую за це Однак я трохи розгублений, як / де я це роблю. В ідеалі я хотів би просто "включити" свою папку "Завантажити", і всі дочірні файли будуть включені до публікації.
SamJolly

Це стосується властивостей окремого елемента в Explorer Explorer, які ви побачите на вкладці властивостей, коли ви вибираєте елемент або клацніть правою кнопкою миші та вибираєте властивості. Для того, що ви хочете, я думаю, що вам просто потрібно додати існуючий елемент, клацнувши правою кнопкою миші проект. BTW, кнопка збереження діалогового вікна існуючого елемента має спадне меню, що дозволяє додавати його як посилання. Можливо, вам доведеться додати елементи в папці.
Джерард ONeill

5

У VS2008 документ, який видається найбільш корисним, є:

Фонд презентацій Windows Створення програми 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 є істинним, а 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).


4

Як щодо цієї сторінки від Microsoft Connect (пояснення типів DesignData та DesignDataWithDesignTimeCreatableTypes). Цитування:

Далі описано два дії зі збирання файлів зразкових даних.

Зразкам файлів .xaml даних потрібно призначити одну з наведених нижче дій збірки:

DesignData : зразкові типи даних будуть створюватися як штучні типи. Використовуйте цю дію побудови, коли типи даних зразка не можуть бути створені або мають властивості лише для читання, для яких потрібно визначити значення зразкових даних.

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

Не настільки неймовірно вичерпно, але це принаймні дає підказку. Цей посібник MSDN також дає деякі ідеї. Я не знаю, чи застосовуються ці дії зі збирання і для проектів, що не є Silverlight.


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