Řešení problémů se sestaveními v době návrhu

Když přidáte odkaz na sestavení prostřednictvím karty .NET dialogového okna Přidat odkaz, odkaz odkazuje na zprostředkující referenční sestavení; to znamená sestavení, které obsahuje všechny informace o typu a podpisu, ale nemusí nutně obsahovat žádný kód. Karta .NET obsahuje referenční sestavení, která odpovídají sestavením modulu runtime v rozhraní .NET Framework. Kromě toho uvádí referenční sestavení, která odpovídají běhovým sestavením v registrovaných složkách AssemblyFoldersEx, které jsou používány třetími stranami.

Cílení na více verzí

Visual Studio umožňuje cílit na verze rozhraní .NET Framework, které běží na více verzích rozhraní .NET Framework. Při vydání nové verze rozhraní .NET Framework je možné rozhraní nainstalovat pomocí balíčku cílení a automaticky se zobrazí jako cíl v sadě Visual Studio.

Jak funguje rozlišení typů

ClR v době běhu přeloží typy v sestavení tak, že se podívá do GAC, adresáře bin a do všech cest probíhání. K tomuto účelu se používá zavaděč syntézy. Jak ale zavaděč syntézy ví, kde má hledat? Závisí na řešení vytvořeném v době návrhu, kdy je aplikace sestavená.

Během sestavování přeloží kompilátor typy aplikací pomocí referenčních sestavení. V rozhraní .NET Framework verze 2.0, 3.0, 3.5, 4, 4.5 a 4.5.1 se referenční sestavení nainstalují při instalaci rozhraní .NET Framework.

Referenční sestavení jsou poskytována v sadě cílů, která je dodávána spolu s konkrétní verzí sady SDK rozhraní .NET Framework. Rozhraní samotné poskytuje pouze sestavení modulu runtime. Při sestavování aplikací je nutné nainstalovat jak rozhraní .NET Framework, tak i odpovídající sadu SDK pro rozhraní .NET Framework.

Při cílení na určité rozhraní .NET Framework přeloží systém sestavení všechny typy pomocí referenčních sestavení v sadě cílů. Za běhu přeloží zavaděč fúzního zavaděče tyto stejné typy na sestavení runtime, která jsou obvykle umístěna v GAC.

Nejsou-li referenční sestavení dostupná, přeloží systém typy sestavení pomocí sestavení modulu runtime. Vzhledem k tomu, že sestavení modulu runtime v GAC nejsou rozlišena čísly podverze, je možné, že rozlišení bude provedeno nesprávné sestavení. K tomu může dojít například při odkazování na metodu, která je představena v rozhraní .NET Framework verze 3.5, ale cíleno je na verzi 3.0. Sestavení proběhne úspěšně a aplikace bude spuštěna na počítači, na kterém je prováděno sestavení, ale nasazení této aplikace selže na počítači, který nemá nainstalovánu verzi 3.5.

Cílová sada, která se nyní dodává se sadou .NET Framework SDK, obsahuje seznam všech sestavení modulu runtime v této verzi rozhraní, označované jako seznam redistribuce (redist), což znemožňuje systému sestavení přeložit typy proti nesprávné verzi sestavení.