TFS'yi paketlerim klasörü yoksay


332

TFS'yi (2013) packagesklasörümü yok saymaya çalışıyorum . NuGet'i kullandığım için tutkuyla kaynak kontrolünü istemiyorum ve harika!

Gizlemeyi denedim (işe yaramadı), .tfignoredosya eklemeyi denedim - hiçbir şey göz ardı edilmedi . TFS ekibi neden birçok Subversion istemcisinin yaptığı gibi bir klasörü veya dosyayı kalıcı olarak yoksayma seçeneği eklemiyor ?!


TFS ve Visual Studio'nun hangi sürümlerini kullanıyorsunuz? Yerel veya sunucu çalışma alanları mı kullanıyorsunuz?
James Reed

Görünüşe göre bir NuGet
user2864740 29:14


1
Bu sorunun cevabını değiştirmelisiniz
Chris Marisic

3
NuGet kullanıyorsanız Packages klasörü gereklidir. NuGet'i derleme sırasında eksik olan ikili dosyaları geri yükleyecek şekilde ayarlayabilirsiniz (böylece, paketleri klasörünü kontrol edip ikili dosyaları yok sayabilirsiniz). - Ama bununla ilgili sorunlar var: Bir NuGet ikili dosyasının güncellenmesi (sürüm numarası değişmeden) veya kaldırılması, vb. - Her türlü garip tuhaflığın gerçekleşmesi mümkündür. Yapılarınızı şansa bırakmayın - tüm paketler klasörünü kontrol edin. Kendinize çok fazla baş ağrısı kurtaracaksınız.
BrainSlugs83

Yanıtlar:


497

İşte anlaşma: NuGet ve TFS'ye paketleri görmezden gelmelerini söylemeliyiz , çünkü NuGet kesinlikle yapmaması gereken kaynak kontrolü ile ilgili şeyler yapmaya çalışıyor (kötü form, Microsoft!). Yani iki şey yapmanız gerekiyor.

İlk olarak, adlı bir dosya eklemek .tfignoreçözüm klasörüne (eksikliğini not ssonra tf). İçeriği aşağıdaki gibi olmalıdır:

\packages

Bu TFS'ye paketleri klasörünüzü yoksaymasını söyler. Şimdi, bunun da dosyayı görmezden geleceğini düşünürsünüzrepositories.config . Ama olmayacak. Neden? Kim bilir, Microsoft'un yolları garip ve gizemli. Aslında, aşağıda özetlediğim NuGet şeylerinin bir parçası olduğunu düşünüyorum, ancak bu gelecekte sabitlenecekse ve repositories.configVS'nin onu yeniden oluşturmasına izin vermek yerine dosyayı tutmak istiyorsanız , bunu kullanabilmelisiniz:

\packages
!\packages\repositories.config

Tamam, şimdi .tfignoredosyamız sayesinde TFS paketlerinizi görmezden geliyor. Her şey yolunda değil mi? YANLIŞ , çünkü NuGet kaynak kontrolünüzle uğraşıyor ve paketleri bekleyen değişikliklerinize ekliyor. Şimdi NuGet'e zaten kesmesini söyleyelim.

.nugetÇözüm klasörünüzün kökünde adlı bir klasör oluşturun . 1 Şimdi adlı bir dosya oluşturun NuGet.configve bu yeni klasöre yerleştirin 2 . İçeriği şöyle görünmelidir:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

Ve şimdi paketleriniz kaynak kontrolünün dışında kalmalıdır. Asla kaybolmamak için NuGet.configve .tfignoredosyalarını kaynak denetimine eklemeyi unutmayın .

DÜZENLE: Sorun yaşıyorsanız, paketler klasörünüzü silmek, bu değişikliği kontrol etmek ve ardından yukarıdaki adımları uygulamak isteyebilirsiniz.

AYRICA DÜZENLEME: Bu, Nuget'in daha yeni sürümlerinde olmayacak gibi görünüyor. Yani belki VS / TFS 2017'ye geçerseniz, bu sorun yukarıdaki çemberlerden atlamaksızın giderilecektir.

1 . Kaynak Denetim Gezgini'ni kullanarak klasörü ekleyin; çözümü sağ tıklayın-> Klasör ekle -> nuget
2 . VS 2013 kullanarak bunu anladım, NuGet.config .nuget klasörüne gitmek zorunda bulundu. Çözüm klasörünüzün kökünde zaten bir NuGet.config dosyanız olsa bile (örneğin şirketinizde dahili bir nuget feed'i var). Ancak, yorumlardan bazıları VS 2015'te çözüm kökünde iyi çalıştığını belirtti. Şahsen, git modunda TFS kullanmaya geçtim, bu yüzden test edemiyorum. Ayrıca, özel bir feed'iniz varsa, Nuget.config dosyasında anahtar olarak hem özel feed'e hem de nuget.org'a sahip olduğunuzdan emin olun, aksi takdirde TFS rasgele paketleri geri yükleyemeyeceğine karar verir.


1
Bunun en azından TFS 2012 gerektirdiğine inanıyorum. stackoverflow.com/questions/14365929/…
ClearCloud8

2
@zespri Silinmeyi bekleyen dosya nedir? NuGet paketi mi? Silinmeyi beklememeli ... silinmeli! Yukarıda önerdiğim şeyi yaptıktan sonra, Team Explorer'a gidin ve kaynak kontrolünde olabilecek tüm Nuget paketlerini silin. Veya sadece paketleri klasörünü tamamen silin. Bu kurulumla aylardır devam ediyorum ve bu hatayı hiç yaşamadım.
Pharylon

5
Bilginize VS2015 içinde, nuget.config yok değil içeride /.nuget/ olmak zorunda. Çözüm kökünde harika çalışıyor.
jnm2

141
Nokta ile başlayan bir klasör ve dosyanın nasıl oluşturulacağını merak eden herkes için adı başka bir nokta ile bitirin. Yani bu .tfignore olurdu. ve .nuget.
Derek Ziemba

16
@DerekZiemba Düzenli numara! Bunca yıl boyunca komut satırından yapıyorum. Bence bunu yaptığınızda, takip eden '.' kaldırılacak, başlangıçta önerinizin fazladan bir '.' sonunda.

53

Yukarıdakilere alternatif bir çözüm aşağıdadır.

  • Paketler klasörünü TFS'ye ekleyin (dosya veya alt klasör olmadan)
  • Paketler Klasörünü Sağ Tıklayın
  • Sol Tıklama Gelişmiş
  • Tıklama Pelerini

Bu çözümün TFS çalışma alanı başına uygulanması gerektiğine dikkat etmek önemlidir. .tfignoreDosyayı kullanmak yerine benim için çok daha güvenilir bir şekilde çalıştı .

TFS'nin yüklü NuGet paketlerini kaynak kontrolüne eklemesini önleme adlı blog makalesinde bu yaklaşım hakkında daha fazla bilgi edinebilirsiniz .


23

.tfignore seçeneğinin nuget.config ayarıyla çalışmadığını bildiren kullanıcılar ilgi çekici olabilir - bu adımlar sonunda benim için çalıştı:

  1. Paketlerim klasörümdeki her şeyi sil
  2. TFS'nin bu klasör çevresinde bekleyen herhangi bir değişiklik olmadığından emin olun
  3. VS'yi kapat
  4. VS'yi yeniden açın ve çözümü yeniden yükleyin - paketleri yeniden doldurmak için Nuget geri yüklemesini kullanma Not TFS kaynak kontrolü için hiçbir değişiklik beklemiyor

3
Bu, paketleri geri yükledikten sonra yaptığım Pharylon'un çözümünü uyguladıktan sonra benim için çalıştı.
user849924

1
Gerçekten Yararlı, Bunu İlk Kez (TFS'ye .tfignore dosyasının ilk taahhüdü) için yapmalıyız, ancak her biri için değil. eğer doğruysam.
RajeshKdev

Bu yaklaşımın sadece pelerin yapan makinede işe yarayacağını düşünüyorum. Haklı mıyım? böylece bu, tüm ekip üyelerine kök sorunu çözmez.
panox

Bunun bir varyasyonu benim için çalıştı - Paketlerden hiçbir şeyin yapılmadığından emin oldum, daha sonra paketleri dizinden diskten sildim. Bu noktada, VS ekibi gezgininde hala bekleyen değişiklikler olarak gösteriliyordu, bu yüzden paketler dizininde bekleyen değişiklikleri Geri Almayı seçtim. Bu onu temizledi (kapatmam / yeniden
açmam gerekmeden

8

Çözümünüzdeki bir .nuget klasörüne bir nuget.config dosyası ekleyin. Nuget.config dosyasına aşağıdakini ekleyin:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

TFS Sürüm Denetimi için hile yapan şey enableSourceControlIntegration.


Etkisi yoktur - küresel bir çözüm de değildir.
Jaster

@ Pek Çok Goblin: Bunu tamamen yeni bir proje / sln'de denediniz mi? (Sadece kontrol etmek için) Kurulumunuzda ne işe yaradığını merak ediyorum, her seferinde yaptığım gibi çalışıyor ve bunu TFS / nuget ile yapmanın önerilen yolu. Ayrıca, VS / TFS'nin hangi sürümünü görüyorsunuz?
Terje Sandstrøm

Visual studio 2013. Yeni çözüm, evet. Her paketi açıkça görmezden bir .tfignore ekleyerek bu soruna geçici bir çözüm buldum.
Birçok Goblin

2
Tamam, bu "NuGet Paket Geri Yüklemeyi Etkinleştir" in etkin olarak yaptığı şeydir. Çözümünüzü KAPALI konuma getirdiğinizden ve tekrar açtığınızdan emin olun! NuGet.config dosyası yalnızca çözüm açıldığında okunur.
Heliac

Bu benim için çevrimiçi görsel stüdyo ve VS2013 üzerinde pek işe yaramadı. Sağ Tıklama Çözümü> NuGet Paket Geri Yüklemeyi Etkinleştir'i kullandım. Bu, Nuget.config dosyasını çözüm köküne ekler .tfignore ekleyin. Normalde bunu çözüm köküne bir metin dosyası ekleyerek, bunu algılamasına izin vererek ve ardından 'tespit edilen ekle'> sağ tıklama yoksay seçeneğini tıklatarak hariç tutarak yaparım. Daha sonra, paketler dahil olmak üzere her şeyi kontrol edin Sonra çözümünüzdeki tüm paketleri silin ve bu değişikliği kontrol edin (bu, paketleri TFS'den kaldıracaktır) Çözümü açın ve paketleri ekleyecek şekilde oluşturun, ancak TFS bunları almayacaktır.
David Wilton

7

İçin yerel çalışma alanlarını kullanmanız gerekir .tfignoreÇalışmak . .tfignoreDosya görmezden istediğiniz dosyaları veya klasörleri içeren klasör olmalıdır.

Eğer çözüm yapınız şöyle görünürse:

\Project
   \Packages
   \OtherStuff
   foo.cs

.Tfignore dosyanızı \ Project'e koyardınız:

\Project
   \Packages
   \OtherStuff
   foo.cs
   .tfignore

Davanızdaki .tfignore içeriği:

\packages

İşte sizin için bazı belgeler: http://msdn.microsoft.com/library/vstudio/ms245454(v=vs.110).aspx#tfignore


2
.Tfignore dosyalarını ekledim ve projeyi oluşturduğumda hala tfs'ye paket eklemeye çalışıyor. Durdurmak için yapabileceğim çok az şey var.
Matt

Eklediğiniz yoksayma dosyasını gönderebilir misiniz?
MrHinsh - Martin Hinshelwood

2
Bkz. Docs.nuget.org/docs/reference/package-restore-with-team-build - .tfignore'lu bir NuGet hatası, ancak NuGet'e SCM entegrasyonu için kendini itmesini söyleyerek düzeltilebilir.
user2864740

1
Örneğinizin yanlış olabileceği anlaşılıyor, Göreceli olduğu packagesyerine bunun olması gerektiğini düşünüyorum \packages.
Martin

6

AppData\RoamingTüm çözümler (eski ve yeni) için bunu bir kereye mahsus olarak ayarlayabilirsiniz !

Senin içinde %AppData%\NuGet\NuGet.Configdosya hemen önce aşağıdakileri ekleyin </configuration>XML etiketi ...

<config>
  <add key="repositoryPath" value="C:\NuGetPackages" />
</config>
<solution>
  <add key="disableSourceControlIntegration" value="true" />
</solution>

... istediğiniz herhangi bir yolu belirtebilirsiniz - önemli olan onu TFS çalışma alanınızın DIŞINDA koymaktır!

Şimdi bir daha asla bu şeyler için endişelenmene gerek yok. Çözüm klasörünüz artık paket içermeyecek; tüm çözümler bunun yerine varsayılan olarak özel paketler konumunuzu kullanır.

NOT - Bu çalışma her kullanıcı için ayrı ayrı yapılır.


1
Kulağa hoş geliyor ve muhtemelen daha basit. Bu kurulumu ekibinizde ve özellikle de yapı sunucularınızın oturum açma / kurulum işlemlerinde uygulamanız gerekiyor mu?
Chris F Carroll

Öyle düşünürdüm. Üzgünüm, bu WRT derleme sunucularını test etmedim. Ayrıca lib klasörlerine farklı klasör yollarının sorunlara neden olabileceğini düşünürüm (doğru hatırlıyorsam bazı NuGet paketlerinin lib yollarına sabit referansları olduğunu düşünüyorum).
Heliac

2

Derlemenizi derleme sırasında geri yüklenecek şekilde ayarlayın, paket klasörü ve paketler dosyası teslim edilecektir, ancak paketler çalışmayacaktır.


1
Lütfen "geri yükleme sırasında" açıklayın.
user2864740

10
Visual Studio sağ tıklatma "NuGet paket geri yüklemeyi etkinleştir" işlevselliği NuGet 2.7'den itibaren kullanımdan kaldırılmıştır - TFS 2013, NuGet.targets dosyası ve proj dosyalarında değişiklik yapılmadan yerel olarak NuGet paketlerinin geri yüklenmesini destekler.
Daniel Mann

1

Git'i TFS ile kullanıyorsanız bir ".gitignore" dosyası eklemeniz gerekir. Bunu "ekip projesi | Ayarlar | 'yoksayma dosyası ekle'" bölümünde yapabilirsiniz. Sonra dosyayı açın ve Nuget Paketleri için yerleşik yoksay deyimini kaldırın.

TFVC kullanıyorsanız ve Yerel Çalışma Alanlarınız yapılandırıldıysa Git dosyasına aynı biçimi veren ".tfignore" dosyasını kullanabilirsiniz. Bence "paketlere" ihtiyacın var.


biz TFSVC biz ve ilk yazıda daha önce de belirtildiği gibi - .tfignore dosyası çalışmıyor.
Jaster

Belirttiğim gibi doğru .tfignore biçimini kullanmanız gerekiyor. Ben ters eğik çizgi var inanıyorum
MrHinsh - Martin Hinshelwood

@MrHinsh, Ed Thompson ile konuştuktan sonra .tfignore dosyası düzgün çalışmıyor. .Gitignore olsa yapar.
DaveShaw

@Ed bunu düzeltmek gerekiyor;)
MrHinsh - Martin Hinshelwood

1

Bu benim için çevrimiçi görsel stüdyo ve VS2013 üzerinde pek işe yaramadı.

  • Çözüm> NuGet Paket Geri Yüklemeyi Etkinleştir'e sağ tıklayın. Bu, Nuget.config dosyasını çözüme ekleyecektir

resim açıklamasını buraya girin

  • .Tfignore ekleyin. Normalde bunu çözüm köküne bir metin dosyası ekleyerek, bunu algılamasına izin vererek ve ardından 'tespit edilen ekle'> sağ tıklama yoksay seçeneğini tıklatarak hariç tutarak yaparım.

resim açıklamasını buraya girin

  • Paketleri .tfignore'a ekleyin ve repositories.config dosyasına eklemesini söyleyin

resim açıklamasını buraya girin

Diğer yorumlardan, milajınızın bu noktada değişebileceği anlaşılıyor. Bu benim işim:

  • Paketler dahil her şeyi kontrol edin.

  • Çözümünüzdeki tüm paketleri silin ve ardından bu değişikliği kontrol edin (bu, paketleri TFS'den kaldıracaktır)

  • Çözümü açın ve paketleri projeye ekleyecek olan derleyin, ancak TFS bunları almayacaktır.


2
İlk olarak, Nuget geri yüklemesini etkinleştir, kullanımdan kaldırılır ve daha sonra bu rotaya giderseniz VS 2015'te yoktur. İkincisi: Paketleri ve dll'leri kontrol etmek, onları kaynak kontrolüne ekleyecek, çözümde silecek ve içeriğin SC'den, sadece dalınızın ucundan kaldırmayacağını kontrol edecektir. -
Terje Sandstrøm

1
@ TerjeSandstrøm puanı alınmıştır, ancak soru 2013'e özgüdür. Evet, haklısınız, kaynak kontrolünden kalıcı olarak kaldırmak için tf destroy'i kullanmanız gerekir, ancak TFS'nin .tfignore dosyasına yapışmasını sağlamak için başka bir yol bulamadım
David Wilton

1

Benim için çalışan çözüm, Nuget.Config dosyasında hem bir .tfignore hem de aşağıdaki ayarı oluşturmaktı:

<configuration>
  ...
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>  
  ...
</configuration>

Benim .tfignore bu satırı içerir:

\packages

[Visual Studio 2015 Güncelleştirme 2 kullanıyorum]

Bu ideal değildir ve şu anda github / nuget'te açık bir sorun olarak kaydedilmektedir:

TFVC # 493'ten paketleri atlamayı kolaylaştırın


0

Terje'nin cevabı benim için her zaman işe yaramıyor, bazen bir süre işe yarayacak, ama sonra tekrar benim için bir "ekler" yükü bekleyecek.

Bunu kalıcı olarak çözmenin tek yolu Çalışma Alanımdaki paketler klasörünü gizlemektir.

Örneğin:

Type      Server                Local
============================================
Active    $/Work/Main           C:\Code\Main
Cloaked   $/Work/Main/Packages

Çok tuhaftı. Bu, en son Visual Studio ve NuGet sürümlerinde olur mu?
Terje Sandstrøm

Evet, TFS 2012 yerel çalışma alanlarında VS 2013.4 ve NuGet 2.8'i çalıştırıyorum.
DaveShaw

Düzinelerce proje ve kirlilik için HER paket klasörünü gizlemelisiniz. Ayrıca Ekibin her üyesi prosedürü her çalışma alanı için tekrarlamak zorundadır
Jaster

Pelerin iyi bir cevap değildir ve yukarıdaki diğer iki cevap işe yarar ve tasarım gereğidir. Ortamınızda başka bir şey olmalı.
MrHinsh - Martin Hinshelwood

@MHHinsh - borç çeşitli insanlar buna baktı ve sadece kırık. Git için sorun değil ama TFVC kullanırken bunu her zaman yapıyor.
DaveShaw

0

Aynı sorunu yaşadım. /packagesçalışmalı ama benim için olmadı. packages*.*Iş yaptı.

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.