Gerçek Klasörler olarak Visual Studio Solutions Klasörü


122

Bir Visual Studio Çözümüm var. Şu anda boş bir çözüm (= proje yok) ve birkaç çözüm klasörü ekledim.

Çözüm Klasörleri yalnızca "sanal klasörler" gibi görünmektedir, çünkü gerçekten Dosya Sisteminde oluşturulmazlar ve çözüm klasörlerinin içindeki dosyalar .sln dosyasıyla aynı klasörde bulunur.

Visual Studio'ya Çözüm Klasörlerini "gerçek" klasörler olarak ele almasını, yani onları dosya sisteminde oluşturmasını ve bunları çözümün içinde bu klasörlerden birine taşıdığımda dosyaları klasörün içine taşımasını söyleyen gözden kaçırdığım bir ayar var mı?

Düzenleme: Teşekkürler. VS2010 için bir öneri yapacak o zaman :)


52
Bu en sinir bozucu Visual Studio tuhaflıklarından biri
Andy White

Bu tuhaflıkla nasıl doğru bir şekilde başa çıkabilirim?
hellboy

Komik olan şey, Rider türünde bu özelliğe sahip (ancak klasörün .sln dosyasıyla aynı yolda olması gerekir ve gerçek klasör referansı .sln dosyasının kendisinde depolanmaz): jetbrains.com/help/rider/Extending_Your_Solution. html
rsenna

VS 2017 kullanıyorum ve anlayabildiğim kadarıyla MS henüz bir çözüm klasörüne tüm klasörlerin eklenmesine izin veren bir özellik eklemedi - tek tek dosyalar eklenmelidir.
Theo

Yanıtlar:


42

Özel bir ayar yok. Desteklendiğini sanmıyorum.

Çözüm içindeki bir "proje" içinde gerçek klasörler oluşturabilirsiniz, ancak çözümün kendisinde olamaz.


1
Bu hala VS 2017 itibarıyla doğru görünüyor.
Theo

2
... ve VS 2019
whymatter

VS ile ilgili en kötü şeylerden biri. MS neden Sln klasörlerini bir seçenek olarak tutmuyor, ancak AYRICA GERÇEK klasörlerin çözüme eklenmesine izin veriyor. Çok can sıkıcı. Dosya Sistemi işe yarıyor, neden tekerleği yeniden icat etmelisiniz (kare olarak).
MemeDeveloper

46

Aslında beklendiği gibi davranan bir geçici çözüm var .

  1. Çözüme Yeni veya Mevcut Bir Web Sitesi Ekleyin . (Genellikle yeni bir tane yaratırım.)
  2. Çözüm klasörünüzde oluşturulduğundan emin olun. (Bazen bir ağ paylaşımında 'Dokümanlar' veya 'Pazarlama' gibi harici bir klasöre bir "bağlantı" bile oluşturuyorum. Bu durumda elbette Git tarafından yok sayılır.)
  3. Bu "Web Sitesini" Build and Deploy'dan hariç tutmak için "Proje" ayarlarına veya Configuration Manager'a gittiğinizden emin olun !

Bitti. Şimdi Çözüm Gezgini dosya sistemindeki herhangi bir değişikliği yansıtacak ve bunun tersi de (alt klasörler dahil) olacaktır.

Ekip içinde paylaşılan özellikler, dokümanlar, PM ve bazı DevOps komut dosyaları için kullanıyorum (özlüyorum). Kaynak denetimine nelerin dahil edilip edilmeyeceğini seçmek kolaydır ve (doğru ayarlanmışsa) derleme ile çakışmaz.

Özelliğin bu kullanım durumu için tasarlanmadığını biliyorum, ancak belki yanıltıcı "Proje" simgesi dışında bu hack için henüz herhangi bir eksiklik bulamadım. Ve hala VS'nin sağladığı klasik (sanal) Çözüm Klasörlerinin resme sığdığı kullanım durumları vardır. Ne düşünüyorsun?


4
İşte tam talimatlar: Çözüme sağ tıklayın -> "Ekle" -> "Yeni Web Sitesi ..." -> ("ASP.NET Boş Web Sitesi" ni seçtim). Konumu değiştirdikten sonra yola "\ MyName" eklemeyi unutmayın, aksi takdirde "Tamam" ı tıklamak iletişim kutusunu yeniden açacaktır. Bundan sonra çözümünüze sağ tıklayın -> "Özellikler" -> "Yapılandırma Özellikleri" -> web projesi için "Oluştur" seçeneğinin işaretini kaldırın.
user764754

Bu hala çalışıyor mu? VS2015 kullanıyor ancak çalışmıyor.
Jan Paolo Go

VS2017'de mükemmel bir şekilde gerçek bir klasör oluşturur, ancak Çözüm Gezgini'nde görüntülenen WebSite simgesi (koyu daire). Bunu nasıl düzelteceğini bilen var mı?
Andrei Karcheuski

Evet, VS2019'da çalışıyor, ancak dosya sistemi değişikliklerini hala izlemiyor. Mevcut dosyaları görmek için ara sıra "Yenileme" yapmanız gerekir. Yeni, daha temiz ve daha net dosya sistemi glob tabanlı .*projbiçimi destekleyen tek çözüm türü yalnızca C # projeleri olmasaydı .
shannon

34

Visual Studio 2017'de, Çözüm Gezgini penceresindeki "Çözümler ve Klasörler" simgesine tıklayın. Bu düğme, sanal "çözüm" görünümünden dosya sistemindeki klasörlerin ve dosyaların düzeniyle eşleşen "kaynak görünümüne" geçiş yapar. Yeni bir klasör eklediğinizde, klasör fiziksel olarak beklenen konumda oluşturulur. çözümler ve klasörler.


1
Bu yararlıdır, ancak "kaynak görünümünde" bir projedeki tüm sağ tıklama kısayollarını kaybettiniz, yani "NuGet Paketlerini Yönetin".
David Liang

1
Neden yalnızca C ++ çözümleri veya projeleri diğer dillerden farklı davranıyor?
Sevimli Hayalet

2
Bu bana yardımcı oldu, bu yüzden klasör görünümünde istediğim yerde bir klasör oluşturdum, sonra bir çözüm klasörü ekledim ve projeyi klasörün alt öğesi olarak ekledim. Bana pek mantıklı gelmiyor, ama bu cevap bana yardımcı oldu
hanzolo

1
Bu tam olarak istediğim şey. Teşekkürler!
user1633272

10

Seçilen cevap, çözüm klasörleri yerine gerçek projeleri kullanmanın mümkün olacağını öne sürüyor, ancak nasıl olduğunu gerçekten açıklamıyor. Sanırım burada anlattığım şey muhtemelen bunu başarmanın en az garip yolu ... :-P

Normal proje dosyalarındaki sorun, en sonunda tarafından derlenecek olmalarıdır MSBUILD. Ve sadece derlenemeyen dosyalar içeren bir projeye sahip olmak istiyorsanız, bu bir sorun olacaktır .

Ancak bir süre önce Visual Studio yeni bir proje türü sunmuştur : Paylaşılan Proje (.shproj uzantısı). Bu proje tipi yok değil varsayılan olarak derlenmiş olsun, ama (sadece eğer) sadece başka bir proje tarafından başvurulmaktadır.

Yani buradaki püf noktalarından biri , çözüm klasörleri yerine paylaşılan projeleri kullanmaktır . Başka bir proje tarafından asla referans verilmeyen paylaşılan bir proje eklemek açıkça mümkündür, bu da yukarıda sunulan sorundan kaçınabileceğimiz anlamına gelir.

Daha sonra, <None Include="**/*" />.shproj dosyasında cümle kullanarak , yeni dosyaları ve / veya alt klasörleri otomatik olarak yansıtabiliriz.

Yani temelde şunu yapın:

  • Çözümünüzde yeni bir klasör oluşturun.
  • Bu yeni klasörün köküne yeni bir .shproj dosyası ekleyin.
  • Çözümünüzde yeni .shproj dosyasını referans alın.

Örneğin, benim durumumda bir DockerDev.shproj oluşturdum, böylece yalnızca geliştirme makinelerimizde çalıştırdığımız bazı docker ile ilgili betikleri gruplayabilirim:

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

Bu .shproj dosyası, çözümümdeki bu yeni klasörün herhangi bir alt klasöründeki herhangi bir dosyanın kaydını tutacaktır .DockerDev

Görebildiğim kadarıyla, bu çözüm OP'nin talep ettiği gibi çalışıyor: bir klasöre derlenemeyen bir referans olarak çalışacak ve üzerinde yapılan değişiklikleri otomatik olarak yansıtacaktır.


Tecrübelerime göre, bu, şüphelenmeyen bir ekip üyesi herhangi bir dosya özelliğine dokunur dokunmaz acımasızlığı biriktirir; bundan sonra gezinme bölmesinde görünen yinelenen dosyalarınız olur. Bazı koşullar altında her dosya .proj dosyasında numaralandırılır ve ardından çirkinlik ortaya çıkar. Vazgeçmekten hoşlanmasam da 'Mevcut Web Sitesini Ekle' yaklaşımını tercih ediyorum.
shannon

@shannon Bahsettiğiniz davranışı hiç yaşamadım, ancak "kanıtın olmaması yokluğun kanıtı değildir", bu yüzden var. Ancak günlük olarak paylaşılan projeler kullanıyorum, bu yüzden bunun da önemli olduğunu düşünüyorum. Web Sitesi Projelerine (WSP) gelince, onlar da işe yarayabilir, sanırım, uzun zamandır kullanmıyorum.
rsenna

8

Sara Ford bunu yapmak için bir Makro ile katkıda bulundu. Visual Studio 2010'da, Makro Gezgini'nizi açarsanız, "GenerateSlnFolderOnDirStructure" adlı bir makro görürsünüz. Bu, Çözüm Klasörlerinin oluşturulmasını otomatikleştirecek ve dosyaları ekleyecektir.


6

Klasörden Çözüm Klasörüne Yazan Cecilia Wirén - CeciliaSHARP

Çözüm klasörüne birkaç dosya ekleme zahmetini ortadan kaldırın. Çözüm için bağlam menüsünü kullanın ve yeni bir çözüm klasörü oluşturma seçeneğinin hemen altında artık 'Klasörü Çözüm Klasörü Olarak Ekle'yi bulacaksınız. Bu, seçtiğinizle aynı ada sahip bir çözüm klasörü oluşturacak ve bu klasörün içindeki öğeleri çözüm klasörüne ekleyecektir. Bu, dosyaları diskte taşımaz.


3

Hayır, desteklenmiyor. Şüphelendiğiniz gibi, çözüm klasörleri .sln dosyasındaki sanal alt girişlerdir, dosya sistemiyle hiçbir ilgisi yoktur.


3

Visual Studio'nun buna desteği yok. Yine de VS2013 için benzer bir şey yapan bir uzantı yaptım. Eşleme tek yönlü olsa da (sabit sürücüden çözüme) çözüm klasörlerini sabit sürücünüzdeki fiziksel klasörlerle eşler. Bu, bir çözüm klasörünün içeriğinin sabit sürücü klasörünün içeriğini yansıtacağı anlamına gelir, diğer şekilde değil.

Bunun dışında, uzantı hala yararlı olabilir. Çözüm klasörlerini fiziksel klasörlerle eşleme, dosyaları ve dizinleri regex'e göre filtreleme ve .sln dosyanızdaki eşlemeleri hatırlama desteği vardır. Özellikler müdahaleci değildir, bu nedenle uzantıya sahip olmayan geliştiriciler yine de sln'yi açabilir ve etkilenmez.

Görsel stüdyo galerisinde barındırılıyor: https://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd

Düzenleme: Bitbucket'a yüklendi. Şimdi açık kaynak. MIT lisansı. https://bitbucket.org/LSS_NorthWind/physical-solution-folders


3

Not: Evet, bu mümkündür, kök üzerinde bir klasör oluşturabilirsiniz, ancak biraz zordur ...

Ekstra çaba göstererek bunu Nasıl yapabilirsiniz? Adımları takip edelim--

  • 1-Klasör Oluştur, örneğin: "yeni klasör " kök üzerinde (.sln dosyanızın bulunduğu yer).
  • 2. Projelerinizi kopyalayıp klasörün içine yapıştırın.
  • 3. sln dosyanıza gidin ve taşınan projeleri bulun ve taşınan projenin adresine yeni klasör \ ekleyin.
  • 4. sln dosyasını kaydedin.
  • 5. Projenizi açın ve depoyu git ya da öylesine teslim edin ...
  • 6. Depoyu yeni bir yere alın.

    Bitirdiniz...

hala klasörünüzü göremiyorsanız -----

  • 1. xyz çözüm klasörü ekleyin.
  • 2. sln dosyasını açın ve bu klasör adını klasör adınızla değiştirin.

Tebrikler, bitirdiniz ..

Herhangi bir sorunla karşılaşırsanız yardım için bana yazın ..


3

"Çözüm klasörü" oluşturun. Bu mantıksal klasör oluşturacak, ancak fiziksel bir klasör oluşturmayacaktır. Çözüm klasörüne sağ tıklayın ve yeni bir proje iletişim kutusu açın. Ancak Tamam'ı tıklamadan önce, bir proje konumunu istediğiniz fiziksel klasörle değiştirmeniz gerekir ve VS onu oluşturacak ve projeyi içine yerleştirecektir.


1

Bir Visual Studio proje dosyası için "Yeni filtre ekle" yi seçerek gerçek klasörler ekleyebilirsiniz. Mevcut bir klasörün altına "Yeni filtre ekle" de yapabilirsiniz. Klasör oluşturulduktan sonra yeniden adlandırın ve kaynak veya başlık dosyası veya projenize uygun olanı ekleyin. Bu, Visual Studio IDE aracılığıyla gerçek klasörler oluşturmamızı sağlayan bildiğim bir yoldur.


Bu özellik, C ++ projelerine özeldir.
Tamir Daniely

Bu çözüm VS Projeleri için de geçerlidir - soru, Çözüm düzeyi klasörlerle ilgilidir.
Theo

0

Çözümün altında oluşturulan klasör söylendiği gibi sanal olacaktır. Belki buna geçici çözüm denilebilir, ancak yeni öğe / proje eklemeden önce veya eklediğinizde diskte fiziksel olarak klasör oluşturabilirsiniz ve Robert babanızın kardeşi olmalıdır.

ps- daha yakından bakın belki de "bob amcan" ın senin cezan anlamına geldiğini açıklamalıyım.


Robert'ın annenizin kardeşi olması fark eder mi?
Darrel Lee

0

Birkaç kez ben, ama günün sonunda, gerçekten yok bu özelliği istemişimdir DEĞİL bunu yapma işlevini istiyorum. Çözümünüzü (dosyanızı) bir web uygulamasının kökü olarak düşünün ve Çözüm klasörlerini Sanal Dizinler (kelimenin tam anlamıyla ve işlevsel olarak) olarak düşünün. Bir web sanal dizininin içeriği fiziksel olarak tamamen farklı bir sunucuda olabilir. Visual Studio'nun çözüm klasörleri kavramını karıştırdığı nokta, klasörün içinde yeni dosyalar oluşturmanıza izin vermesidir. İçerik eklerken her zaman "Mevcut Olanı Ekle" yapmalısınız . Var olanı eklediğinizde, dosyanın kaynak konumuna bir bağlantı oluşturur.

Ancak çözüm klasörlerinin "fiziksel" klasörler gibi davranmasını istememenizin nedeni, çözüm düzeninizin kaynak kontrol düzeninizle aynı kuralı kullanmaması olabilir. Çözüm klasörleri, projelerinizin hiyerarşisini özelleştirmenize olanak tanır, böylece projeleri ve öğeleri istediğiniz şekilde gruplayabilir ve ardından beğenmediğinize karar verebilir ve kaynak kontrol öğelerini taşıma kabusundan geçmek zorunda kalmadan yeniden değiştirebilirsiniz. etrafında ve ekibinizin geri kalanını rahatsız ediyor.


1
Bu doğru cevaptır - dosyayı diskteki sanal klasörle aynı ada sahip bir klasörde oluşturun, ardından dosyayı 'Varolan ekle' seçeneğini kullanarak VS'ye ekleyin.
Richard

4
Hem sanal hem de fiziksel klasörleri kolayca uygulayabilirlerdi. Açıkça bir gözden kaçırma. Referansa bakın: diğer tüm IDE'ler.
Tamir Daniely

6
(IIS) Sanal Dizinler kavramının neden çözüm klasörleriyle ilgisi olduğunu hiç anlamıyorum. Kaynak kontrol argümanına gelince, sorunu görmüyorum. Dosya hareketleri neden ekibinizin geri kalanını rahatsız ediyor? Bu yaygın bir operasyon. Ve neden kaynak kontrolündeki dosyaların düzeninin fiziksel düzenden farklı olmasını istersiniz?
user247702

2
Fiziksel çözüm klasörleri o (sadece biraz olsa) daha kolay gibi modern klasör yapılarının oluşturulması yapacak NancyFx en çoklu projeler gibi kategoriye ayrılır, src, test, tools, vb Kesinlikle ilgili noktaya proje başlangıçta bu kararı vermek isterdim ekibi rahatsız ediyor, ancak bu çoğu mimari karar için geçerli.
Eric Eskildsen

3
-1 Benim kullanım durumum şudur: bazen çözüme sadece belirli belgeleri eklemek isteriz. İnşa edilmeyecekler, ancak kaynak kontrolünde tutulacaklar. Genellikle onlar için özel bir klasörümüz var. Çözümümde bu klasörün olmasını istiyorum - içerdiği dosyalar değil, klasörün kendisi. Evet, bu sınırlamayı aşmanın yolları vardır, ancak bunlar optimal değildir. Çözümdeki bir klasöre gerçek bir referans olması işe yarayacaktır.
rsenna

0

Bunun için biraz geçici çözümüm var (bu harika değil, ama işe yarıyor).

  1. Çözümünüzde bir klasör oluşturun (yani "Contoso")
  2. Çözüme sağ tıklayın ve ardından "Klasörü Çözüm Gezgini'nde Aç" seçeneğine tıklayın
  3. Çözüm dizininde fiziksel klasörü (yani "Contoso") oluşturun
  4. Fiziksel klasördeki dosyaları kopyalayın / oluşturun.
  5. Dosyaları çözüm gezginindeki sanal klasöre sürükleyin.

Harika değil çünkü dosya referanslarını manuel olarak korumanız gerekecek, ancak benim için çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.