Neden sınıf kitaplığıma başvuramıyorum?


86

Visual Studio 2008'de bir web sitesi ve bir sınıf kitaplığı içeren bir çözümüm var.

Daha sonra, çözümün dışında, sınıf kitaplığına başvurması gereken başka bir web sitesi projem var. Bin klasörünü veya Proje'yi sağ tıklatıp Referans Ekle'yi seçiyorum, ardından Sınıf Kitaplığı Projemi seçiyorum, sınıf kitaplığının ihtiyaç duyduğu 15 kadar DLL'yi web sitelerinin bin klasörüne ekliyor, ancak .cs dosyalarının hiçbiri kullanma ifadelerini tanımıyor.

using MyLibrary.MyFolder;

Çözemeyeceğini söylüyor ve ReSharper, kullanılmadığı için güvenli bir şekilde kaldırılabileceğini söylüyor.

ReSharper, referansa ihtiyacı olduğunu fark edebilir ve "Kitaplığıma Başvur ve MyFolder'ı kullan" önerisinde bulunur. Neden zaten sahip olduğum bir referansı eklememi önerdiğinden emin değilim. Öneriye gittiğimde hatayı alıyorum

"Modül referans alınamadı. Muhtemelen, referans projeler arasında döngüsel bağımlılıklar oluşturacaktır."

Web sitelerinin özellik sayfalarına gitmeyi ve tüm referansları kaldırmayı ve yeniden eklemeyi denedim, ancak aynı hataları veriyor. Bunun neden çalışmadığına dair bir fikrin var mı?


Sınıf kitaplığındaki .net çerçeve sürümünü ve referans verdiğiniz projeyi kontrol edin
Manideep Innamuri

Yanıtlar:


164

Ayrıca, yeni çözümün projelerinin dahil etmeye çalıştığınız projeyle uyumlu bir çerçevede çalışıp çalışmadığını kontrol edin. Bir 3.5 projesine 4.0 projesine bir referans eklemeye çalışıyordum.


3
Tebrikler! Çözümümü 4.5 olarak oluşturuyordum ve 4.0'a bağlıyordum. Mevcut 4.0 gereksinimimiz nedeniyle, yeni çözümü 4.0'a düşürdüm ve şimdi diğer projemin buna karşı inşa etmekte herhangi bir sorunu yok. Aklı başında kalmama yardım ettiğin için +1!
David Peterson

1
Bu proje ile daha önceki pek çok engeli aşmıştım, bu hatayı aldığımda havlu atmak üzereydim. Onu kurtardın, teşekkürler!
Tony D

1
Bu şekilde sorunun çözüleceğini beklemiyordum! Cool enuf
Irfan

1
O zaman Microsoft bunu söylemeli ve hepsini aynı sürüme koyma seçeneği eklemelidir.
PRMan

1
Günümü kurtardım! VisualStudio bana bunu hatırlatan bir uyarı bile vermedi :(
Reuel Ribeiro

86

Bu sorunu nasıl düzelteceğimi buldum (en azından benim için). Neden işe yaradı, emin değilim, ama işe yaradı. (Aynı sorunu yaşayan ikinci bir web sitesine karşı denedim ve aşağıdaki çözüm bunun için de çalıştı).

Projelerin normal temizliğini ve yeniden oluşturmayı, tüm Visual Studio örneklerimi kapatmayı ve yeniden başlatmayı denedim, hatta bilgisayarımı yeniden başlatmayı bile denedim.

Aslında işe yarayan şey, projeyi Visual Studio'da açmak, tüm açık sekmeleri kapatmak ve ardından kapatmaktı.

Daha önce sekmeleri açık bırakmıştım çünkü önemli olduğunu düşünmemiştim (ve kullandığım sekmeleri neredeyse hiç kapatmamıştım).


Sadece VS'yi yeniden başlatmak benim için çalıştı. Bu sorunun nedeni, R # 'da bir hatayı tetikleyen bir Proje / Ad Alanı yeniden adlandırmasıydı.
mbx

Bu benim için de çalıştı. Dediğin gibi tüm sekmeleri kapattım ve sonra IDE ve işte yeniden başlattım, şimdi sınıf kitaplığıma başvurabilirim. Teşekkür ederim.
yuva

31

Bir olasılık, sınıf kitaplığının hedef .NET Framework sürümünün projeninkinden daha yüksek olmasıdır.


8

Benzer bir sorun yaşadım, tüm referanslarım Resharper tarafından bozulacak mı - Benim için çalışan çözüm, Resharper Önbelleğini temizlemek ve ardından VS'yi yeniden başlatmaktır.

tools-> options-> resharper-> options-> general-> Önbellekleri temizle düğmesini tıklayın ve VS'yi yeniden başlatın


4

VS'nin bazen inşa edeceği ve bazen kurmayacağı benzer sorunlar yaşadım. Bazı arama ve denemelerden sonra, farklı kitaplıklarda ('FileManager') aynı ada sahip bir sınıfa belirsiz bir referansım olduğunu keşfettim. Oluşturulmayan proje, çözümümdeki tüm modülleri referans alan Birim Testlerimdi. Başvuruyu belirli bir modüle dayatmak benim için işleri çözdü.

Demek istediğim şu: ReSharper veya VS'yi suçlamak yerine, bir şekilde gerçekten bir tür döngüsel referans olup olmadığını iki kez kontrol etmek iyi bir fikir olabilir. Çoğu zaman, farklı modüllerde aynı isimlere sahip sınıflar kafa karışıklığına neden olabilir ve genellikle kötü tasarımın bir belirtisidir (benim durumumda olduğu gibi).


Benim durumumda +1 farklı ad alanlarına sahip iki proje aynı ada sahip bir .exe olarak derlendi (Visual Studio'daki Uygulama sekmesindeki derleme adı) - bir geçiş projesi nedeniyle bu (biraz) mantıklıdır; Komut satırından MsBuild için merak bize bizi terk tek değil çok yararlı ipucu verdi bir süre: The type or namespace name 'A' does not exist in the namespace 'B'. Bunun için hiçbir uyarı gelmediğine dikkat edin ...
Jonno

3

Bu, ReSharper ile benzer bir sorun gibi görünüyor:

http://www.jetbrains.net/devnet/thread/275827

İş parçacığındaki bir kullanıcıya göre bir derlemeyi zorlamak, ilk derlemeden sonra sorunu (CTRL + Shift + B) düzeltir.

ReSharper ile özellikle onların durumunda bir sorun gibi görünüyor .. Uyarılardan ve olası yanlış hatalardan bağımsız olarak inşa etmeyi denediniz mi?


Daha önce karşılaştım. Ve onu oluşturmanın sorunu "çözüp çözmediğinden" emin değilim. Derleme yapar, ancak yine de sınıfları, ifadeleri, sınıfları vb. Kullanarak tanınmadıklarını gösterir. Ancak, bazı yöntem çağrılarını kasten bozarsam, Visual Studio bana parametre listesini göstermese bile hatayı tanıyor gibi görünüyor. Sanırım bu ReSharpers hatası.
Brandon

3

Her ikisi de aynı çözümde olduğundan, DLL'ye bir başvuru eklemek yerine, sınıf kitaplığı projesinin kendisine bir başvuru ekleyin (Başvuru Ekle iletişim kutusunda bunun için bir sekme olacaktır).

Ahh, bu farklı bir çözüm. Bunu kaçırdım. Sınıf kitaplığınızın derlenmiş DLL'sine bir başvuru ekleyerek projeye bir başvuru eklemek yerine denemeye ne dersiniz? Referans Ekle iletişim kutusunda bunu yapan bir Gözat sekmesi bulunur.


1
Bu benim için çalıştı, diğer çözümler bir referans eklemeyi önerdi, ancak nedense çözüm gezgininde ana projeye sağ tıklayana kadar bulamadım.
Ralpharama

3

Aynı asp.net sürümünün kullanıldığını doğruladıktan sonra. Projeyi kaldırdım. çözümü temizledi ve projeyi yeniden ekledi. bu benim için çalıştı.


Aynı sorunu yaşadım ve bu yardımcı olmuş gibi görünüyordu. Oldukça tuhaf.
inexcitus

2

Aynı çözümde olan projeler için derlemelere başvuruyorsanız, \ bin \ Debug (veya \ bin \ Release) klasöründeki dll'ye göz atmak yerine ("Projeler" sekmesini kullanarak) bir Proje başvurusu ekleyin ( "Göz at" sekmesi). Aşağıdaki ekran görüntüsüne bakın. Yalnızca bir dış derleme olarak kabul ediliyorsa, assembly / dll dosyasına göz atın.

görüntü açıklamasını buraya girin


2

Projemin * .csproj.user (resharper dosyası) 'nı sildim, ardından tüm sekmeleri kapatıp yeniden açtım. Bundan sonra projemi derleyebildim ve yeniden paylaşma uyarısı olmadı.


Bunu yaptım ve montaj bilgisini tekrar gösteren zekamla karşılaştım, ancak yeniden derlemeye çalıştığım anda, o montaj için akıllıca bilgilerim silindi ve yapı başarısız oldu. Bu garip bir hata!
David Peterson

Ayrıca projemi sıfırdan yeniden oluşturmak zorunda kaldım ... Nispeten yeni bir projede NuGet'te birkaç ila birçok kaldırma / yükleme yaptığımı düşünüyorum.
Adam Nofsinger

Benim için işe yarayan referansları silme ve yeniden oluşturma, tam proje dosyası silme işlemi aşırı olabilir.
danjuggler

2

Bu sorunu yaşadım. Anlamak yaşlarımı aldı. Omzumda yardım edecek insanlar vardı. Visual stüdyosunu yeniden oluşturduk, temizledik ve yeniden başlattık ve bu sorunu çözmedi. Referansları kaldırdık ve yeniden ekledik ...

Hepsi boşuna .... Ta ki!

Sorunumun çözümü, sınıf bildirimimin yanlış yazılmasıydı.

Beni sert bir şekilde yargılamaya başlamadan önce, bunun neden aptalca olmadığını ve bu hatanın neden en zeki programcılar tarafından bile yapılabileceğini açıklamama izin verin.

Hata ismin başında olduğundan, yazmaya başladığımda intellisense sınıf listesinde görünmüyordu.

Örneğin

Sınıf adı: Message.cs

Beyanname:

public class Massage
{
    //code here

}

Bir bakışta ve küçük bir yazı tipinde, Masaj, Mesaj ile aynı görünür.

M yazmak çok fazla sınıf listeledi, bu yüzden yanlış yazılmış sürümde görünmeyen e yazdım, bu da sınıfın derleyici tarafından alınmadığı izlenimini verdi.


Yani aslında bir yazım hatası yaptınız. Bu başkaları için gerçekten yararlı değil.
TylerH

0

Bir MVC 2 uygulaması için bir test projesi oluştururken VS 2010'da benzer bir sorun yaşadım. Semptomlar aynıydı.

ReSharper'dan gelen mesaj bir şekilde yanıltıcıydı. Bir an için ReSharper'ı tamamen görmezden geldim ve bunu "manuel VS yöntemi" olarak yaptım:

  1. Çözeltiyi temizledim.
  2. MVC projesine referansı manuel olarak ekledim.
  3. Using yönergelerini manuel olarak ekledim.
  4. ctrl-üst karakter-b

Bu aşamada bir derleme hatası aldım: System.Web.Mvc Test projemde montajı almalıydım (iç çekerek). Bu referansın eklenmesi projenin derlenmesine neden olur. ReSharper sorunları devam ediyor, ancak ReSharper test çalıştırıcısı çalışıyor.

VS'yi yeniden başlattığımda, ReSharper hataları da kayboldu. Yeniden başlatmanın gerekli olup olmadığından emin değilim - sadece .cs dosyasını kapatmak yeterli olabilir.

Şu andan itibaren, ReSharper mesajını gördüğümde

Modüle başvurulamadı. Muhtemelen referans, projeler arasında döngüsel bağımlılıklar üretecektir.

Okuyacağım

Modüle başvurulamadı. Muhtemelen referans, projeler arasında döngüsel bağımlılıklar oluşturacaktır veya referansın bağımlılıklarının bağımlılıklarına bazı referansları kaçırıyorsunuz.


0

Benim için işe yarayan başka bir olası düzeltme:

Montaj A'ya sahipseniz, her ikisi de proje dışı (harici) bir montaj X'e referansta bulunur ve Montaj B'nin kodu X'e başvurduğunuzu anlamaz, ardından sırasıyla aşağıdaki adımları deneyin:

  • HER İKİ A ve B'den X'e referans bırakın
  • B'deki X referansını yeniden oluşturun
  • A'daki X referansını yeniden oluşturun

Görünüşe göre, VS bir projede harici bir derlemeye zaten başvuran başka bir projenin bağımlılığı olan bir başvuruyu tanımayacaktır. Referansları sıfırdan yeniden kurarak, bunu aşarsınız. Bu çok tuhaf.


VS2015'te ilginç ama gerçek. Teşekkürler!
Scott Nimrod

0

Bu problemle karşılaştım ve görsel stüdyoyu kapatarak, görsel stüdyoyu yeniden açarak, çözümü temizleyerek ve yeniden inşa ederek çözdüm. Bu benim için çalıştı.


0

TFS kullanıyorsanız, En yeniyi al (özyinelemeli) gerçekleştirmek her zaman işe yaramaz. Bunun yerine, Kaynak kontrolü => Belirli sürümü al'ı ve ardından her iki kutuyu da tıklayarak en son sürümü almayı zorlarım. Bu işe yarama eğilimindedir.

görüntü açıklamasını buraya girin

Hala çalışmıyorsa, suo dosyasını silmek (genellikle çözümle aynı yerde bulunur), visual studio'yu kaynaktan tüm dosyaları almaya (ve ardından suo dosyasını yeniden oluşturmaya) zorlar.

Bu işe yaramazsa, tüm açık dosyalarınızı ve Visual stüdyosunu kapatmayı deneyin. Visual stüdyosunu bir sonraki açışınızda düzeltilmesi gerekir. Bu şekilde çözülen bir yeniden paylaşım hatası var.


0

Geçenlerde benzer bir sorunla karşılaşmıştım. Resharper Ultimate 2016.1.2 ile Visual Studio 2015'te çalışıyorum. Başka bir derlemeden bir sınıfa başvurmaya çalışırken kod tabanıma yeni bir sınıf eklemeye çalışıyordum ancak Resharper bu paket için bir hata atacaktı.

Bir iş arkadaşımın yardımıyla, başvurulan sınıfın küresel ad alanında var olduğunu ve mevcut ad alanında bulunan aynı ada sahip başka bir varlık tarafından gizlendiği için yeni sınıftan erişilebilir olmadığını anladım.

Gerekli ad alanından önce bir 'global ::' anahtar sözcüğü eklemek, aslında aradığım sınıfa başvurmama yardımcı oldu. Bununla ilgili daha fazla ayrıntı aşağıda listelenen sayfada bulunabilir:

https://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx


0

Her iki proje de aynı çözüm içinde yer alıyorsa, derlenmiş dll'sini değil, ihtiyacınız olan projenin referansını eklerseniz daha uygun olacaktır.

görüntü açıklamasını buraya girin


-1

Ne yazık ki benim için işe yarayan tek şey, sınıf dosyalarını başka bir yere geçici olarak kopyaladıktan sonra, sınıf kitaplığı projesini tamamen silmek ve yeniden oluşturmaktı. Ancak o zaman ASP.Net web projesi using, sınıf kitaplığı projesine başvuran ifadeleri tanır . Bu, ReSharper kullanılmayan Visual Studio 2010 ile yapıldı.


-1

Benzer bir sorun yaşadım. Benim için işe yarayan şey, visual studio'dan yanlış Sınıf Kitaplığı eklemiş olmamdı . Visual Studio'nun arama özelliğini kullanarak ekledim.

Yapmam gereken, Yeni Proje Ekle> Görsel C #> Sınıf Kitaplığı idi . Ve bu yeni eklenen sınıf kitaplığı doğru olanıdır ve artık herhangi bir projeye referans olarak eklenebilir.


-4

İçe aktarmanız gereken sınıf kitaplığına referans eklemeyi unutabilirsiniz .

İçe aktarmak istediğiniz sınıf kitaplığına sağ tıklayın (birden fazla içe aktarılmış sınıf kitaplığı içerir), -> Ekle-> Referans (Projeleri Seç-> Çözüm-> içe aktarmak istediğiniz sınıf kitaplığını seçin-> Tamam)

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.