Visual Studio projelerindeki klasörler için "Bağlantı Olarak Ekle"


128

Visual Studio'da, çözümdeki başka bir projede bulunan bir dosyaya bağlantı eklemek için "Bağlantı olarak ekle" yapabiliriz.

Bunu tüm klasörler için yapmanın bir yolu var mı, böylece A projesindeki bir klasörün tamamı, bu klasördeki yeni öğelere manuel olarak bağlanmaya gerek kalmadan B projesinde görünür olacak mı?

Yanıtlar:


142

Bu blog gönderisinin de belirttiği gibi, bu mümkündür.

<ItemGroup>
    <Compile Include="any_abs_or_rel_path\**\*.*">
        <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
    </Compile>
</ItemGroup>

Ancak dosyaların kopyalanmayacağını unutmayın.


18
+1. Ayrıca <Content ...>, <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>Visual Studio'nun kaynakları derlemede kopyalamasını sağlamak için kullanabilir ve ekleyebilirsiniz .
Markus Jarderot

8
Kullanımına deneyin: <None>...</None>yerine <Compile>...</Compile>. Ama sanırım bu dosyaları yine de kopyalayacak, VisualStudio bile bunu bağlantılı dosyalarla yapıyor.
mo.

4
@mo. cevabınız proje kök dizinindeki tüm dosyalara bağlantılar ekler, bazen uygun değildir. % (RecursiveDir) bir bağlantı klasörü adıyla değiştirilmelidir: örneğin, bu çözümdeki başka bir projedeki wp7 projesindeki 'MyMainProject' kaynak klasörünü bağlamak için: <ItemGroup> <Compile Include = ".. \ .. \ MyMainProject \ MyMainProject \ engine *. * "> <Link> engine \% (FileName) </Link> </Compile> </ItemGroup>
Tertium

24
<Link>%(RecursiveDir)%(FileName)%(Extension)</Link>Uzantıları dosya adlarından düşürmesini önlemek için kullanmak zorunda kaldım .
Joe Daley

2
Simge Png Kaynakları için: <EmbeddedResource Include = ".. \ .. \ Icons \ 16 * .png">
ChrisB

126

VS2012 ve sonrasında, alt tuşuna basılı tutarak bir klasörü başka bir projeye sürükleyebilirsiniz . Bu, her dosyayı manuel olarak bağlantı olarak eklemekle aynıdır, ancak daha hızlıdır.

upd : VS2013 update 2 ( Shared Project Reference Manager ile ) veya VS2015 kullanıyorsanız, Paylaşılan Projeleri kullanmayı düşünün .


1
VS2010'da, bunu yapmak dosyaları ve dizinleri bağlantı olarak eklemek yerine kopyalar ve istenmeyen kopyalar oluşturur.
Tom

3
Not: klasör Windows gezgininden sürüklenmelidir (başka bir visual studio örneğinden değil). Ayrıca, sağ tıklama ile değil, sol tıklama ile sürükleme olmalıdır. VS2012'de harika çalışıyor.
davidpricedev

11
Bence sadece kaynaklar klasöründeki her dosyaya bağlantı oluşturuyor, klasörün kendisine bir bağlantı oluşturmuyor. Bu, kaynak klasöre bir dosya eklerseniz, otomatik olarak bağlanmayacağı anlamına gelir.
Johnny5

1
@MauryMarkowitz, bir klasörü Windows gezgininden veya başka bir şeyden değil, VS projesinden sürüklemelisiniz.
mt_serg

1
@MauryMarkowitz, tek çözüm, iki proje. Folder1'i alt tuşuna basılı tutarak Project1'den Project2'ye sürükleyin. Proje1 / Klasör1'deki her dosya bağlantı olarak Proje2 / Klasör1'e eklenecektir.
mt_serg

37

Aydan gelen yanıta bir ekleme . ve Marcus'un yorumu, içerik öğelerini bağlıyorsanız, dosya uzantısını eklemeniz gerekecek:

<ItemGroup>
  <Compile Include="any_abs_or_rel_path\**\*.*">
    <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Compile>
</ItemGroup>

bunun <Compile ...içinde ne var . Benim durumumda, .tsdosyaları yeni projeme yönlendirmem gerekiyor. nasıl yapılır. Teşekkürler!
Rahmathullah M

23

Orijinal sorgunun bağlantılı bir klasörün IDE'de görünmesi kısmıyla ilgili olarak, bunu başarmak bir nevi mümkündür, böylece çözüm gezgininde tüm bağlantılı dosyaların kök dizininde görünmesi yerine, içindeki tüm bağlantılı dosyaların bulunduğu bir klasör vardır. çözüm. Bunu başarmak için ilaveyi dahil edin:

  <ItemGroup>
    <Compile Include="..\anypath\**\*.*">
      <Link>MyData\A\%(RecursiveDir)%(FileName)%(Extension)</Link>
    </Compile>
  </ItemGroup>

Bu, bağlı dizindeki tüm dosyaları MyData adlı çözüm gezgininde yeni bir klasörde içerecektir. Yukarıdaki koddaki 'A' herhangi bir şey olarak adlandırılabilir ancak klasörün görünmesi için orada olması gerekir.


hile yapıyor gibi görünüyor, ancak Form dosyalarını tek bir dosyaya katlamıyor ve .resx dosyaları için hata veriyor (VB kullanıyorum). Yine de teşekkürler.
Ivan Ferrer Villa

1
@IvanFerrerVilla, evet, fark ettiğim bazı sorunları var, ancak çoğu zaman sadece görünüm için iyi.
Adam

3
Visual Studio 2015 ile bu, "A" olmadan bile benim için çalıştı.
Martin

7

Referans olarak bir klasör eklemek istiyorsanız ve onu derlemek istemiyorsanız şunu kullanın:

<Content Include="any_path\**\*.*">
  <Link>folder_in_B_project\%(RecursiveDir)%(FileName)%(Extension)</Link>
</Content>

0

Kabuğu çıkarın ve sembolik bir bağlantı ekleyin.

runas Yöneticisi sonra

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

BAM sembolik bağlantı!

/ d, dizin bağlantısını belirtir.

Kutudan çıkar çıkmaz Vista'da çalışır. XP'ye geri aktarılabilir.

Belgeler burada: http://technet.microsoft.com/en-us/library/cc753194%28WS.10%29.aspx

Sembolik bağlara aşina olmayanlar için, esasen başka bir dosya veya dizine işaretçi. Uygulamalar için şeffaftır. Diskte bir kopya, onu ele almanın birkaç yolu. Ayrıca başka bir adrese işaretçi olmayan, ancak aynı dosya için NTFS'de gerçek bir dosya kimliği girişi olan bir "sabit bağlantı" da oluşturabilirsiniz.

NOT: yorumlarda belirtildiği gibi, bu yalnızca sembolik bağlantıyı oluşturduğunuz bilgisayarda çalışır ve git gibi bir Sürüm Kontrol Sisteminde çalışmaz.


2
Bu yalnızca tek bir geliştirici için yararlı olacaktır (komut dosyası yazılmadıkça). Diğer çözümler, paylaşılan kaynak kodunun bir parçasını oluşturur, bu nedenle evrensel olarak daha kullanışlıdır.
JRoughan

Sorulan soru, paylaşılan kaynak koduyla ilgili değildi. Bununla birlikte, msysgit sembolik bağlantıları desteklemiyor, bu yüzden serseri.
John Vance

1
Bu bir dosya sistemi sorusu değil. Ayrıca, bu fikrin farklı kaynak kontrol sistemleri ve yedek
resore

Görünüşe göre sorumu düzenleme veya silme iznim yok. İlk itirazınız aptalca. Soru aynı zamanda açıkça bir proje dosyası düzenleme sorusu değildi, bu nedenle tüm bu yanıtları da aşağı oylamalısınız. İkinci itirazınız not edildi ve cevabımı bu uyarıyı eklemek için düzenleyebilirsem, yapardım.
John Vance
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.