मैं एक अजीब मुद्दे पर आया हूं जिसे मैंने अभी देखा है।नेट विरासत - स्वचालित निर्भरता संदर्भ संदर्भ समस्या
यदि आपके पास 3 परियोजनाओं
** नोट चर्चा के बाद संपादित **
परियोजना LIBA के साथ एक समाधान - एक ClassA
namespace LibA
{
public class ClassA
{
public override string ToString()
{
return "The logic in class A!";
}
}
}
परियोजना LibB है - एक ClassB है
using LibA;
namespace LibB
{
public class ClassB
{
public ClassA a;
public ClassB()
{
a = new ClassA();
}
public object Foo()
{
return a;
}
}
}
प्रोजेक्ट लीबीसी - एक क्लाससी
हैusing LibB;
namespace LibC
{
public class ClassC
{
public ClassB b;
public ClassC()
{
b = new ClassB();
}
public object Foo()
{
return b.Foo();
}
}
}
अंत में एक परीक्षण ड्राइवर
using System;
using LibC;
namespace Shell
{
class Program
{
static void Main(string[] args)
{
ClassC c = new ClassC();
Console.WriteLine(c.Foo());
}
}
}
अब अगर आप इस संकलन, सब कुछ पूरी तरह से काम करेंगे। यदि आप लीबसी के द्विआधारी फ़ोल्डर की सामग्री की जांच करते हैं, तो आप देखेंगे कि यह स्वचालित रूप से निर्भरताओं की श्रृंखला के माध्यम से लुढ़का है ताकि यह निर्धारित किया जा सके कि इसे लीबिया और लीब
पर खींचने की आवश्यकता है, हालांकि, यदि आप क्लास ए को कक्षा ए से प्राप्त करने के लिए बदलते हैं जैसे संकलित करने के लिए
using LibA;
namespace LibB
{
public class ClassB : ClassA
{
ClassA a;
}
}
प्रयास, आपको त्रुटि
त्रुटि 2 प्रकार 'LibA.ClassA' एक विधानसभा संदर्भित नहीं है में परिभाषित किया गया है मिलेगा। आपको असेंबली 'लीबिया, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = null' का संदर्भ जोड़ना होगा।
** मूल प्रश्न **
किसी को भी पता है क्यों यह बहुत चालाक संदर्भ के लिए LIBA जब ClassA ClassB का एक सदस्य है (चाहे वह MSBuild या दृश्य स्टूडियो है), लेकिन यह करने के लिए पर्याप्त चतुर नहीं है कक्षा ली जब कक्षा कक्षा कक्षा का आधार वर्ग है?
मैं जानता हूँ कि यह nitpicky है, लेकिन मैं वास्तव में कुछ संगत व्यवहार की सराहना करेंगे
** इन मनाया परीक्षणों के साथ संशोधित प्रश्न **
मैं कुछ क्या के रूप में "प्रत्यक्ष" या "अप्रत्यक्ष" को परिभाषित सुनवाई कर रहा हूँ संदर्भ। हालांकि, प्रत्यक्ष रूप से केवल दृश्यता स्कोपिंग नहीं है, यह एक प्रकार का विरासत और वास्तविक उपयोग प्रतीत होता है।
विरासत के बिना, परीक्षण चालक लीग, लीब और लीबसी को हल करने और स्वचालित रूप से संदर्भित करने के लिए पर्याप्त स्मार्ट है।
कक्षा 012 में सार्वजनिक सदस्य वर्ग ए दिखाई देता है और फिर भी अकेले संकलन/लिंकिंग त्रुटि उत्पन्न नहीं करता है।
डीबगर निश्चित रूप से परीक्षण चालक से क्लास को हल करता है, इसलिए यह स्पष्ट रूप से सही असेंबली को लोड करता है।
तो सभी को ध्यान में रखते हुए। मुझे अब पूरी "सीधी" और "अप्रत्यक्ष" चीजें मिलती हैं।
वह चीज़ जो अभी भी मेरे लिए क्लिक नहीं कर रही है क्यों लिंकर/कंपाइलर/आईडीई कम से कम एक संदर्भित लाइब्रेरी की निर्भरताओं को "प्रत्यक्ष" परिदृश्य में संदर्भित करने का प्रयास नहीं करता है? यह स्पष्ट रूप से समझदार है कि निर्भरताएं वहां हैं और उन्हें "अप्रत्यक्ष" परिदृश्य में संदर्भित करें।
दिलचस्प .... +1 – RPM1984
सबसे निश्चित रूप से दिलचस्प। एक पूर्व वीबी.नेट लड़के के रूप में यह कुछ ऐसा है जिसे मैं समझ नहीं सकता। VB.NET संकलक श्रृंखला परियोजना निर्भरताओं के लिए पर्याप्त स्मार्ट है; सी # कंपाइलर क्यों नहीं है? – Crono