Jakie są różne ustawienia „Kompiluj akcję” we właściwościach projektu Visual Studio i co robią?

844

W przeważającej części po prostu bierzesz wszystko, co Visual Studio ustawia dla Ciebie jako domyślne ... Mam na myśli właściwość BuildAction dla każdego pliku wybranego w Eksploratorze rozwiązań. Istnieje wiele opcji i trudno jest ustalić, co zrobi każda z nich.

Gishu
źródło

Odpowiedzi:

1015
  • Brak : plik nie znajduje się w grupie wyników projektu i nie jest kompilowany w procesie kompilacji. Przykładem jest plik tekstowy zawierający dokumentację, na przykład plik Readme.

  • Kompilacja : plik jest kompilowany do wyjścia kompilacji. To ustawienie służy do plików kodu.

  • Treść : Umożliwia pobranie pliku (w tym samym katalogu co zestaw) jako strumienia za pośrednictwem Application.GetContentStream (URI). Aby ta metoda działała, potrzebuje niestandardowego atrybutu AssemblyAssociatedContentFile, który program Visual Studio z wdziękiem dodaje, gdy oznaczysz plik jako „Treść”

  • Zasób osadzony : Osadza plik w wyłącznym zasobie manifestu zespołu.

  • Zasób (tylko WPF) : Osadza plik we współużytkowanym (przez wszystkie pliki w zestawie z podobnymi ustawieniami) zasobu manifestu zestawu o nazwie AppName.g.resources.

  • Strona (tylko WPF) : Używany do kompilacji xamlpliku baml. Następnie bamljest osadzany przy użyciu tej samej techniki co Resource(tj. Dostępny jako `AppName.g.resources)

  • ApplicationDefinition (tylko WPF) : zaznacz plik XAML / class, który definiuje twoją aplikację. Podaj kod za pomocą x: Class = "Namespace.ClassName" i ustaw formularz / stronę startową za pomocą StartupUri = "Window1.xaml"

  • SplashScreen (tylko WPF) : Obraz oznaczony jako SplashScreen jest wyświetlany automatycznie po załadowaniu aplikacji WPF, a następnie zanika

  • DesignData : Kompiluje viewmodels XAML, dzięki czemu można kontrolować podgląd danych użytkownika w przykładowych danych w Visual Studio (używa próbnych typów)

  • DesignDataWithDesignTimeCreatableTypes : Kompiluje viewmodels XAML, dzięki czemu można kontrolować podgląd użytkowników z przykładowymi danymi w Visual Studio (używa rzeczywistych typów)

  • EntityDeploy : (Entity Framework) : służy do wdrażania artefaktów Entity Framework

  • CodeAnalysisDictionary : plik XML zawierający niestandardowy słownik słów dla reguł pisowni

Gishu
źródło
9
DesignData ” służy do „mieszalności”, umożliwiając dodanie danych opartych na narzutach WPF, co oznacza, że ​​po zastosowaniu właściwych ustawień, a następnie pokazane w czasie projektowania.
PGallagher
6
Należy również pamiętać, że zawartość zostanie uwzględniona podczas wdrażania za pomocą jednego kliknięcia, ale Żaden nie będzie nawet, jeśli wybrano opcję „skopiuj, jeśli nowszy”.
Dax Fohl
4
Co z podróbkami, CodeAnalysisDictionary i XamlAppRef?
Crono,
1
@jxramos Informacje te są zapisywane w pliku projektu.
Tobias
18
Co AdditionalFiles? Widzę to w VS 2015, ale nie mogłem znaleźć odniesienia do tego.
Holistic Developer
111

Z dokumentacji:

Właściwość BuildAction wskazuje, co Visual Studio robi z plikiem podczas kompilacji. BuildAction może mieć jedną z kilku wartości:

Brak - plik nie znajduje się w grupie wyników projektu i nie jest kompilowany w procesie kompilacji. Przykładem jest plik tekstowy zawierający dokumentację, na przykład plik Readme.

Kompiluj - plik jest kompilowany do wyjścia kompilacji. To ustawienie służy do plików kodu.

Treść - plik nie jest kompilowany, ale należy do grupy wyjściowej Content. Na przykład to ustawienie jest wartością domyślną dla pliku .htm lub innego rodzaju pliku internetowego.

Zasób osadzony - ten plik jest osadzony w danych wyjściowych kompilacji projektu głównego jako biblioteka DLL lub plik wykonywalny. Zwykle jest używany do plików zasobów.

Paul Batum
źródło
1
Ciekawy! Mam zainstalowany VS2008, zastanawiam się, dlaczego nie pojawiły się w mojej dokumentacji?
Paul Batum
Co z zasobem PRI?
Yawar
1
@PaulBatum czy możesz wstawić odniesienie do tej cytowanej definicji?
Rajan Prasad
@Raymond 232: Jaka cytowana definicja?
Peter Mortensen
1
@PaulBatum: Tak, rzeczywiście, odniesienie byłoby miłe. Odpowiedź zaczyna się od „Z dokumentacji”, więc mile widziane byłoby łącze do tej dokumentacji.
Marc
35

Strona - Pobiera określony plik XAML i kompiluje do BAML, i osadza dane wyjściowe w strumieniu zasobów zarządzanych dla twojego zestawu (w szczególności AssemblyName.g.resources). Dodatkowo, jeśli masz odpowiednie atrybuty w głównym elemencie XAML w utworzy plik blah.g.cs, który będzie zawierał częściową klasę „codebehind” dla tej strony; polega to w zasadzie na wywołaniu goopu BAML w celu ponownego uwodnienia pliku do pamięci i ustawienia dowolnych zmiennych składowych klasy na nowo utworzone elementy (np. jeśli umieścisz x: Name = "foo" na elemencie , będziesz mógł to zrobić. foo.Background = fioletowy; lub podobny.

ApplicationDefinition - podobny do Page, z tą różnicą, że idzie on w krok dalej i definiuje punkt wejścia dla aplikacji, który utworzy instancję obiektu aplikacji, wywoła wywołanie na nim, która następnie utworzy instancję typu ustawionego przez właściwość StartupUri i da okno główne .

Ponadto, dla jasności, to pytanie jest nieskończone w zestawie wyników; każdy może zdefiniować dodatkowe BuildActions po prostu budując Zadanie MSBuild. Jeśli zajrzysz do katalogu% systemroot% \ Microsoft.net \ framework \ v {wersja} \ i spojrzysz na plik Microsoft.Common.targets, powinieneś być w stanie odszyfrować znacznie więcej (na przykład w VS Pro i nowszych wersjach, dostępna jest akcja „Shadow”, która pozwala generować prywatne akcesoria, aby pomóc w testowaniu jednostek prywatnych klas.

Dominic Hopton
źródło
Mam nadzieję, że nie masz nic przeciwko temu, że skopiowałem części twojej odpowiedzi do odpowiedzi Gishu, aby uzyskać pełniejszą odpowiedź referencyjną.
Ian Boyd
32

VS2010 ma właściwość „Kompiluj akcję”, a także „Kopiuj do katalogu wyjściowego”. Zatem działanie „Brak” będzie nadal kopiowane do katalogu kompilacji, jeśli właściwość kopiowania jest ustawiona na „Kopiuj, jeśli nowsze” lub „Zawsze kopiuj”.

Dlatego należy zarezerwować akcję kompilacji „Treści”, aby wskazać treść, do której będziesz uzyskiwać dostęp za pośrednictwem „Application.GetContentStream”

Użyłem ustawienia „Build Action” „None” i „Copy to Output Direcotry” ustawienia „Copy if Newer” dla niektórych zewnętrznie połączonych plików .config.

SOL.

Gerard ONeill
źródło
Dzięki za to. Jednak jestem trochę zdezorientowany, jak / gdzie to robię. Idealnie chciałbym po prostu „dołączyć” mój folder „Prześlij”, a wszystkie pliki potomne zostaną uwzględnione w publikacji.
SamJolly,
Dotyczy to właściwości pojedynczego elementu w eksploratorze obiektów, który zobaczysz na karcie właściwości po wybraniu elementu lub kliknięciu prawym przyciskiem myszy i wybraniu właściwości. Jeśli chcesz, myślę, że musisz dodać istniejący element po kliknięciu projektu prawym przyciskiem myszy. BTW, przycisk zapisywania okna dialogowego dodawania istniejącego elementu ma menu rozwijane, które pozwala dodać go jako łącze. Nadal może być konieczne dodanie elementów w folderze.
Gerard ONeill,
5

W VS2008 najbardziej przydatna jest pozycja doc:

Windows Presentation Foundation Budowanie aplikacji WPF (WPF)

ms-help: //MS.VSCC.v90/MS.MSDNQTR.v90.en/wpf_conceptual/html/a58696fd-bdad-4b55-9759-136dfdf8b91c.htm

ApplicationDefinition Identyfikuje plik znaczników XAML, który zawiera definicję aplikacji (plik znaczników XAML, którego elementem głównym jest Aplikacja). ApplicationDefinition jest obowiązkowa, gdy instalacja jest prawdą, a OutputType to winexe. Aplikacja WPF, a co za tym idzie projekt MSBuild, może mieć tylko jedną definicję aplikacji.

Strona Identyfikuje plik znaczników XAML, którego treść jest konwertowana na format binarny i kompilowana w zestawie. Elementy strony są zwykle implementowane w połączeniu z klasą kodową.

Najczęstsze elementy strony to pliki XAML, których elementami najwyższego poziomu są:

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

Zasób Identyfikuje plik zasobów, który jest kompilowany w zestawie aplikacji. Jak wspomniano wcześniej, UICulture przetwarza elementy zasobów.

Treść Identyfikuje plik treści dystrybuowany wraz z aplikacją. Metadane opisujące plik zawartości są kompilowane w aplikacji (przy użyciu AssemblyAssociatedContentFileAttribute).

James Moore
źródło
4

Co powiesz na tę stronę z Microsoft Connect (wyjaśniającą typy DesignData i DesignDataWithDesignTimeCreatableTypes). Cytowanie:

Poniżej opisano dwa działania kompilacji dla plików przykładowych danych.

Przykładowym plikom .xaml należy przypisać jedną z poniższych akcji kompilacji:

DesignData : Przykładowe typy danych zostaną utworzone jako fałszywe typy. Użyj tej akcji kompilacji, gdy przykładowe typy danych nie są możliwe do utworzenia lub mają właściwości tylko do odczytu, dla których chcesz zdefiniować przykładowe wartości danych.

DesignDataWithDesignTimeCreatableTypes : Przykładowe typy danych zostaną utworzone przy użyciu typów zdefiniowanych w przykładowym pliku danych. Użyj tej akcji kompilacji, gdy przykładowe typy danych można tworzyć przy użyciu ich domyślnego pustego konstruktora.

Nie tak niewiarygodnie wyczerpujący, ale przynajmniej daje wskazówkę. Ten przewodnik MSDN daje także kilka pomysłów. Nie wiem, czy te działania kompilacji mają zastosowanie również do projektów innych niż Silverlight.

Per Lundberg
źródło
4
  • Fake: część frameworka Microsoft Fakes (Unit Test Isolation). Niedostępne we wszystkich wersjach programu Visual Studio. Podróbki są używane do wspierania testów jednostkowych w twoim projekcie, pomagając w izolowaniu testowanego kodu, zastępując inne części aplikacji kodami pośredniczącymi lub podkładkami. Więcej tutaj: https://msdn.microsoft.com/en-us/library/hh549175.aspx
Jorge Garcia
źródło