Struktur direktori untuk Solusi .NET

16

Kami melakukan kunjungan kontraktor baru-baru ini yang mempertanyakan metodologi kami dalam menyusun proyek. Harap dicatat bahwa saya secara khusus merujuk pada struktur direktori. Dia menyarankan menggunakan pedoman Microsoft. Saya pikir saya akan dapat Google "pedoman Microsoft. Struktur direktori proyek NET" dan menemukan sesuatu yang bermanfaat, namun ini telah terbukti tidak menjadi masalah. Seperti berdiri kita melakukan sesuatu seperti ini:

[Company.System.Feature]
  |-doc
     |Sandcastle project
  |-lib
     |Nuget packages
  |-src
    |-Project1 e.g. web
    |-Project2 e.g. business logic
    |-UnittestProject1
    |-Specs

Folder doc berisi solusi Sandcastle seperti yang dijelaskan di sini: https://www.codeproject.com/Articles/15176/Sandcastle-Help-File-Builder (lihat: jalur absolut dan relatif). Oleh karena itu folder doc berisi folder Bantuan, yang berisi file bantuan yang dihasilkan. Folder lib berisi semua paket Nuget.

Apakah ada pedoman Microsoft, yang merekomendasikan bagaimana menyusun solusi? Saya telah melihat di sini: /programming/789389/project-structure-for-c-sharp-development-effort/789554?noredirect=1#comment86756309_789554 di antara tempat-tempat lain. Sebagian besar artikel dan pertanyaan yang saya baca tampaknya dibuat 2007-2009. Saya percaya Nuget diperkenalkan pada 2010. Apakah ada pedoman Microsoft? Saya membaca tentang sesuatu yang disebut Ahli Bedah Pohon, namun ini sepertinya tidak ada lagi: https://archive.codeplex.com/?p=treesurgeon .

Saya menggunakan TFS; Cruise Control dan DDD adalah yang membuat perbedaan.

w0051977
sumber
4
Struktur direktori adalah masalah selera. Gunakan struktur folder yang paling jelas menyatakan niat proyek / organisasi Anda.
Robert Harvey
5
Juga, lain kali seseorang mengatakan Anda harus mengikuti "Pedoman Microsoft" tentang sesuatu, minta orang tersebut untuk memberikan pedoman itu, atau tunjukkan di mana Anda dapat menemukannya. Kalau tidak, itu saran yang tidak berguna.
Robert Harvey
2
bit yang aneh adalah meletakkan paket nuget di lib alih-alih paket
Ewan
1
@ Ewan, paket nuget bahkan tidak termasuk dalam packageslagi, untuk proyek dotnetcore dan gaya VS2017. Mereka sekarang tinggal di objdirektori proyek .
David Arno
2
pff! perbaikan?!?!? Sepertinya itu bisa merusak barang
Ewan

Jawaban:

20

Di MSDN, ada beberapa pedoman resmi yang sangat lama . Ini sudah ketinggalan zaman. Seperti yang dikatakan halaman, " Konten ini sudah ketinggalan zaman dan tidak lagi dipertahankan. Ini disediakan sebagai rasa hormat bagi individu yang masih menggunakan teknologi ini. " Jadi saya sarankan Anda menghindari pedoman ini.

Ada upaya untuk mendefinisikan struktur solusi umum melalui Project Scaffold . Ini lebih berorientasi pada F #, bukan C #. Tapi itu tidak benar-benar lepas landas dan ada sedikit tanda pengembangan ide-ide ini.

Kumpulan pedoman yang paling aktif dan terkini dipelihara oleh David Fowler, yang merupakan pengembang di Microsoft di tim ASP.NET. Pedoman ini digunakan oleh banyak orang di Microsoft, termasuk tim Roslyn (kompiler C # dan VB.Net). Karena itu, Anda bisa melakukan jauh lebih buruk daripada mengadopsi pendekatan itu.

David Arno
sumber
Saya melihat dua tautan pertama, tetapi bukan yang ketiga. +1 untuk tautan ketiga. Apakah saya akan meletakkan seluruh proyek Sandcastle saya di folder dokumen atau hanya file Bantuan yang dihasilkan oleh proyek Sandcastle? Tidak yakin mengapa jawaban ini dibatalkan.
w0051977
1
Agar adil, setiap halaman yang tidak termasuk dalam sistem dokumentasi baru Microsoft dicap dengan kata-kata "konten ini sudah usang dan tidak lagi dipertahankan." Itu tidak berarti tidak ada informasi yang berguna di sana.
Robert Harvey
Apakah Anda akan meletakkan Spesifikasi? Dalam folder Tes atau dalam direktori bernama Specs (dalam direktori yang sama dengan folder src)? Saya kira itu tidak terlalu penting.
w0051977
@RobertHarvey: Cukup adil, tetapi merujuk ke halaman itu saja tanpa ada yang mendukungnya juga bukan alasan untuk mengubah struktur folder proyek jika yang berbeda sudah dibuat.
Flater
Anda dapat melihat pedoman David Fowlers dalam praktiknya di sebagian besar proyek sumber terbuka di GitHub, misalnya Enity Framework .
pfx