รวมไฟล์เข้ากับโปรเจ็กต์โดยขึ้นอยู่กับการกำหนดค่าโซลูชัน

ฉันต้องรวมไฟล์ขึ้นอยู่กับการกำหนดค่าโปรเจ็กต์ ลองใช้เงื่อนไข MSBuild แต่ดูเหมือนว่าจะไม่ทำงาน

ฉันได้สร้างไฟล์ทั้งสองและแก้ไข .csproj โดยเพิ่มการประกาศต่อไปนี้

<ItemGroup>
    <AppxManifest Include="Package.debug.appxmanifest" Condition="'$(Configuration)'=='Debug'" >
      <SubType>Designer</SubType>
    </AppxManifest>
    <AppxManifest Include="Package.release.appxmanifest" Condition="'$(Configuration)'!='Debug'" >
      <SubType>Designer</SubType>
    </AppxManifest>
  </ItemGroup>

ไม่ว่าฉันจะใช้การกำหนดค่าใด ฉันจะเห็นทั้งสองไฟล์ภายในโปรเจ็กต์เสมอ


person Corrado Cavalli    schedule 23.08.2019    source แหล่งที่มา
comment
มันส่งผลกระทบต่อการสร้างหรือแพ็คของคุณหรือไม่? มีข้อผิดพลาดอะไรไหม? อย่างที่ฉันรู้ UI จะไม่รีเฟรชจนกว่าคุณจะโหลดโปรเจ็กต์ใหม่ในสถานการณ์นี้ แต่เมื่อสร้างและแพ็ก ตรรกะในไฟล์โปรเจ็กต์ของคุณสามารถดำเนินการได้ดี   -  person LoLance    schedule 23.08.2019
comment
ไม่มีข้อผิดพลาด สิ่งที่ฉันเห็นคือทั้งสองไฟล์รวมอยู่ด้วยเสมอ (และเป็นแอป UWP ซึ่งไม่ได้รับอนุญาตและบิลด์ล้มเหลวกะทันหัน) พยายามโหลดโปรเจ็กต์ใหม่ เริ่ม VS ใหม่แต่ไม่มีอะไรเปลี่ยนแปลง ดูเหมือนว่าสภาพจะถูกละเลย   -  person Corrado Cavalli    schedule 23.08.2019
comment
ดูเหมือนว่าปัญหาเดียวกันนี้ถูกโพสต์ที่นี่ และความจริงก็คือ Visual Studio ไม่ได้กรองไฟล์ขึ้นอยู่กับเงื่อนไข stackoverflow.com/questions/8115696/ และ เรายังคงมีพฤติกรรมนี้ใน VS2019...   -  person Corrado Cavalli    schedule 23.08.2019


คำตอบ (2)


ไม่ว่าฉันจะใช้การกำหนดค่าใด ฉันจะเห็นทั้งสองไฟล์ภายในโปรเจ็กต์เสมอ

1.ดังที่เราทราบ UI ใน Solution Explorer สอดคล้องกับเนื้อหาในไฟล์ .xxproj ดังนั้นเมื่อฉันเขียนเนื้อหาดังนี้:

  <ItemGroup>
    <Content Include="TextFile1.txt" />
  </ItemGroup>

VS จะแสดง TextFile1.txt ใน Solution Explorer แม้ว่าไฟล์นั้นจะไม่มีอยู่จริงก็ตาม

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นเมื่อคุณใช้สคริปต์ด้านบน มันจะแสดงทั้งสองไฟล์

2.และฉันคิดว่าสิ่งที่คุณสับสนมากคือเหตุใด UI จึงไม่รวมไฟล์ไว้ ขึ้นอยู่กับการกำหนดค่า โปรดดูปัญหาที่คล้ายกัน ฉันเห็นด้วยกับ Andrey ว่า ItemGroup ก็ได้รับผลกระทบเช่นกัน แต่พฤติกรรมนี้ (เงื่อนไขจะไม่ทำงานเมื่อโหลดโปรเจ็กต์)

3.และในความคิดของฉัน ดูเหมือนว่าเมื่อ VS โหลดไฟล์โครงการและแสดง UI ใน Solution Explorer จะไม่สามารถเข้าถึงค่าการกำหนดค่าจากกล่องสวิตช์ได้ กล่องสวิตช์ถูกปิดใช้งานและเป็นสีเทาเมื่อโปรเจ็กต์ของฉันถูกยกเลิกการโหลด และหากฉันคลิกขวาที่โปรเจ็กต์เพื่อโหลดซ้ำ เนื่องจากตอนนี้กล่องสวิตช์ถูก disbaled เงื่อนไขเกี่ยวกับการกำหนดค่าจึงทำงานได้ไม่ดีในเวลาโหลด

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้ ฉันทดสอบสคริปต์นี้ด้วย ตอนนี้ทั้งสามไฟล์แสดงใน Solution Explorer:

  <ItemGroup>
    <Content Include="TextFile1.txt" Condition="$(RootNamespace)=='App'"/>
    <Content Include="TextFile2.txt" Condition="$(RootNamespace)=='AppApp'"/>
    <Content Include="TextFile3.txt" Condition="$(RootNamespace)=='AppAppApp'"/>
  </ItemGroup>

เห็นได้ชัดว่าเงื่อนไขต่างๆ จะถูกละเว้นระหว่างการโหลด และตาม หมายเหตุใน หมายเหตุ นี่เป็นเพราะการออกแบบ

และเนื่องจากเงื่อนไขใช้ไม่ได้ในสถานการณ์นี้ คุณอาจต้องตั้งค่าคุณสมบัติด้วยตนเองในหน้าต่างคุณสมบัติ เช่น: ตั้งค่าการดำเนินการบิลด์ของ Package.release.appxmanifest เป็น AppxManifest ในขณะที่การดำเนินการบิลด์ของ Package.debug.appxmanifest None ระหว่างการกำหนดค่า Release

หวังว่ามันจะช่วยได้ และหากฉันเข้าใจอะไรผิด โปรดแก้ไขให้ฉันด้วย :)

อัปเดต1:

ค้นหาการสนทนาใน GitHub และรับคำแนะนำดีๆ จาก ดาวเคียน

ขณะนี้ระบบโครงการใหม่ขับเคลื่อนแผนผังโซลูชันออกจากการกำหนดค่า "ที่ใช้งานอยู่" ระบบโครงการเก่าขับเคลื่อนแผนผังโซลูชันโดยไม่สนใจเงื่อนไข ทั้งสองมีข้อดี/ข้อเสีย

person LoLance    schedule 26.08.2019
comment
ขอบคุณ Lance สำหรับคำตอบโดยละเอียด - person Corrado Cavalli; 26.08.2019

ตกลง ดังนั้นคุณต้องรวมทั้งสองไฟล์ไว้ในการกำหนดค่าทั้งสอง แต่คุณ สามารถ เลือกตัวเลือก "ยกเว้นจาก Build" แบบเลือกได้บนการกำหนดค่า คลิกขวาที่ไฟล์ใน Solution Explorer และรับหน้า "คุณสมบัติ" ขึ้น คุณควรเห็น "ยกเว้นจาก Build" ซึ่งคุณสามารถตรวจสอบไฟล์ที่คุณไม่ต้องการในการกำหนดค่าที่เลือกได้

จากนั้น เมื่อคุณเปลี่ยนการกำหนดค่า Solution Explorer จะ (ควร) แสดงไฟล์หนึ่งไฟล์โดยมีไอคอน "ไม่มีรายการ" เพิ่ม - แต่ไฟล์ที่แสดงจะแตกต่างกันในแต่ละการกำหนดค่า

person Adrian Mole    schedule 23.08.2019