ไฟล์สามารถซ้อนกันใน VS2017 Solution Explorer สำหรับโครงการ. NET Core (non-ASP.NET Core) ได้หรือไม่


86

ในโครงการ MSBuild "โรงเรียนเก่า" เช่นเดียวกับที่ Windows Forms ใช้ใน VS2017 เช่นไฟล์อาจ "ซ้อน" ผ่านDependentUponรายการในไฟล์ csproj

ฉันใช้สิ่งนี้เพื่อจัดกลุ่มการทดสอบหน่วยด้วยกันใน Noda Time เช่น

<Compile Include="LocalDateTest.PeriodArithmetic.cs">
  <DependentUpon>LocalDateTest.cs</DependentUpon>
</Compile>

ซึ่งนำไปสู่การทดสอบที่ใช้งานง่าย:

การทดสอบที่ซ้อนกัน

ฉันรู้ว่า "สูญเสีย" คุณลักษณะนี้เมื่อย้ายไปproject.jsonใช้. NET Core แต่หวังว่ามันจะกลับมาเมื่อแปลงเป็น MSBuild อย่างไรก็ตามดูเหมือนว่าโครงการ MSBuild ที่ใช้. NET Core SDK (องค์ประกอบราก<Project Sdk="Microsoft.NET.Sdk">) จะไม่ได้รับการปฏิบัติแบบเดียวกันใน Visual Studio 2017 แม้ว่าจะมีการItemGroupเพิ่มด้วยตนเองด้วยองค์ประกอบเดียวกันกับโครงการ "โรงเรียนเก่า" ก็ตาม

โครงการ ASP.NET Core ได้รับการซ้อนอัตโนมัติสำหรับ CSS และ Javascript ที่ย่อขนาดแล้ว แต่ยังไม่ชัดเจนว่าจะนำไปใช้กับ C # ในโครงการไลบรารี. NET Core ได้อย่างไร

คำตอบ:


106

ฉันให้มันทำงานในMicrosoft.NET.Sdkโครงการสไตล์ของฉันโดยใช้สิ่งที่คล้ายกับสิ่งต่อไปนี้:

<ItemGroup>
  <Compile Update="LocalDateTest.*.cs">
    <DependentUpon>LocalDateTest.cs</DependentUpon>
  </Compile>
</ItemGroup>

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


2
โอเคนี่มันแปลกมาก - ฉันแน่ใจว่าลองแล้ว แต่มันไม่ได้ผล ตอนนี้เป็น มากแปลกมาก อ่ามันเป็นการ "อัปเดต" มากกว่า "รวม"
Jon Skeet

1
ฉันต้องยอมรับว่าฉันไม่แน่ใจว่าทำไมการรวมกับการอัปเดตจึงสร้างความแตกต่าง ชอบหนึ่งในคนที่มีเครื่องมือเพื่อให้ข้อมูลเพิ่มเติม
Matthew King

2
@MatthewKing: ฉันเดาว่าเป็นเพราะ*.csรวมอยู่แล้วโดยค่าเริ่มต้นดังนั้นเนื้อหาองค์ประกอบที่ซ้อนกันจึงถูกละเว้น
Jon Skeet

1
@JonSkeet ใช่ ... อย่างที่คุณบอกว่ามันแปลก ... ฉันลองอีกครั้งในโครงการอื่นและได้ผล ฉันต้องการซ้อนการทดสอบหลังชั้นเรียนที่พวกเขาทดสอบแต่มันจะบ้ามากที่จะทำกับไฟล์หลายร้อยไฟล์ด้วยตนเอง ... แม้ว่าฉันจะเขียนส่วนขยายสำหรับสิ่งนี้ไฟล์โครงการจะดูไม่ดี ในที่สุดฉันก็ตัดสินใจใช้Microsoft.NET.Sdk.Webแม้กระทั่งกับห้องสมุดชั้นเรียน ตอนนี้ฉันไม่ต้องกำหนดค่าการซ้อนเลย
Pavel Agarkov

1
ฉันเพิ่งทดสอบสิ่งนี้และคุณต้องใช้ชื่อ BuildAction เดียวกันเช่นแทนที่ 'Compile' ด้วย 'Content' หรือ 'None' ตามคุณสมบัติไฟล์ของคุณ ในกรณีของฉันมันคือ 'เนื้อหา'
SM3RKY

11

ใน Visual Studio 2019 ฉันมีโครงการ. NET Core 2.2 <Project Sdk="Microsoft.NET.Sdk">ซึ่งฉันต้องการไฟล์ appsettings.json / appsettings.Development.json ที่ซ้อนกันอย่างสวยงามเหมือนกับที่ทำโดยอัตโนมัติสำหรับ<Project Sdk="Microsoft.NET.Sdk.Web">โครงการ

นี่คือสิ่งที่ฉันต้องเพิ่มใน. CSPROJ:

  <ItemGroup>
    <Content Include="appsettings.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="appsettings.Development.json">
      <DependentUpon>appsettings.json</DependentUpon>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

หลังจากนั้นฉันต้องยกเลิกการโหลด / โหลดโครงการใหม่เพื่อให้การเปลี่ยนแปลงมีผลใน Solution Explorer โปรดทราบว่าฉันยังตั้งค่าให้คัดลอกไฟล์เหล่านี้ไปยังไดเร็กทอรีเอาต์พุตเสมอ


6

หากคุณต้องการใช้สัญลักษณ์แทนการสร้างด้วยมือแต่ละรายการการเพิ่มบรรทัดเหล่านี้ในไฟล์. csprojของคุณหมายความว่าอะไรก็ตามเช่นFoo.tests.csจะซ้อนกันโดยอัตโนมัติภายใต้Foo.cs

ทดสอบและทำงานใน VS2019 ด้วย. NET Core 3.1.0

  <ItemGroup>
    <Compile Update="**\*.tests.cs">
      <DependentUpon>$([System.String]::Copy(%(Filename)).Replace(".tests",".cs"))</DependentUpon>
    </Compile>
  </ItemGroup>

2

หากคุณใช้.netstandardx.xคุณไม่สามารถใช้NestedIn มันไม่ทำงาน

คุณสามารถทำได้ด้วยตนเองใน. csproj ของคุณ

<ItemGroup><Compile Include="BaseClass">ChildClass.cs</Compile></ItemGroup>

-6

หากคุณใช้คำนำหน้าเดียวกันมันจะซ้อนไฟล์โดยอัตโนมัติ

ตัวอย่าง:

AsemblyInfo.cs 
AsemblyInfo.local.cs

1
คำถามเกี่ยวกับ. NET Core คุณสามารถชี้แจงข้อสงสัยของคุณได้หรือไม่?
Miguel Domingues

2
คุณเคยลองใน VS2017 หรือยัง? ตอนนี้ฉันมีโซลูชันที่เปิดอยู่ซึ่งมี. NetFramework 4.7.1, Core 2.0 และ Standard 2.1 ฉันลองเพิ่ม Class.cs แล้วเพิ่ม Class.local.cs ในโปรเจ็กต์ของแต่ละประเภท ไม่มีการซ้อนอัตโนมัติ การซ้อนด้วยตนเองทำงานได้ดี VS2017 (15.7.4)
Andrew Steitz

Visual Studio 2017 15.9.3: ไฟล์ที่มีคำนำหน้าเหมือนกันจะถูกซ้อนโดยอัตโนมัติใน Solution Explorer
brsfan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.