อย่างไร
<None Include="C:\foo.bar" />
แตกต่างจาก
<Content Include="C:\foo.bar" />
?
อย่างไร
<None Include="C:\foo.bar" />
แตกต่างจาก
<Content Include="C:\foo.bar" />
?
คำตอบ:
บทความ MSDN บนคุณสมบัติการดำเนินการบิลด์อธิบายความแตกต่าง
ไม่มี - ไฟล์ไม่รวมอยู่ในกลุ่มเอาต์พุตของโปรเจ็กต์และไม่ได้คอมไพล์ในกระบวนการบิลด์ ตัวอย่างคือไฟล์ข้อความที่มีเอกสารประกอบเช่นไฟล์ Readme
เนื้อหา - ไฟล์ไม่ได้รวบรวม แต่รวมอยู่ในกลุ่มเอาท์พุทเนื้อหา ตัวอย่างเช่นการตั้งค่านี้เป็นค่าเริ่มต้นสำหรับ. htm หรือไฟล์เว็บชนิดอื่น
สิ่งหนึ่งที่แตกต่างคือวิธีที่พวกเขาเผยแพร่ ไอเท็ม "ไม่มี" จะไม่ถูกรวมในการเผยแพร่ไอเท็ม "เนื้อหา" มีอยู่ ตัวอย่างเช่นในกล่องโต้ตอบ "ไฟล์แอปพลิเคชัน" บนแท็บเผยแพร่
CopyToOutputDirectory
ชุดtrue
จะถูกเผยแพร่ในdotnet publish
ฉันไม่แน่ใจ 100% (ฉันอ่านคำอธิบาย MSDN ของคุณสมบัติBuild Action ) แต่เพิ่งคัดลอกคำตอบนั้นจาก MSDN ไปยังStackOverflowไม่ตอบคำถามทั้งหมดสำหรับฉัน
ความแตกต่างของไม่มีและเนื้อหามีผลกับโครงการเว็บเท่านั้น สำหรับโครงการบรรทัดคำสั่งโครงการ WinForm หรือโครงการ UnitTest (ในกรณีของฉัน) เป็นต้นไม่มีและเนื้อหาจะไม่ทำงานแตกต่างกัน
MSDN: "กลุ่มเอาต์พุตของโครงการ" หรือ "กลุ่มเอาต์พุตเนื้อหา" เฉพาะคำที่ใช้ในโครงการเว็บใช่ไหม
None
VS Content
เพียง แต่มีผลในการเผยแพร่ขั้นตอนที่ไม่ได้สร้างขั้นตอน สำหรับขั้นตอนการสร้างดูเหมือนว่าCopyToOutputDirectory
สามารถตั้งค่าอย่างใดอย่างหนึ่งและควบคุมว่าหากไฟล์ถูกคัดลอกโดยขั้นตอนการสร้าง ดูเหมือนแปลกที่โดยค่าเริ่มต้นContent
เท็มเพลต T4 จะถูกเพิ่มเป็นรายการไม่ใช่None
ไอเท็ม
ในสถานการณ์ของฉันไฟล์ 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 ดังนั้นคุณไม่ควรเปลี่ยนการตั้งค่านี้เป็นทรัพยากรที่ฝังตัวเนื่องจากการทำเช่นนี้จะรวมภาพสองครั้งในแอสเซมบลี
ความละเอียด:ด้วยแนวทางนี้โดยใช้โปรแกรมแก้ไขข้อความที่ผมเปลี่ยนองค์ประกอบประเภทรายการเพื่อContent
None
นอกจากนี้สำหรับภาพรวมของรายการ MSBuild ให้ดูนี้บทความ MSDN
ฉันมีโครงการที่ไม่มีรายการที่คอมไพล์ได้ (มันเก็บ html และ javascript สำหรับการทดสอบหน่วยจัสมิน)
วันหนึ่งโซลูชันของฉัน (ที่มีโครงการดังกล่าว) หยุดการคอมไพล์โดยพูดว่า "เป้าหมาย" สร้าง "ไม่มีอยู่ในโครงการ"
ฉันเพิ่มการนำเข้าเพื่อนำคอมไพเลอร์ซึ่งทำงานได้ดีบนเครื่องของฉัน แต่ล้มเหลวในการใช้ msbuild บนบิลด์เซิร์ฟเวอร์
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
ฉันเปลี่ยนจากบรรทัดแล้ว
<None Include="SpecRunner.html" />
ถึง
<Content Include="SpecRunner.html" />
และมันทำงานบนบิลด์เซิร์ฟเวอร์เช่นกัน
คุณต้องไม่มีในไฟล์โครงการแม่แบบเพื่อรวมไฟล์ที่คุณกำหนดไว้ใน. vstemplate มิฉะนั้นไฟล์จะหายไปในกระบวนการสร้างและแปล พวกเขาถูกทิ้งไว้ในโฟลเดอร์ชั่วคราวที่ใช้สร้างทุกอย่างแล้วลบทิ้งหลังจากนั้นไม่นาน
ในกรณีของฉัน. Pubxmlเป็นหนึ่งในไฟล์เหล่านั้นในรายการไม่มี มันไม่ได้มีไว้สำหรับการสร้างโซลูชันหรือเป็นไฟล์แบบคงที่สำหรับโครงการเว็บ แต่ในการเผยแพร่เว็บไซต์ไปยัง Azure การกำหนดค่าจะปรากฏในนี้
ตามบทความของ Microsoft เหล่านี้เป็นประเภทหลักที่เราเห็นในแท็กไฟล์. csproj :
ไม่มี - ไฟล์ไม่รวมอยู่ในกลุ่มเอาท์พุทโครงการและไม่ได้รวบรวมในกระบวนการสร้าง ตัวอย่างคือไฟล์ข้อความที่มีเอกสารประกอบเช่นไฟล์ Readme
คอมไพล์ - ไฟล์ถูกคอมไพล์ลงในเอาต์พุตบิลด์ การตั้งค่านี้ใช้สำหรับไฟล์รหัส
เนื้อหา - ไฟล์ไม่ได้รวบรวม แต่รวมอยู่ในกลุ่มเอาท์พุทเนื้อหา ตัวอย่างเช่นการตั้งค่านี้เป็นค่าเริ่มต้นสำหรับ. htm หรือไฟล์เว็บชนิดอื่น
ทรัพยากรที่ฝังตัว - ไฟล์นี้จะถูกฝังอยู่ในผลลัพธ์การสร้างโครงการหลักเป็น DLL หรือปฏิบัติการได้ โดยทั่วไปจะใช้สำหรับไฟล์ทรัพยากร
ไฟล์เนื้อหาไม่รวมอยู่ในบิลด์ แต่รวมอยู่ในการเผยแพร่
ไม่มีไฟล์ใดที่จะไม่รวมอยู่ในบิลด์หรือเผยแพร่เว้นแต่คุณจะกำหนดค่าด้วยวิธีนี้ ตัวอย่างเช่นการตั้งค่า "คัดลอกไปยังไดเรกทอรีไดเรกทอรี" ที่ "เสมอ" หรือ "ใหม่กว่า" จะทำให้พวกเขารวมอยู่ในทั้งบิลด์และเผยแพร่
Content
วินาทีที่จะได้รับการเปลี่ยนแปลงNone
s ฉันคิดว่ามันเกิดขึ้นเมื่อฉันเปลี่ยนชื่อไฟล์จาก .ascx เป็น. cshhtml เมื่อแปลงเป็นมีดโกน การเปลี่ยนกลับด้วยตนเองแก้ไขปัญหาการปรับใช้บางอย่างที่ฉันมี ดีใจที่พบสิ่งนี้