Câu trả lời:
Bài viết MSDN về thuộc tính hành động xây dựng giải thích sự khác biệt.
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.
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.
Một sự khác biệt là cách chúng được xuất bản; Các mục "Không" không được đưa vào xuất bản, các mục "Nội dung" làm; ví dụ: trên hộp thoại "Tệp ứng dụng" trên tab Xuất bản.
CopyToOutputDirectory
tập hợp với mục true
đó sẽ được xuất bản trong mộtdotnet publish
Tôi không chắc chắn 100% (tôi đã đọc mô tả MSDN về thuộc tính Build Action ) nhưng chỉ sao chép câu trả lời đó từ MSDN sang StackOverflow không trả lời hoàn toàn câu hỏi cho tôi.
Sự khác biệt của Không và Nội dung chỉ có ảnh hưởng đến các dự án Web. Đối với một dự án dòng lệnh, dự án WinForm hoặc dự án UnitTest (trong trường hợp của tôi), v.v. Không có và Nội dung không có hành vi khác nhau.
MSDN: "nhóm đầu ra dự án" hoặc "Nhóm đầu ra nội dung" chỉ các thuật ngữ được sử dụng trong dự án Web, phải không?
None
vs Content
chỉ có tác dụng cho bước xuất bản chứ không phải bước xây dựng . Đối với bước xây dựng dường như CopyToOutputDirectory
có thể được đặt trên một trong hai và điều khiển nếu tệp được sao chép bởi bước xây dựng. Cũng có vẻ kỳ lạ là các mẫu T4 mặc định được thêm dưới dạng Content
các mục và không phải None
các mục.
Trong tình huống của tôi, tệp MSBuild của tôi có ItemGroup
tài nguyên hình ảnh xuất hiện như sau:
<ItemGroup>
<Content Include="Resources\image001.png" />
<Content Include="Resources\image002.png" />
<Content Include="Resources\image003.png" />
<Content Include="Resources\image004.png" />
<None Include="Resources\image005.png" />
<None Include="Resources\image006.png" />
<None Include="Resources\image007.png" />
</ItemGroup>
Trong khi dự án của tôi đang xây dựng tốt, điều này khiến tôi tự hỏi tại sao tôi có sự pha trộn giữa các yếu tố Content
và None
loại vật phẩm trong tôi ItemGroup
. Bài viết MSDN này (dành cho Visual Studio 2010) đã cho tôi hướng dẫn mà tôi đang tìm kiếm:
Lưu ý rằng khi trình chỉnh sửa tài nguyên thêm hình ảnh, nó sẽ đặt Build Action thành Không , vì tệp .resx tham chiếu tệp hình ảnh. Khi xây dựng, hình ảnh được kéo vào tệp .resource được tạo từ tệp .resx. Sau đó, hình ảnh có thể dễ dàng được truy cập bằng cách tạo lớp tự động được gõ mạnh cho tệp .resx. Do đó, bạn không nên thay đổi cài đặt này thành Tài nguyên nhúng , vì thực hiện việc này sẽ bao gồm hình ảnh hai lần trong cụm.
Giải pháp: Với hướng dẫn này, sử dụng trình soạn thảo văn bản, tôi đã thay đổi các Content
thành phần loại mục thành None
.
Ngoài ra, để biết tổng quan về các mục MSBuild, hãy xem bài viết MSDN này .
Tôi có một dự án không chứa các mục có thể biên dịch được (nó lưu trữ html và javascript để kiểm tra đơn vị hoa nhài).
Một ngày nọ, giải pháp của tôi (có dự án nói trên) đã ngừng biên dịch với nội dung "Mục tiêu" Xây dựng "không tồn tại trong dự án".
Tôi đã thêm một bản nhập để mang vào trình biên dịch, nó hoạt động tốt trên máy của tôi nhưng không sử dụng msbuild trên máy chủ xây dựng.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Sau đó tôi đã thay đổi một dòng từ
<None Include="SpecRunner.html" />
đến
<Content Include="SpecRunner.html" />
và nó đã làm việc trên máy chủ xây dựng là tốt.
Trong trường hợp của tôi .Pubxml là một trong những tệp trong danh sách Không có . Nó không có nghĩa là để xây dựng giải pháp hoặc như một tệp tĩnh cho dự án web. Nhưng để xuất bản trang web lên Azure, các cấu hình có mặt trong này.
Theo bài viết của Microsoft, đây là các loại chính mà chúng ta thấy trong số các thẻ tệp .csproj :
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.
Các tệp nội dung không được bao gồm trong bản dựng, nhưng được bao gồm trong một ấn phẩm.
Không có tệp nào không được bao gồm trong bản dựng hoặc xuất bản, trừ khi chúng được cấu hình theo cách đó của bạn. Chẳng hạn, cài đặt "Sao chép vào thư mục đầu ra" của "Luôn luôn" hoặc "Mới hơn", sẽ khiến chúng được đưa vào cả bản dựng và xuất bản.
Content
s được thay đổi thànhNone
s. Tôi nghĩ điều đó đã xảy ra khi tôi đổi tên các tệp từ .ascx thành .cshtml khi chuyển đổi sang Dao cạo. Thay đổi chúng trở lại bằng tay đã sửa một số vấn đề triển khai tôi có. Vui mừng tôi tìm thấy điều này.