Folder Solusi Visual Studio sebagai folder nyata

120

Saya memiliki solusi Visual Studio. Saat ini, ini adalah solusi kosong (= tidak ada proyek) dan saya telah menambahkan beberapa folder solusi.

Folder Solusi sepertinya hanya "folder virtual", karena mereka tidak benar-benar dibuat di Sistem File dan file di dalam folder solusi hanya berada di folder yang sama dengan file .sln.

Apakah ada pengaturan yang saya abaikan yang memberi tahu Visual Studio untuk memperlakukan Folder Solusi sebagai folder "nyata", yaitu membuatnya dalam sistem file dan memindahkan file ke dalamnya ketika saya memindahkannya ke dalam solusi ke salah satu folder itu?

Edit: Terima kasih. Akan membuat saran untuk VS2010 lalu :)

Michael Stum
sumber
52
Ini adalah salah satu kebiasaan Visual Studio yang paling menjengkelkan
Andy White
Bagaimana saya bisa menangani kekhasan ini dengan benar?
Hellboy
Lucunya, Rider memiliki fitur ini (tetapi folder harus berada pada jalur yang sama dengan file .sln, dan referensi folder sebenarnya tidak disimpan dalam file .sln
rsenna
Saya menggunakan VS 2017 dan sejauh yang saya tahu, MS belum menambahkan fitur untuk memungkinkan penambahan seluruh folder ke folder solusi - file individual harus ditambahkan.
Theo

Jawaban:

43

Tidak ada pengaturan khusus. Saya tidak berpikir itu didukung.

Anda dapat membuat folder nyata dalam "proyek" dalam solusi, tetapi tidak dalam solusi itu sendiri.

svlists
sumber
1
Ini tampaknya masih akurat pada VS 2017.
Theo
2
... dan VS 2019
whymatter
salah satu hal terburuk tentang VS. Mengapa MS tidak menyimpan folder Sln sebagai opsi, tetapi JUGA mengizinkan folder NYATA ditambahkan ke solusi. Sangat mengganggu. Sistem File berfungsi, mengapa menemukan kembali roda (sebagai persegi).
MemeDeveloper
46

Ada solusi, yang benar-benar berfungsi seperti yang diharapkan .

  1. Tambahkan Situs Web Baru atau yang Sudah Ada ke Solusi. (Saya biasanya membuat yang baru.)
  2. Pastikan saja itu dibuat di dalam folder solusi Anda. (Saya terkadang bahkan membuat "tautan" ke folder eksternal, misalnya 'Dokumen' atau 'Pemasaran' di jaringan bersama. Dalam hal ini, tentunya diabaikan oleh Git.)
  3. Pastikan untuk membuka pengaturan "Project" atau Pengelola Konfigurasi untuk mengecualikan "Situs Web" ini dari Build and Deploy !

Selesai. Sekarang Solution Explorer akan mencerminkan setiap perubahan dalam sistem file dan sebaliknya (termasuk subfolder).

Saya (melewatkan) menggunakannya untuk spesifikasi, dokumen, PM, dan beberapa skrip DevOps yang dibagikan dalam tim. Mudah untuk memilih, apa yang akan disertakan dalam kontrol sumber atau tidak, dan (jika disiapkan dengan benar) tidak bertentangan dengan build.

Saya tahu fitur ini tidak ditujukan untuk kasus penggunaan tersebut, tetapi kecuali untuk ikon "Proyek" yang mungkin menyesatkan, saya belum menemukan kekurangan apa pun untuk peretasan itu. Dan masih ada kasus penggunaan di mana Folder Solusi klasik (virtual) yang disediakan VS, sesuai dengan gambar. Bagaimana menurut anda?

Michael
sumber
4
Berikut adalah petunjuk lengkapnya: Klik kanan solusi -> "Tambah" -> "Situs Web Baru ..." -> (Saya memilih "Situs Web Kosong ASP.NET"). Setelah mengubah lokasi, jangan lupa untuk menambahkan "\ MyName" ke jalur, jika tidak mengklik "OK" akan membuka kembali dialog. Setelah itu klik kanan solusi Anda -> "Properties" -> "Configuration Properties" -> hapus centang "Build" untuk proyek web.
pengguna764754
Apakah ini masih berfungsi? menggunakan VS2015 tetapi tidak berhasil.
Jan Paolo Go
Di VS2017 dengan sempurna membuat folder nyata tetapi ikon WebSite (lingkaran gelap) ditampilkan di Solution Explorer. Apakah ada yang tahu cara memperbaikinya?
Andrei Karcheuski
Ya, ini berfungsi di VS2019, tetapi masih tidak memantau perubahan sistem file. Anda harus sesekali "Segarkan" untuk melihat file saat ini. Jika hanya proyek C # bukan satu-satunya jenis solusi yang mendukung .*projformat berbasis glob-filesystem yang baru, lebih bersih dan lebih jelas .
shannon
33

Dalam Visual Studio 2017, klik ikon "Solutions and Folders" di jendela Solution Explorer. Tombol ini beralih dari tampilan "solusi" virtual ke "tampilan sumber" yang cocok dengan tata letak folder dan file pada sistem file. Saat Anda menambahkan folder baru, folder secara fisik dibuat di lokasi yang diharapkan. solusi dan folder.

OdeToCode
sumber
1
Ini berguna tetapi pada "tampilan sumber" Anda kehilangan semua pintasan klik kanan pada sebuah proyek, yaitu, "Kelola Paket NuGet".
David Liang
1
Mengapa hanya solusi atau project C ++ yang berperilaku berbeda dibandingkan dengan bahasa lain?
Friendly Ghost
1
Ini membantu saya, jadi saya membuat folder dalam tampilan folder di mana saya menginginkannya, lalu saya menambahkan folder solusi dan menambahkan proyek sebagai anak dari folder tersebut. Tidak terlalu masuk akal bagi saya, tetapi jawaban ini membantu saya
hanzolo
Inilah yang saya inginkan. Terima kasih!
pengguna1633272
10

Jawaban yang dipilih menunjukkan bahwa proyek sebenarnya dapat digunakan daripada folder solusi, tetapi tidak benar-benar menjelaskan caranya. Saya rasa apa yang saya gambarkan di sini mungkin cara yang paling tidak canggung untuk mencapai itu ... :-P

Masalah dengan file proyek biasa adalah bahwa mereka pada akhirnya akan dikompilasi oleh MSBUILD. Dan jika Anda ingin memiliki proyek yang hanya berisi file yang tidak dapat dikompilasi, itu akan menjadi masalah.

Tetapi beberapa waktu yang lalu Visual Studio memperkenalkan jenis proyek baru: Proyek Bersama (ekstensi .shproj). Jenis proyek ini tidak dikompilasi secara default, tetapi hanya jika (dan hanya jika) dirujuk oleh proyek lain.

Jadi salah satu bagian dari triknya di sini adalah menggunakan proyek bersama, bukan folder solusi . Sangat mungkin untuk menambahkan proyek bersama yang tidak pernah direferensikan oleh proyek lain, artinya kita dapat menghindari masalah yang disajikan di atas.

Kemudian, dengan menggunakan <None Include="**/*" />klausa dalam file .shproj, kita dapat membuatnya secara otomatis mencerminkan file dan / atau subfolder baru.

Jadi pada dasarnya lakukan ini:

  • Buat folder baru dalam solusi Anda.
  • Tambahkan file .shproj baru di root folder baru ini.
  • Referensi .shproj baru dalam solusi Anda.

Misalnya, dalam kasus saya, saya telah membuat DockerDev.shproj, jadi saya dapat mengelompokkan beberapa skrip terkait buruh pelabuhan yang kami jalankan hanya di mesin pengembangan kami:

<?xml version="1.0" encoding="utf-8"?>
<!-- DockerDev/DockerDev.shproj -->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="**/*" />
  </ItemGroup>
</Project>

File .shproj ini akan melacak file apa pun , di subfolder mana pun dari DockerDevfolder baru ini dalam solusi saya.

Sejauh yang saya lihat, solusi ini bekerja hampir seperti yang diminta OP: ini akan berfungsi sebagai referensi yang tidak dapat dikompilasi ke folder, dan secara otomatis akan mencerminkan perubahan apa pun yang dibuat padanya.

rsenna
sumber
Menurut pengalaman saya, ini mengakumulasi cruft segera setelah anggota tim yang tidak curiga menyentuh properti file apa pun; setelah itu Anda memiliki file duplikat yang muncul di panel navigasi. Dalam beberapa kondisi, setiap file berakhir di file .proj dan kemudian keburukan terjadi. Meskipun saya tidak suka menyerah, saya masih lebih suka pendekatan 'Tambahkan Situs Web yang Ada'.
shannon
@shannon Saya tidak pernah mengalami perilaku yang Anda sebutkan, tetapi "tidak adanya bukti bukanlah bukti ketidakhadiran", jadi begitulah. Tapi saya menggunakan proyek bersama setiap hari, jadi saya pikir itu juga penting. Mengenai Proyek Situs Web (WSP), mereka juga bisa bekerja, saya kira, sudah lama saya tidak menggunakannya.
rsenna
8

Sara Ford menyumbangkan Makro untuk menambahkan melakukan ini. Dalam Visual Studio 2010, jika Anda membuka Macro Explorer, Anda akan melihat makro yang disebut "GenerateSlnFolderOnDirStructure." Ini akan mengotomatiskan pembuatan Folder Solusi dan menambahkan file.

SwampyFox
sumber
6

Folder Ke Folder Solusi Oleh Cecilia Wirén - CeciliaSHARP

Hapus kerumitan menambahkan beberapa file ke folder solusi. Cukup gunakan menu konteks untuk solusinya dan tepat di bawah opsi membuat folder solusi baru, Anda sekarang menemukan 'Tambahkan Folder sebagai Folder Solusi'. Ini akan membuat folder solusi dengan nama yang sama seperti yang Anda pilih dan menambahkan item di dalam folder itu ke folder solusi. Ini tidak akan memindahkan file pada disk.

ryan
sumber
3

Tidak, itu tidak didukung. Seperti yang Anda duga, folder solusi hanyalah subentri virtual dalam file .sln, tidak ada hubungannya dengan sistem file.

Alan
sumber
3

Studio visual tidak mendukung ini. Saya membuat ekstensi yang melakukan hal serupa untuk VS2013. Ini memetakan folder solusi ke folder fisik pada hard drive Anda, meskipun pemetaan adalah salah satu cara (dari hard drive ke solusi). Artinya, konten folder solusi akan mencerminkan konten folder hard drive, dan bukan sebaliknya.

Dengan cara itu, ekstensi mungkin masih berguna. Ini memiliki dukungan untuk memetakan folder solusi ke folder fisik, memfilter file dan direktori berdasarkan regex, dan mengingat pemetaan di file .sln Anda. Properti tidak mengganggu sehingga pengembang tanpa ekstensi masih dapat membuka sln dan tidak terpengaruh.

Di-host di galeri studio visual: https://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd

Edit: Diunggah ke bitbucket. Sekarang open source. Lisensi MIT. https://bitbucket.org/LSS_NorthWind/physical-solution-folders

angin utara
sumber
3

Catatan: Ya, ini memungkinkan Anda dapat membuat folder di root tetapi sedikit rumit ....

Dengan memberikan beberapa upaya ekstra Anda dapat melakukannya Bagaimana? Ayo ikuti langkahnya--

  • 1-Buat Folder misalnya: " newfolder " pada root (di mana Anda Sln file yang tinggal).
  • 2. Salin dan tempel proyek Anda di dalam folder.
  • 3. pergi ke file SLN Anda dan temukan proyek yang dipindahkan dan tambahkan folder baru \ di alamat proyek yang dipindahkan.
  • 4. Simpan file sln.
  • 5. Buka proyek Anda dan Komit repositori di git atau lebih ...
  • 6. Ambil repositori di lokasi baru.

    Kamu selesai...

jika masih Anda tidak dapat melihat folder Anda -----

  • 1. Tambahkan folder solusi xyz.
  • 2. Buka file sln dan ubah nama folder itu dengan nama folder Anda.

Selamat kamu sudah selesai ..

Jika Anda menghadapi masalah, kirimkan saya bantuan ..

Ankit
sumber
3

Buat "folder Solusi". Ini akan membuat folder logis, tetapi bukan folder fisik. Klik kanan ke folder solusi dan buka dialog proyek baru. Tetapi sebelum Anda mengklik OK, Anda harus mengubah lokasi proyek ke folder fisik yang Anda inginkan dan VS akan membuatnya dan menempatkan proyek di dalamnya.

rc21
sumber
1

Anda dapat menambahkan folder nyata dengan memilih "Tambahkan filter baru" untuk file proyek Visual Studio. Anda juga dapat melakukan "Tambahkan filter baru" di bawah folder yang ada. Setelah folder dibuat, ganti namanya dan tambahkan file sumber atau header atau mana saja yang sesuai dengan proyek Anda. Ini adalah salah satu cara saya tahu yang memungkinkan kita membuat folder nyata melalui Visual Studio IDE.

Abhijit K Rao
sumber
Fitur ini khusus untuk proyek C ++.
Tamir Daniely
Solusi ini juga berlaku untuk Proyek VS - pertanyaannya adalah tentang folder tingkat Solusi.
Theo
0

Folder yang dibuat di bawah solusi akan menjadi virtual seperti yang dikatakan. Mungkin ini bisa disebut solusi, tetapi Anda dapat secara fisik membuat folder pada disk baik sebelum atau ketika Anda menambahkan item / proyek baru dan Robert harusnya saudara kandung ayah Anda.

ps- di lihat lebih dekat mungkin saya harus menjelaskan "bob's paman Anda" berarti Anda baik-baik saja / diurutkan.

merpati
sumber
Apakah penting jika Robert adalah saudara laki-laki ibumu?
Darrel Lee
0

Saya sendiri menginginkan fitur ini beberapa kali, tetapi pada akhirnya, Anda benar-benar TIDAK menginginkan kemampuan untuk melakukan ini. Pikirkan Solusi (file) Anda sebagai root dari aplikasi web dan pikirkan folder Solusi sebagai Direktori Virtual (secara harfiah dan fungsional). Isi direktori virtual web secara fisik dapat berada di server yang berbeda. Di mana Visual Studio mengacaukan konsep folder solusi dengan memungkinkan Anda membuat file baru di dalam folder. Anda harus selalu "Tambahkan yang Ada" saat menambahkan konten. Saat Anda menambahkan yang sudah ada, ini membuat link ke lokasi sumber file.

Tetapi karena alasan Anda tidak ingin folder solusi berperilaku seperti folder "fisik" adalah karena tata letak solusi Anda mungkin tidak selalu menggunakan konvensi yang sama seperti tata letak kontrol sumber Anda. Folder solusi memungkinkan Anda untuk menyesuaikan hierarki proyek Anda sehingga Anda dapat mengelompokkan proyek dan item bersama-sama sesuka Anda, dan kemudian memutuskan Anda tidak menyukainya dan mengubahnya lagi tanpa harus melalui mimpi buruk memindahkan item kontrol sumber sekitar dan mengganggu anggota tim Anda yang lain.

Paul Easter
sumber
1
Ini adalah jawaban yang benar - buat file pada disk di folder dengan nama yang sama dengan folder virtual, lalu tambahkan file di VS menggunakan 'Tambahkan yang ada'.
Richard
4
Mereka dapat dengan mudah menerapkan folder virtual dan fisik. Ini jelas mengabaikan. Lihat referensi: setiap IDE lainnya, pernah.
Tamir Daniely
6
Saya tidak mengerti sama sekali mengapa konsep (IIS) Direktori Virtual ada hubungannya dengan folder solusi. Mengenai argumen kendali sumber, saya tidak melihat masalahnya. Mengapa pemindahan file mengganggu anggota tim Anda yang lain? Ini operasi biasa. Dan mengapa Anda ingin tata letak file dalam kontrol sumber berbeda dari tata letak fisik?
pengguna247702
2
Folder solusi fisik akan membuat lebih mudah (meskipun hanya sedikit) untuk membuat struktur folder modern seperti NancyFx ini , di mana beberapa proyek jatuh ke dalam kategori seperti src, test, tools, dll Anda pasti akan ingin membuat keputusan pada awal proyek ke titik Anda tentang mengganggu tim, tapi itu berlaku untuk sebagian besar keputusan arsitektur.
Eric Eskildsen
3
-1 Kasus penggunaan saya adalah ini: terkadang kami hanya ingin menambahkan dokumen tertentu ke solusinya. Mereka tidak akan dibuat, tetapi disimpan dalam kendali sumber. Kami biasanya memiliki folder khusus untuk mereka. Saya ingin memiliki yang folder dalam solusi saya - bukan file itu berisi, tapi folder itu sendiri. Ya, ada cara untuk melewati batasan ini, tetapi tidak optimal. Memiliki referensi aktual ke folder dalam solusi hanya akan berfungsi.
rsenna
0

Saya punya sedikit solusi untuk ini (ini tidak bagus, tapi berhasil).

  1. Buat folder di solusi Anda (yaitu "Contoso")
  2. Klik kanan pada solusi dan kemudian klik "Buka Folder di Solution Explorer"
  3. Buat folder fisik (yaitu "Contoso") di direktori solusi
  4. Salin / Buat file di folder fisik.
  5. Seret file ke folder virtual di penjelajah solusi.

Ini tidak bagus karena Anda perlu memelihara referensi file secara manual, tetapi itu berfungsi untuk saya.

Matthew Layton
sumber