ในไฟล์. csproj <None รวม =“ …”> มีไว้ทำอะไร?


137

อย่างไร

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

แตกต่างจาก

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

?


7
ฉันได้ไม่กี่Contentวินาทีที่จะได้รับการเปลี่ยนแปลงNones ฉันคิดว่ามันเกิดขึ้นเมื่อฉันเปลี่ยนชื่อไฟล์จาก .ascx เป็น. cshhtml เมื่อแปลงเป็นมีดโกน การเปลี่ยนกลับด้วยตนเองแก้ไขปัญหาการปรับใช้บางอย่างที่ฉันมี ดีใจที่พบสิ่งนี้
Chris

คำตอบ:


135

บทความ MSDN บนคุณสมบัติการดำเนินการบิลด์อธิบายความแตกต่าง

ไม่มี - ไฟล์ไม่รวมอยู่ในกลุ่มเอาต์พุตของโปรเจ็กต์และไม่ได้คอมไพล์ในกระบวนการบิลด์ ตัวอย่างคือไฟล์ข้อความที่มีเอกสารประกอบเช่นไฟล์ Readme

เนื้อหา - ไฟล์ไม่ได้รวบรวม แต่รวมอยู่ในกลุ่มเอาท์พุทเนื้อหา ตัวอย่างเช่นการตั้งค่านี้เป็นค่าเริ่มต้นสำหรับ. htm หรือไฟล์เว็บชนิดอื่น


5
ขอบคุณฉันมีปัญหาในการค้นหาข้อมูลอ้างอิงนี้
Emmett

มีประโยชน์ แต่ทำไมต้องมีรายการ "ไม่มี" เลยหากไฟล์ไม่รวมอยู่ในผลลัพธ์ ประเด็นคืออะไร?
JimH44

1
@ JimH44 <ไม่มี> รายการมักจะใช้เฉพาะการคัดลอกไฟล์ลงในไดเรกทอรีออกถึงแม้ว่าพวกเขาไม่ได้อยู่ในกลุ่มที่ส่งออกไปโดยปริยาย หากคุณเลือก "คัดลอกไปยังไดเรกทอรีไดเรกทอรี" -> "คัดลอกเสมอ" สำหรับไฟล์ <ไม่มี> นี่จะทำให้คัดลอกและคุณจะเห็นรายการที่เพิ่มลงในไฟล์. csproj ของโครงการจะมีรายการ <ไม่มี> สำหรับไฟล์
Compiler ที่เห็นได้ชัดเจน

3
ดังนั้นไฟล์ <None> ที่มี "Copy to Output Directory" ต่างกันอย่างไร -> "Copy Always" และไฟล์ <Content> พร้อมกับ "Copy to Output Directory" -> "Copy Always"?
hashtable

30

สิ่งหนึ่งที่แตกต่างคือวิธีที่พวกเขาเผยแพร่ ไอเท็ม "ไม่มี" จะไม่ถูกรวมในการเผยแพร่ไอเท็ม "เนื้อหา" มีอยู่ ตัวอย่างเช่นในกล่องโต้ตอบ "ไฟล์แอปพลิเคชัน" บนแท็บเผยแพร่


8
ไม่จริง. อย่างน้อยใน dot net cli ใหม่ หากคุณมีรายการที่ประกาศว่าไม่มีพร้อมCopyToOutputDirectoryชุดtrueจะถูกเผยแพร่ในdotnet publish
disklosr

13

ฉันไม่แน่ใจ 100% (ฉันอ่านคำอธิบาย MSDN ของคุณสมบัติBuild Action ) แต่เพิ่งคัดลอกคำตอบนั้นจาก MSDN ไปยังStackOverflowไม่ตอบคำถามทั้งหมดสำหรับฉัน

ความแตกต่างของไม่มีและเนื้อหามีผลกับโครงการเว็บเท่านั้น สำหรับโครงการบรรทัดคำสั่งโครงการ WinForm หรือโครงการ UnitTest (ในกรณีของฉัน) เป็นต้นไม่มีและเนื้อหาจะไม่ทำงานแตกต่างกัน

MSDN: "กลุ่มเอาต์พุตของโครงการ" หรือ "กลุ่มเอาต์พุตเนื้อหา" เฉพาะคำที่ใช้ในโครงการเว็บใช่ไหม


2
เช่นเดียวกับที่คุณพูดดูเหมือนNoneVS Contentเพียง แต่มีผลในการเผยแพร่ขั้นตอนที่ไม่ได้สร้างขั้นตอน สำหรับขั้นตอนการสร้างดูเหมือนว่าCopyToOutputDirectoryสามารถตั้งค่าอย่างใดอย่างหนึ่งและควบคุมว่าหากไฟล์ถูกคัดลอกโดยขั้นตอนการสร้าง ดูเหมือนแปลกที่โดยค่าเริ่มต้นContentเท็มเพลต T4 จะถูกเพิ่มเป็นรายการไม่ใช่Noneไอเท็ม
Christopher King

8

ในสถานการณ์ของฉันไฟล์ MSBuild ของฉันมีItemGroupทรัพยากรรูปภาพที่ปรากฏดังนี้

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

ในขณะที่โครงการของฉันถูกสร้างดีนี้เหลือฉันสงสัยว่าทำไมฉันมีผสมของContentและองค์ประกอบประเภทรายการในของฉันNone ItemGroupนี้บทความ MSDN (สำหรับ Visual Studio 2010) ให้ฉันแนะนำผมกำลังมองหา:

โปรดทราบว่าเมื่อตัวแก้ไขทรัพยากรเพิ่มรูปภาพมันจะตั้งค่าBuild Actionเป็นNoneเนื่องจากไฟล์. resx อ้างอิงถึงไฟล์รูปภาพ ณ เวลาบิลด์รูปภาพจะถูกดึงลงในไฟล์. resources ที่สร้างจากไฟล์. resx ภาพนั้นสามารถเข้าถึงได้อย่างง่ายดายผ่านทางคลาสที่พิมพ์โดยอัตโนมัติอย่างยิ่งสำหรับไฟล์. resx ดังนั้นคุณไม่ควรเปลี่ยนการตั้งค่านี้เป็นทรัพยากรที่ฝังตัวเนื่องจากการทำเช่นนี้จะรวมภาพสองครั้งในแอสเซมบลี

ความละเอียด:ด้วยแนวทางนี้โดยใช้โปรแกรมแก้ไขข้อความที่ผมเปลี่ยนองค์ประกอบประเภทรายการเพื่อContentNone

นอกจากนี้สำหรับภาพรวมของรายการ MSBuild ให้ดูนี้บทความ MSDN


3

ฉันมีโครงการที่ไม่มีรายการที่คอมไพล์ได้ (มันเก็บ html และ javascript สำหรับการทดสอบหน่วยจัสมิน)

วันหนึ่งโซลูชันของฉัน (ที่มีโครงการดังกล่าว) หยุดการคอมไพล์โดยพูดว่า "เป้าหมาย" สร้าง "ไม่มีอยู่ในโครงการ"

ฉันเพิ่มการนำเข้าเพื่อนำคอมไพเลอร์ซึ่งทำงานได้ดีบนเครื่องของฉัน แต่ล้มเหลวในการใช้ msbuild บนบิลด์เซิร์ฟเวอร์

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

ฉันเปลี่ยนจากบรรทัดแล้ว

<None Include="SpecRunner.html" />

ถึง

<Content Include="SpecRunner.html" />

และมันทำงานบนบิลด์เซิร์ฟเวอร์เช่นกัน


2

คุณต้องไม่มีในไฟล์โครงการแม่แบบเพื่อรวมไฟล์ที่คุณกำหนดไว้ใน. vstemplate มิฉะนั้นไฟล์จะหายไปในกระบวนการสร้างและแปล พวกเขาถูกทิ้งไว้ในโฟลเดอร์ชั่วคราวที่ใช้สร้างทุกอย่างแล้วลบทิ้งหลังจากนั้นไม่นาน


1

ในกรณีของฉัน. Pubxmlเป็นหนึ่งในไฟล์เหล่านั้นในรายการไม่มี มันไม่ได้มีไว้สำหรับการสร้างโซลูชันหรือเป็นไฟล์แบบคงที่สำหรับโครงการเว็บ แต่ในการเผยแพร่เว็บไซต์ไปยัง Azure การกำหนดค่าจะปรากฏในนี้

ตามบทความของ Microsoft เหล่านี้เป็นประเภทหลักที่เราเห็นในแท็กไฟล์. csproj :

ไม่มี - ไฟล์ไม่รวมอยู่ในกลุ่มเอาท์พุทโครงการและไม่ได้รวบรวมในกระบวนการสร้าง ตัวอย่างคือไฟล์ข้อความที่มีเอกสารประกอบเช่นไฟล์ Readme

คอมไพล์ - ไฟล์ถูกคอมไพล์ลงในเอาต์พุตบิลด์ การตั้งค่านี้ใช้สำหรับไฟล์รหัส

เนื้อหา - ไฟล์ไม่ได้รวบรวม แต่รวมอยู่ในกลุ่มเอาท์พุทเนื้อหา ตัวอย่างเช่นการตั้งค่านี้เป็นค่าเริ่มต้นสำหรับ. htm หรือไฟล์เว็บชนิดอื่น

ทรัพยากรที่ฝังตัว - ไฟล์นี้จะถูกฝังอยู่ในผลลัพธ์การสร้างโครงการหลักเป็น DLL หรือปฏิบัติการได้ โดยทั่วไปจะใช้สำหรับไฟล์ทรัพยากร


1
กรุณาแสดงความคิดเห็นที่นี่หากสิ่งที่ทำให้เข้าใจผิดหรือไม่ชัดเจนเพียงลงคะแนนไม่ได้ช่วยให้ฉันปรับปรุงมันได้ดีขึ้น ขอบคุณล่วงหน้า.
krishna

1
ฉันมักจะมีข้อผิดพลาด: ชื่อ "ไม่มี" สำหรับองค์ประกอบรวมถึง "Properties \ PublishProfiles \ FolderProfile.pubxml" ควรเป็น "เนื้อหา" ในโครงการ Asp.Net ของฉันบน Bamboo และรันใหม่อีกครั้งการสร้างสามารถแก้ไขได้ดังนั้นไม่ทราบว่าปัญหาคืออะไร
Bochen Lin

สวัสดี @BochenLin รายละเอียดที่คุณกล่าวถึงที่นี่ค่อนข้าง จำกัด คุณสามารถลองให้รายละเอียดเพิ่มเติมได้ที่นี่หรือโพสต์คำถามใหม่พร้อมรายละเอียดปัญหาและภาพหน้าจอที่สมบูรณ์ถ้าเป็นไปได้ [จากนั้นแบ่งปันลิงก์คำถามที่นี่]
krishna kanth

0

ไฟล์เนื้อหาไม่รวมอยู่ในบิลด์ แต่รวมอยู่ในการเผยแพร่

ไม่มีไฟล์ใดที่จะไม่รวมอยู่ในบิลด์หรือเผยแพร่เว้นแต่คุณจะกำหนดค่าด้วยวิธีนี้ ตัวอย่างเช่นการตั้งค่า "คัดลอกไปยังไดเรกทอรีไดเรกทอรี" ที่ "เสมอ" หรือ "ใหม่กว่า" จะทำให้พวกเขารวมอยู่ในทั้งบิลด์และเผยแพร่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.