Các cài đặt hành động khác nhau của Build Build khác nhau trong các thuộc tính dự án Visual Studio là gì và chúng làm gì?


844

Đối với hầu hết các phần, bạn chỉ cần lấy bất cứ thứ gì Visual Studio đặt nó làm mặc định ... Tôi đang đề cập đến thuộc tính BuildAction cho mỗi tệp được chọn trong Solution Explorer. Có một số tùy chọn và thật khó để biết mỗi người trong số họ sẽ làm gì.

Câu trả lời:


1015
  • Không có : Tệp không được bao gồm trong nhóm đầu ra dự án và không được biên dịch trong quá trình xây dựng. Một ví dụ là một tệp văn bản có chứa tài liệu, chẳng hạn như tệp Readme.

  • Biên dịch : Tệp được biên dịch vào đầu ra bản dựng. Cài đặt này được sử dụng cho các tệp mã.

  • Nội dung : Cho phép bạn truy xuất một tệp (trong cùng thư mục với tập hợp) dưới dạng luồng qua Application.GetContentStream (URI). Để phương thức này hoạt động, nó cần một thuộc tính tùy chỉnh của AssociationAssociatedContentFile mà Visual Studio bổ sung khi bạn đánh dấu một tệp là "Nội dung"

  • Tài nguyên nhúng : Nhúng tệp vào tài nguyên tệp kê khai lắp ráp độc quyền.

  • Tài nguyên (chỉ WPF) : Nhúng tệp trong một tệp chia sẻ (bởi tất cả các tệp trong cụm có cài đặt tương tự) tài nguyên tệp kê khai lắp ráp có tên AppName.g.resours.

  • Trang (chỉ WPF) : Được sử dụng để biên dịch xamltệp vào baml. Sau bamlđó, nó được nhúng với cùng một kỹ thuật như Resource(nghĩa là có sẵn như `AppName.g.resours)

  • ApplicationDefDef (chỉ WPF) : Đánh dấu tệp XAML / lớp xác định ứng dụng của bạn. Bạn chỉ định mã phía sau với x: Class = "Namespace.ClassName" và đặt biểu mẫu / trang khởi động với StartupUri = "Window1.xaml"

  • SplashScreen (chỉ dành cho WPF) : Hình ảnh được đánh dấu SplashScreen là tự động hiển thị khi tải ứng dụng WPF, sau đó mờ dần

  • DesignData : Biên dịch các khung nhìn XAML để người dùng có thể xem trước các dữ liệu mẫu trong Visual Studio (sử dụng các loại giả)

  • DesignDataWithDesignTimeCreatableTypes : Biên dịch các khung nhìn XAML để người dùng có thể xem trước các dữ liệu mẫu trong Visual Studio (sử dụng các loại thực tế)

  • EntityDeploy : (Entity Framework) : được sử dụng để triển khai các tạo phẩm của Entity Framework

  • CodeAnalysisDixi : Một tệp XML chứa từ điển từ tùy chỉnh cho các quy tắc chính tả


9
" DesignData " được sử dụng cho "Khả năng hòa trộn", cho phép bạn thêm Dữ liệu dựa trên đánh dấu WPF, khi cài đặt chính xác được áp dụng, sau đó hiển thị tại Giờ thiết kế.
PGallagher

6
Cũng lưu ý rằng Nội dung sẽ được đưa vào khi sử dụng triển khai bằng một lần nhấp, nhưng Không có gì ngay cả khi "sao chép nếu mới hơn" được chọn.
Dax Fohl

4
Còn về Fakes, CodeAnalysisDixi và XamlAppRef thì sao?
Crono

1
@jxramos Thông tin này được lưu trong tệp dự án.
Tobias

18
Thế còn AdditionalFiles? Tôi thấy nó trong VS 2015 nhưng không thể tìm thấy tài liệu tham khảo cho điều đó.
Nhà phát triển toàn diện

111

Từ tài liệu:

Thuộc tính BuildAction cho biết Visual Studio làm gì với một tệp khi quá trình xây dựng được thực thi. BuildAction có thể có một trong một số giá trị:

Không có - Tệp không được bao gồm trong nhóm đầu ra dự án và không được biên dịch trong quá trình xây dựng. Một ví dụ là một tệp văn bản có chứa tài liệu, chẳng hạn như tệp Readme.

Biên dịch - Tệp được biên dịch vào đầu ra bản dựng. Cài đặt này được sử dụng cho các tệp mã.

Nội dung - Tệp không được biên dịch, nhưng được bao gồm trong nhóm đầu ra Nội dung. Ví dụ: cài đặt này là giá trị mặc định cho .htm hoặc loại tệp Web khác.

Tài nguyên nhúng - Tệp này được nhúng trong đầu ra xây dựng dự án chính dưới dạng DLL hoặc tệp thực thi. Nó thường được sử dụng cho các tệp tài nguyên.


1
Hấp dẫn! Tôi đã cài đặt VS2008, tôi tự hỏi tại sao chúng không xuất hiện trong tài liệu của tôi?
Paul Batum

Tài nguyên PRI thì sao?
Yawar

1
@PaulBatum bạn có thể chèn tham chiếu cho định nghĩa được trích dẫn này không?
Rajan Prasad

@Raymond 232: Trích dẫn định nghĩa gì?
Peter Mortensen

1
@PaulBatum: Có thực sự tài liệu tham khảo sẽ tốt đẹp. Câu trả lời bắt đầu bằng "Từ tài liệu" vì vậy một liên kết đến tài liệu này sẽ được đánh giá cao.
Marc

35

Trang - Đưa tệp XAML được chỉ định và biên dịch vào BAML và nhúng đầu ra đó vào luồng tài nguyên được quản lý cho tập hợp của bạn (cụ thể là AssociationName.g.resours), ngoài ra, nếu bạn có các thuộc tính phù hợp trên phần tử XAML gốc trong tệp, nó sẽ tạo một tệp blah.g.cs, sẽ chứa một phần của "codebehind" cho trang đó; về cơ bản, điều này liên quan đến một cuộc gọi đến BAML goop để hydrat hóa tệp vào bộ nhớ và để đặt bất kỳ biến thành viên nào trong lớp của bạn thành các mục hiện được tạo (ví dụ: nếu bạn đặt x: Name = "foo" trên một mục , bạn sẽ có thể làm điều này.foo.Background = Purple; hoặc tương tự.

ApplicationDefDef - tương tự như Trang, ngoại trừ nó đi vào furthur và xác định điểm vào cho ứng dụng của bạn sẽ khởi tạo đối tượng ứng dụng của bạn, gọi chạy trên nó, sau đó sẽ khởi tạo kiểu được đặt bởi thuộc tính StartupUri và sẽ cung cấp cho luồng chính của bạn .

Ngoài ra, để rõ ràng, tổng thể câu hỏi này được đặt trong tập kết quả của nó; bất cứ ai cũng có thể định nghĩa BuildActions bổ sung chỉ bằng cách xây dựng Nhiệm vụ MSBuild. Nếu bạn xem trong thư mục% systemroot% \ Microsoft.net \ framework \ v {version} \ và xem tệp Microsoft.Common.target, bạn sẽ có thể giải mã được nhiều hơn (ví dụ, với VS Pro trở lên, có một hành động "Bóng tối" cho phép bạn tạo các bộ truy cập riêng để trợ giúp kiểm tra các lớp riêng.


Tôi hy vọng bạn không bận tâm rằng tôi đã sao chép các phần câu trả lời của bạn vào câu trả lời của Gishu, để có được câu trả lời tham khảo đầy đủ hơn.
Ian Boyd

32

VS2010 có một thuộc tính cho 'Xây dựng hành động' và cũng cho 'Sao chép vào thư mục đầu ra'. Vì vậy, một hành động 'Không' vẫn sẽ sao chép vào thư mục bản dựng nếu thuộc tính sao chép được đặt thành 'Sao chép nếu mới hơn' hoặc 'Luôn luôn sao chép'.

Vì vậy, một hành động xây dựng của 'Nội dung' nên được dành riêng để chỉ ra nội dung bạn sẽ truy cập thông qua 'Application.GetContentStream'

Tôi đã sử dụng cài đặt 'Xây dựng hành động' của 'Không' và cài đặt 'Sao chép vào đầu ra Direcotry' của 'Sao chép nếu mới hơn' cho một số .config được liên kết bên ngoài.

G.


Cám ơn vì cái này. Tuy nhiên tôi hơi bối rối về cách thức / nơi tôi làm điều này. Lý tưởng nhất là tôi chỉ muốn "bao gồm" thư mục "Tải lên" của mình và tất cả các tệp con sẽ được đưa vào xuất bản.
SamJolly

Điều này áp dụng cho các thuộc tính của một mục riêng lẻ trong trình thám hiểm đối tượng, bạn sẽ thấy trong tab thuộc tính khi bạn chọn một mục hoặc nhấp chuột phải và chọn thuộc tính. Đối với những gì bạn muốn, tôi nghĩ bạn chỉ cần thêm mục hiện có khi bạn nhấp chuột phải vào dự án. BTW, nút lưu của hộp thoại thêm mục hiện có thả xuống cho phép bạn thêm nó dưới dạng liên kết. Bạn vẫn có thể phải thêm các mục trong thư mục.
Gerard ONeill

5

Trong VS2008, mục tài liệu có vẻ hữu ích nhất là:

Windows Presentation Foundation Xây dựng ứng dụng WPF (WPF)

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

ApplicationDefDef Xác định tệp đánh dấu XAML có chứa định nghĩa ứng dụng (tệp đánh dấu XAML có thành phần gốc là Ứng dụng). ApplicationDefDef là bắt buộc khi Cài đặt là đúng và OutputType là Winexe. Một ứng dụng WPF và do đó, một dự án MSBuild chỉ có thể có một ApplicationDefDef.

Trang Xác định tệp đánh dấu XAML có nội dung được chuyển đổi sang định dạng nhị phân và được biên dịch thành một cụm. Các mục trang thường được triển khai cùng với một lớp mã phía sau.

Các mục Trang phổ biến nhất là các tệp XAML có các thành phần cấp cao nhất là một trong những điều sau đây:

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

Tài nguyên Xác định tệp tài nguyên được biên dịch thành tập hợp ứng dụng. Như đã đề cập trước đó, UICARM xử lý các mục Tài nguyên.

Nội dung Xác định tệp nội dung được phân phối cùng với ứng dụng. Siêu dữ liệu mô tả tệp nội dung được biên dịch vào ứng dụng (sử dụng AssociationAssociatedContentFileAttribution).


4

Làm thế nào về trang này từ Microsoft Connect (giải thích các loại DesignData và DesignDataWithDesignTimeCreatableTypes). Trích dẫn:

Phần sau đây mô tả hai Tác vụ Xây dựng cho tệp Dữ liệu Mẫu.

Các tệp .xaml dữ liệu mẫu phải được chỉ định một trong các Tác vụ xây dựng bên dưới:

DesignData : Các kiểu dữ liệu mẫu sẽ được tạo thành các kiểu giả. Sử dụng Hành động xây dựng này khi các kiểu dữ liệu mẫu không thể tạo hoặc có các thuộc tính chỉ đọc mà bạn muốn xác định các giá trị dữ liệu mẫu cho.

DesignDataWithDesignTimeCreatableTypes : Các kiểu dữ liệu mẫu sẽ được tạo bằng các kiểu được xác định trong tệp dữ liệu mẫu. Sử dụng Build Action này khi các kiểu dữ liệu mẫu có thể được tạo bằng cách sử dụng hàm tạo trống mặc định của chúng.

Không quá vô cùng mệt mỏi, nhưng ít nhất nó cũng cho một gợi ý. Hướng dẫn MSDN này cũng đưa ra một số ý tưởng. Tôi không biết liệu các Tác vụ Xây dựng này có được áp dụng cho các dự án không phải là Silverlight hay không.


4
  • Fakes: Một phần của Khung Microsoft Fakes (Đơn vị kiểm tra đơn vị). Không có sẵn trên tất cả các phiên bản Visual Studio. Fakes được sử dụng để hỗ trợ kiểm thử đơn vị trong dự án của bạn, giúp bạn cách ly mã bạn đang kiểm tra bằng cách thay thế các phần khác của ứng dụng bằng sơ khai hoặc miếng chêm. Xem thêm tại đây: https://msdn.microsoft.com/en-us/l Library / hh549175.aspx
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.