2012-06-08 20 views
7

के लिए असेंबली निर्दिष्ट करें क्या सी # में नेमस्पेस के साथ असेंबली निर्दिष्ट करने के लिए वैसे भी है?नामस्थान

उदाहरण के लिए, यदि आप किसी प्रोजेक्ट में PresentationFramework.Aero और PresentationFramework.Luna दोनों का संदर्भ देते हैं तो आप देख सकते हैं कि दोनों एक ही नामस्थान में समान नियंत्रण साझा करते हैं लेकिन विभिन्न कार्यान्वयन के साथ।

उदाहरण के लिए ButtonChrome लें। यह नामस्थान Microsoft.Windows.Themes के तहत दोनों विधानसभाओं में मौजूद है।

XAML में आप ऐसा यहां नाम स्थान के साथ-साथ विधानसभा में शामिल हैं यह कोई समस्या नहीं

xmlns:aeroTheme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" 
xmlns:lunaTheme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Luna" 

<aeroTheme:ButtonChrome ../> 
<lunaTheme:ButtonChrome ../> 

है लेकिन सी # कोड में पीछे मैं वैसे भी PresentationFramework.Aero में ButtonChrome का एक उदाहरण बनाने के लिए नहीं मिल रहा।

निम्नलिखित कोड मुझे त्रुटि CS0433 देता है जब

using Microsoft.Windows.Themes; 
// ... 
ButtonChrome buttonChrome = new ButtonChrome(); 

त्रुटि CS0433 संकलन: प्रकार 'Microsoft.Windows.Themes.ButtonChrome' दोनों
'सी में मौजूद है: \ Program फ़ाइलें (x86) \ संदर्भ असेंबली \ Microsoft \ Framework.NETFramework \ v4.0 \ प्रोफ़ाइल \ क्लाइंट \ PresentationFramework.Aero.dll '
और
' c: \ Program Files (x86) \ संदर्भ सभाओं \ Microsoft \ Framework.NETFramework \ v4.0 \ प्रोफाइल \ क्लाइंट \ PresentationFramework.Luna.dll '

कौन सा बहुत समझा जा सकता है, संकलक जो ButtonChrome जानते हुए भी चयन करने के लिए कोई रास्ता नहीं है क्योंकि मुझे बताया गया है नहीं किया है यह। क्या मैं इसे किसी तरह से कर सकता हूं?

उत्तर

7

आप विधानसभा में संदर्भ के लिए एक उपनाम निर्दिष्ट करने की आवश्यकता है और फिर उर्फ ​​माध्यम से आयात:

extern alias thealias; 

संदर्भ के लिए गुण विंडो देखें।

मान लीजिए कि आप एरो असेंबली को "एयरो" और लुना असेंबली "लुना" के रूप में उपनाम करते हैं। फिर आप उसी फ़ाइल के भीतर फिर दोनों के साथ काम कर सकता था इस प्रकार है:

extern alias aero; 
extern alias luna; 

using lunatheme=luna::Microsoft.Windows.Themes; 
using aerotheme=aero::Microsoft.Windows.Themes; 

... 

var lunaButtonChrome = new lunatheme.ButtonChrome(); 
var aeroButtonChrome = new aerotheme.ButtonChrome(); 

अधिक जानकारी के लिए extern alias देखें।

+0

धन्यवाद केंट! प्रेजेंटेशनफ्रेमवर्क.एरो के लिए मैंने एलिस को एरो और एंबेड इंटरऑप प्रकारों को गलत पर सेट किया है लेकिन मुझे अभी भी त्रुटि सीएस 04430 मिल रही है: बाहरी उपनाम 'एरो' को/संदर्भ विकल्प में निर्दिष्ट नहीं किया गया था। मुझे और कुछ करने की ज़रूरत है? –

+0

दुर्भाग्यवश, प्रोजेक्ट में संसाधनों में शामिल होने पर एक बग प्रतीत होता है: http://connect.microsoft.com/VisualStudio/feedback/details/615953/reference-aliases-are-ignored-on-projects-containing-some-xaml -files। मैंने किसी भी एक्सएएमएल फाइलों के बिना इसे आजमाया और यह काम किया। यह समस्या 4.5 में तय की जाएगी। धन्यवाद फिर से –

+0

@Meleak: दिलचस्प - मुझे उस बग से अवगत नहीं था। क्या आपने कामकाज देखा? क्या यह आपके लिए एक विकल्प है? –

5

बचाव के लिए बाहरी उपनाम, दस्तावेज here देखें।

extern alias Aero; 
extern alias Luna; 

using System.Windows; 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow: Window 
    { 
    public MainWindow() 
    { 
     InitializeComponent(); 

     var chrome1 = new Luna::Microsoft.Windows.Themes.ButtonChrome(); 
     var chrome2 = new Aero::Microsoft.Windows.Themes.ButtonChrome(); 
     MessageBox.Show(chrome1.GetType().AssemblyQualifiedName); 
     MessageBox.Show(chrome2.GetType().AssemblyQualifiedName); 
    } 
    } 
} 
+0

+1, धन्यवाद! मुझे अभी भी कुछ याद आ रहा है, उपनाम सेट करने के बाद भी मुझे अभी भी त्रुटि मिल रही है CS0430: बाहरी उपनाम 'एरो' को एक/संदर्भ विकल्प में निर्दिष्ट नहीं किया गया था। कोई विचार क्या मैं लापता हो सकता है? –

+0

@Meleak: समाधान एक्सप्लोरर विंडो में असेंबली संदर्भ का चयन करें, गुण विंडो पर जाएं और "वैश्विक" से "लुना", "एयरो" आदि से एलियस संपत्ति का मान बदलें – Alan

+0

धन्यवाद। मैंने ऐसा किया लेकिन दुर्भाग्य से एक बग प्रतीत होता है। यदि प्रोजेक्ट में संसाधन डिक्शनरी हैं, तो उपनामों को अनदेखा किया जाता है: http://connect.microsoft.com/VisualStudio/feedback/details/615953/reference-aliases-are-ignored-on-projects-containing-some-xaml-files –

0

मैं एक ऐसी ही जब माइक्रोसॉफ्ट संदर्भित System.NonSerializedAttribute के बारे में त्रुटि मिले हैं: विधानसभा संदर्भ जोड़ा और अन्य नाम लूना और एयरो संबंधित संदर्भ गुण में बनाया है, यहाँ कुछ नमूना कोड तुम कोशिश कर सकते है। स्क्रिप्टिंग असेंबली, जो इस विशेषता को परिभाषित करती है (सेवा संदर्भ द्वारा उत्पन्न संदर्भ.cs फ़ाइल में पाया गया संघर्ष)।इसे हल करने का सबसे आसान तरीका उपनामों को परिभाषित करने के समान ही है, लेकिन संकलन सिरदर्द के बिना:

विजुअल स्टूडियो में, अपनी परियोजना के संदर्भों पर जाएं, संघर्ष उत्पन्न करने वाली असेंबली में से एक का चयन करें, गुणों पर जाएं और उपनाम भरें कुछ के साथ मूल्य वैश्विक के बराबर नहीं है।

संबंधित मुद्दे