Trong tệp .csproj, <Không bao gồm = Không có lỗi nào?


137

Thế nào là

<None Include="C:\foo.bar" />

khác với

<Content Include="C:\foo.bar" />

?


7
Tôi đã có một vài Contents được thay đổi thành Nones. 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.
Chris

Câu trả lời:


135

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.


5
Cảm ơn, tôi đã gặp khó khăn trong việc định vị tài liệu tham khảo này.
Emmett

Hữu ích, nhưng tại sao lại có một mục "Không", nếu tập tin không được đưa vào đầu ra? Vấn đề ở đây là gì?
JimH44

1
@ JimH44 <Không> các mục thường được sử dụng để sao chép cụ thể các tệp vào thư mục đầu ra, mặc dù chúng không nằm trong nhóm đầu ra theo mặc định . Nếu bạn chọn "Sao chép vào thư mục đầu ra" -> "Luôn luôn sao chép" cho tệp <Không>, điều này sẽ khiến nó bị sao chép và bạn sẽ thấy mục nhập được thêm vào tệp .csproj của dự án sẽ có mục <Không> cho các tập tin.
Trình biên dịch dễ thấy

3
Vậy thì có gì khác biệt giữa tệp <Không> với "Sao chép vào thư mục đầu ra" -> "Sao chép luôn" và tệp <Nội dung> có "Sao chép vào thư mục đầu ra" -> "Sao chép luôn"?
hashtable

30

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.


8
Không đúng. Ít nhất là trong cli net chấm mới. nếu bạn có một mục được khai báo là Không có CopyToOutputDirectorytập hợp với mục trueđó sẽ được xuất bản trong mộtdotnet publish
đĩa vào

13

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ôngNộ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ó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?


2
Giống như bạn nói, dường như Nonevs Contentchỉ 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ư CopyToOutputDirectorycó 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 Contentcác mục và không phải Nonecác mục.
Christopher King

8

Trong tình huống của tôi, tệp MSBuild của tôi có ItemGrouptà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ố ContentNoneloạ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 Contentthà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 .


3

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.


2

Bạn cần Không có trong tệp dự án mẫu để bao gồm các tệp bạn xác định trong .vstemplate nếu không chúng bị mất trong quá trình tạo và dịch. Họ bị bỏ lại phía sau trong thư mục tạm thời mà nó sử dụng để xây dựng mọi thứ và sau đó bị xóa ngay sau đó.


1

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.


1
Vui lòng bình luận ở đây, nếu có gì đó sai lệch hoặc không rõ ràng, Chỉ cần một cuộc bỏ phiếu không giúp tôi cải thiện nó tốt hơn. Cảm ơn trước.
krishna kanth

1
Tôi thường gặp lỗi: tên phần tử "Không" bao gồm "Properties \ PublishProfiles \ FolderProfile.pubxml" phải là "Nội dung". trong dự án Asp.Net của tôi trên Tre, và đôi khi chạy lại bản dựng có thể sửa nó, vì vậy không biết chính xác vấn đề là gì
Bochen Lin

Xin chào @BochenLin, các chi tiết bạn đề cập ở đây hơi ít, bạn có thể thử cung cấp thêm chi tiết tại đây hoặc đăng câu hỏi mới với đầy đủ chi tiết vấn đề và ảnh chụp màn hình nếu có thể [và sau đó chia sẻ liên kết câu hỏi tại đây].
krishna kanth

0

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.

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.