Přetrvávající sestavu závislost v C # .NET

hlasů
8

My C # projekt - zavoláme ji SuperUI - používá využívat třídy z externího sestavení. Nyní tomu tak není, ale kompilátor mi nedovolí stavět projekt bez odkazu montáže na místě. Dovolte mi, abych zpracovat.

Tento projekt používá hodit a chytit vlastní třídu výjimek - za SuperException- který byl odvozen od standardního System.Exception a žil v samostatném předkompilovaný sestavení SuperAssembly.DLL, který jsem odkazoval.

Nakonec jsem se rozhodl, to bylo zbytečné cvičení a nahradit všechny SuperExceptionss System.SuitableStandardException v každém případě. Odstranil jsem odkaz SuperException.DLL, ale nyní jsem se setkal s tímto na snahu kompilaci projektu:

Typ ‚SuperException‘ je definován v sestavě, která není odkazováno. Je třeba přidat odkaz na sestavení 'SuperException, Version = 1.1.0.0 (...)'

Zdrojový soubor odkazuje chyby se nezdá relevantní; to je projekt názvů, který se zvýrazní v IDE.

Teď, tady je to věc:

  1. Veškeré používání SuperExceptionbyly vyloučeny z kódu projektu.
  2. Ve srovnání s jiným projektem, který překládá dobře i bez odkazu na SuperException.DLL, jsem jen odkazovat ještě jednu sestavu - a thatreference nic, že můj projekt neodkazuje sám. I když je možné, že některý z těchto závislostí mohl hodit SuperExceptions, já jen chytat třídu základna výjimka a v každém případě ... druhý projekt staví v pořádku!
  3. Udělal jsem Visual Studio je „Clean řešení“ a přečetl všechno po ruce, mnohokrát.

Není to konec světa, aby tento odkaz, já prostě nechápu, proč je to nutné, nic víc. Nrrrgg. Veškeré ukazatele vítány!

Položena 12/08/2008 v 20:35
zdroj uživatelem
V jiných jazycích...                            


14 odpovědí

hlasů
3

Je pravděpodobné, že přechodný reference, kde některé metody typu volání vrátí instanci SuperException krabici ( „skleslý“), jako například výjimky, ale z kontrolu kód v přechodně součástí kód, tedy kód z externího volání metod, překladač ví, že vás musí být schopni získat informace o tomto druhu v určitém okamžiku.

Resharper by vám říct, kde je pravda, že je potřeba přidat odkaz, a můžete použít Lutz Roeder je znám jako Redgate je reflektor ke skenování sestaven IL za odkaz na tento typ dvěma způsoby: 1) pomocí vyhledávacího-zařízení, 2) open každý veřejný typ, který používáte, a že jeden, který vyžaduje „stínové“ sestavy, dotáže se specifikovat jeho umístění.

To se nejčastěji happends ke mně, když jsem se odkazovat Castle.Windsor ale ne Castle.MicroKernel. : p

Odpovězeno 18/02/2009 v 03:23
zdroj uživatelem

hlasů
2

Nemyslím si, že se jedná o problém kód. To, co vidím děje je, že jeden z vašich stávajících referencí pravděpodobně spoléhat na tento typ ve vlastních typů, které jste pravděpodobně vytváří ve své aplikaci.

Pokud tomu tak je tomu v případě vy potřebujete, že odkaz, i když nejsou explicitně použít typ a přestože druhý odkazované sestavení má svůj vlastní odkaz. Někdy dostat, že problém s komponentami 3. stran, které vyžadují odkazy na typy, které jste dosud odkazuje. Překladač je samozřejmě vidí něco v jedné ze svých stávajících odkazovaných sestav a čeká vás odkazované závislé jeden.

Odpovězeno 21/08/2008 v 15:11
zdroj uživatelem

hlasů
2

Souhlasím s ostatními připomínky zde .. K dispozici je odkaz, ve formátu prostého textu někde ! Měl jsem podobné problémy v minulosti, kde prohledávání souborů projektu vrácena nic, dopadá to bylo v nějakém jiném souboru, který nebyl automaticky zvedl při hledání.

Nemyslím si, že vytvoření nového projektu je řešením zde .. Musíte si být jistý, že ŽÁDNÝ z odkazů ve vaší závislostí použití strom SuperException .. NONE

Nikdy jsem to zažil do bodu, kdy jsem potřeboval doslova otřít projekt, vždy jsem našel odkaz někde. Ujistěte se, že hledají každý soubor.

UPRAVIT:

Jen bod přidat, pokud umístění odkazuje se zdá náhodný chyba, která může často znamenat, že je nesoulad mezi kompilované zdroj a kód zdrojového souboru .. Je to aplikace ASP.NET? Měl jsem to předtím, než kde je sestaven DLL nebyly nahrazeny na nové sestavení ve složce ASP.NET temp způsobí věci se dostat .. Zajímavé při ladění :)

Odpovězeno 12/08/2008 v 22:41
zdroj uživatelem

hlasů
2
  1. Ukončete Visual Studio
  2. Odstraňte přihrádku a obj složky v adresáři řešení
  3. Restart a uvidíme, co se stane,
Odpovězeno 12/08/2008 v 20:56
zdroj uživatelem

hlasů
1

Tam je opravdu nic tak záhadného projektů VS dnes - to je všechny textové soubory, atd. Něco se musí odkazovat, že třídní / dll, a že něco musí být součástí projektu.

Opravdu jste grep'd nebo findstr'd celého řešení strom, každý soubor , na odkaz na této výjimky?

Odpovězeno 12/08/2008 v 21:46
zdroj uživatelem

hlasů
1

Díky za vaše odpovědi tak daleko. Snažil jsem se každý návrh (s výjimkou jednoho) bezvýsledně.

Náznak Nezkoušel jsem se vytvořit nový projekt a přidat všechny své věci do ní myšlenka, která opravdu testuje svou vůli k životu. ;) I to může zítra zkusit, jestli můžu být obtěžován. Ještě jednou děkuji.

Odpovězeno 12/08/2008 v 21:38
zdroj uživatelem

hlasů
1

Vzhledem k tomu, že je to chyba kompilátoru, musí existovat odkaz nebo používání SuperException někde v projektu.

  1. Proveďte find / nahradit v celém projektu nebo řešení pro daný typ a odstranit veškeré zmínky (to je možné, že už to udělal).
  2. Pokud jste odkaz všeho druhu, které dědí z SuperException (a to i v případě, že typ je definován v jiném sestavení), budete potřebovat odkaz na sestavení, která je definována v SuperException.

Take řádek, který kompilátor ukazuje na chybu a spustit trasování dědickou strom objektů používaných na tomto řádku, můžete najít zdroj tom takhle.

Odpovězeno 12/08/2008 v 20:48
zdroj uživatelem

hlasů
0

Měl jsem velmi podobnou referenční sestavy problém, který se děje, když mi C # knihovna měla závislé sestavení C ++ / CLI. Problém, který byl jsem zdědil veřejné třídy z tohoto C ++ / CLI sestavy v mém C knihovně # sestavy. To znamenalo, že dědičnost řetězec se klenout přes více sestav.

Doufal jsem, že každý klient by byl dost chytrý, aby nepřímo načtení Shromáždění C ++ / CLI kdykoliv C # knihovna ji potřeboval, ale to není tento případ ještě v době kompilace.

Zbavil jsem se tohoto problému tím, že rozbije dědičnost mezi třídami, které byly klenout napříč těmito dvěma montážními knihoven a použitím agregace místo. Můj klient byl nakonec rád, a nevyžadoval sestavu C ++ / CLI jako závislost ještě.

Ve své slovo, asi byste se ujistit, že SuitableStandardExceptionnedědí od SuperExceptioncílem eliminovat SuperException.DLLjako reference.

Použít zapouzdření místo dědictví a vytvořit SuperExceptiondatový člen ve své nové SuitableStandardException.

Pokud to nepomůže vyřešit, můžete mít více tříd klenout dědičnost napříč několika sestav, ve vašem případě SuperAssembly.DLLa superException.dll.

Pokud nemůžete najít všechny z nich se snaží tento trik:

  1. Proveďte všechny své veřejné členy a třídy v SuperAssembly.DLLinterní.

  2. V SuperAssembly.DLL spřátelit se s SuperException.DLL:

    [assembly:InternalsVisibleTo("SuperException, PublicKey=0024000004800000....)]
    
  3. Ujistěte se, že budování a odstranit SuperAssembly.DLLodkaz z libovolného klienta, který již reference SuperException.DLL.

Odpovězeno 22/04/2011 v 22:10
zdroj uživatelem

hlasů
0

To je místo, kde nástroje jako Resharper opravdu vyplatí - jednoduché najít zvyklostem mi obvykle hovoří o takových „duchů“ závislostí několikrát.

Možná bys mohl jít do definice třídy SuperException a pokusit se najít všechny odkazy (). Také možná budete chtít prozkoumat, zda je sestava SuperException je má kruhovou závislost na své hlavní sestavy (například hlavní sestavy závisí na sestavu výjimek závisí na hlavní sestavu ...).

Odpovězeno 13/08/2008 v 02:05
zdroj uživatelem

hlasů
0

Pokud jste odkaz všeho druhu, které dědí z SuperException (a to i v případě, že typ je definován v jiném sestavení), budete potřebovat odkaz na sestavení, která je definována v SuperException.

Vyslaný na to.

V některých případech nemusí být odkazování SuperException, ale ty by mohly být odkazování SpecializedSuperException, který je odvozen od, nebo nějak jinak používá SuperException- vaše grep projektu za SuperExceptionnebude to lov ačkoli.

Zkuste mít hack se soudem NDepend

Odpovězeno 12/08/2008 v 22:49
zdroj uživatelem

hlasů
0

grep složku projektu. Mohlo by to být skrytý odkaz v projektu, nebo projekt, který váš projekt odkazy. Očistit s Poznámkový blok v případě potřeby.

Odpovězeno 12/08/2008 v 21:06
zdroj uživatelem

hlasů
0

Zkuste vytvořit nový projekt a přidat všechny třídy do něj.

Odpovězeno 12/08/2008 v 20:51
zdroj uživatelem

hlasů
0

To zní dost divně. Tady je to, co bych zkontrolovat další:

  1. Zkontrolujte, zda není nic prodlévání v / AssemblyInfo.cs souboru Vlastnosti.
  2. Zkontrolujte, že není nic, přetrvávající ve vaší SuperUI.csproj souboru.
  3. Vymazat všechny odkazy a znovu přidat.
Odpovězeno 12/08/2008 v 20:46
zdroj uživatelem

hlasů
-1

grep -R SuperException *ve spodní části vašeho projektu (dostat grepodněkud první) jen pro jistotu.

Odpovězeno 13/08/2008 v 01:29
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more