Sertakan file ke proyek tergantung pada konfigurasi solusi

Saya perlu memasukkan file tergantung pada konfigurasi proyek, mencoba kondisi MSBuild tetapi sepertinya tidak berhasil

Saya telah membuat dua file dan mengedit .csproj dengan menambahkan deklarasi berikut

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

Tidak peduli konfigurasi apa yang saya gunakan, saya selalu melihat kedua file di dalam proyek


person Corrado Cavalli    schedule 23.08.2019    source sumber
comment
Apakah itu memengaruhi build atau paket Anda? Ada kesalahan? Karena setahu saya, UI tidak akan disegarkan sampai Anda memuat ulang proyek dalam situasi ini, tetapi ketika membangun dan mengemas, logika dalam file proyek Anda dapat dijalankan dengan baik.   -  person LoLance    schedule 23.08.2019
comment
Tidak ada kesalahan, yang saya lihat adalah kedua file selalu disertakan (dan sebagai aplikasi UWP, hal ini tidak diizinkan dan pembangunan tiba-tiba gagal) mencoba memuat ulang proyek, memulai ulang VS tetapi tidak ada yang berubah. Sepertinya kondisi diabaikan begitu saja.   -  person Corrado Cavalli    schedule 23.08.2019
comment
Sepertinya masalah yang sama telah diposting di sini dan kenyataannya Visual Studio tidak memfilter file tergantung pada kondisinya. stackoverflow.com/questions/8115696/ Dan kami masih memiliki perilaku ini di VS2019...   -  person Corrado Cavalli    schedule 23.08.2019


Jawaban (2)


Tidak peduli konfigurasi apa yang saya gunakan, saya selalu melihat kedua file di dalam proyek

1.Seperti yang kita ketahui, UI di Solution Explorer sesuai dengan konten dalam file .xxproj. Jadi ketika saya menulis konten seperti di bawah ini:

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

VS akan menampilkan TextFile1.txt di Solution Explorer meskipun sebenarnya file tersebut tidak ada.

masukkan deskripsi gambar di sini

Jadi ketika Anda menggunakan skrip di atas, itu menunjukkan kedua file tersebut.

2.Dan menurut saya yang paling membingungkan Anda adalah mengapa UI tidak menyertakan file tergantung pada konfigurasi. Silakan lihat masalah serupa ini , saya setuju dengan Andrey bahwa ItemGroup juga terpengaruh tetapi perilaku ini. (Kondisi tidak berfungsi saat proyek dimuat)

3.Dan menurut saya, Tampaknya ketika VS memuat file proyek dan menampilkan UI di Solution Explorer, ia tidak dapat mengakses nilai Konfigurasi dari kotak sakelar. Kotak sakelar dinonaktifkan dan berwarna abu-abu ketika proyek saya dibongkar, dan jika saya klik kanan proyek untuk memuatnya kembali, karena sekarang kotak sakelar dinonaktifkan, kondisi tentang Konfigurasi tidak dapat berfungsi dengan baik pada waktu muat.

masukkan deskripsi gambar di sini

Saya juga menguji skrip ini, tiga file sekarang ditampilkan di 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>

Jadi jelas kondisinya diabaikan selama waktu muat. Dan menurut Catatan di komentar, ini memang disengaja.

Dan karena kondisi tidak berfungsi dalam situasi ini, Anda mungkin harus mengatur propertinya secara manual di jendela properti. yaitu: Tetapkan tindakan pembangunan Package.release.appxmanifest sebagai AppxManifest sementara tindakan pembangunan Package.debug.appxmanifest None selama konfigurasi Rilis.

Semoga ini bisa membantu dan jika ada yang salah paham, silakan koreksi saya :)

Pembaruan1:

Temukan diskusi di github, dan dapatkan petunjuk bagus dari davkean.

Sistem proyek baru saat ini mengeluarkan pohon solusi dari konfigurasi "aktif". Sistem proyek lama menggerakkan pohon solusi dengan mengabaikan kondisi. Keduanya memiliki kelebihan/kekurangan.

person LoLance    schedule 26.08.2019
comment
Terima kasih Lance atas jawaban detailnya. - person Corrado Cavalli; 26.08.2019

Oke, jadi Anda harus menyertakan kedua file dalam kedua konfigurasi, namun Anda dapat secara selektif mencentang opsi "Kecualikan dari Build" berdasarkan konfigurasi. Klik kanan file di Solution Explorer dan tampilkan halaman "Properti". Anda akan melihat "Kecualikan dari Build", yang dapat Anda periksa untuk file yang tidak Anda inginkan dalam konfigurasi yang dipilih.

Kemudian, saat Anda mengubah konfigurasi, Solution Explorer akan (seharusnya) menampilkan satu file dengan ikon "Dilarang Masuk" yang ditambahkan - tetapi file yang ditampilkan akan berbeda di setiap konfigurasi.

person Adrian Mole    schedule 23.08.2019