2010-10-25 11 views
10

मैं वही कोडबेस का उपयोग करके डब्ल्यूपीएफ और सिल्वरलाइट दोनों के लिए अपना अधिकांश समय विकास नियंत्रण खर्च करता हूं। ऐसा करने के लिए मैं एक परियोजना से मौजूदा फाइलें जोड़ता हूं (सिल्वरलाइट कहता हूं) "लिंक के रूप में" दूसरे (डब्ल्यूपीएफ कहें)। मामूली अंतर के लिए मैं की तरहविजुअल स्टूडियो: "यह दस्तावेज़ किसी अन्य प्रोजेक्ट द्वारा खोला गया है"

#if SILVERLIGHT 
... 
#else 
... 
#endif 

कोड इन ब्लॉकों में इस परियोजना को आप से फ़ाइल को खोल लेते के प्रकार पर निर्भर धूसर हो जाता है पूर्वप्रक्रमक निर्देशों का उपयोग करें। इसलिए यदि आप अपनी फ़ाइल को सिल्वरलाइट प्रोजेक्ट से खोलते हैं (जहां सिल्वरलाइट परिभाषित किया गया है) तो दूसरा हिस्सा ग्रे है और इंटेलिसेंस इसमें काम नहीं करता है।

WPF भाग के लिए आदेश में आईडीई द्वारा संसाधित किया जा करने के लिए (रंग और Intellisense समर्थन के साथ) आप WPF परियोजना से फ़ाइल को खोलने की जरूरत है। आप कह रही है कि "यह दस्तावेज एक अन्य परियोजना द्वारा खोला जाता है" है कि आप एक संदेश बॉक्स मिल करने की कोशिश है और यह दिखाता है जब आपको ठीक क्लिक करें जब कि Silverlight परियोजना (क्या नहीं मैं देखना चाहता था) के संदर्भ में फ़ाइल। इसलिए मुझे फ़ाइल को बंद करना है, फिर से WPF प्रोजेक्ट पर नेविगेट करना है और फ़ाइल को फिर से खोलना है। यह बहुत परेशान है।

तो सवाल यह है: क्या कोई सेटिंग या ऐड-ऑन है जो विजुअल स्टूडियो को उस परियोजना से फ़ाइल को दोबारा खोल देगा जहां मैंने उस बेवकूफ संदेश बॉक्स को दिखाने और मुझे उस फ़ाइल को दिखाने के बजाय डबल-क्लिक किया था "गलत" परियोजना से?

+4

अभी तक फ़ाइल को बंद करने के अलावा इस समस्या के लिए कोई समाधान नहीं है। साथ ही, यह VS2010 में "निर्माण करने में असमर्थ ..." अपवाद लॉक करने का कारण है। –

+0

मुझे आश्चर्य है कि यह इसे संभालने के लिए एड-इन के लिए सैद्धांतिक रूप से संभव है: उपयोगकर्ता फ़ाइल खोलने का प्रयास करने से पहले अधिसूचित हो जाएं, देखें कि एक ही फ़ाइल पहले से ही एक ही प्रोजेक्ट से खोली गई है, उस फ़ाइल को बंद करें, और वर्तमान प्रोजेक्ट से फिर से खोलें। यदि ऐसे एपीआई जगह पर हैं तो व्यवहार्य लगता है। –

+1

मैन, यह वास्तव में अच्छा होगा। फ़ाइल को बंद और खोलने के लिए हर समय परेशान होना मुश्किल है। – andrecarlucci

उत्तर

2

आप आंशिक कक्षाओं और एकाधिक फ़ाइलों का उपयोग करके काम करना थोड़ा आसान बना सकते हैं: साझा कोड जो एक साझा लिंक फ़ाइल में डब्ल्यूपीएफ और सिल्वरलाइट दोनों के लिए समान है, और प्रत्येक के लिए एक अलग फ़ाइल के लिए एक अलग फ़ाइल है एक या दूसरे (समान विधि/संपत्ति हस्ताक्षर के साथ), जिनमें से प्रत्येक केवल परियोजनाओं में से एक है। ऐसा करने से अतिरिक्त फ़ाइल प्रबंधन ओवरहेड का एक गुच्छा जोड़ने की लागत पर WPF और Silverlight दोनों संस्करणों को एक बार में खोला जा सकता है (क्योंकि वे अलग-अलग फाइलें हैं)।

इसके अलावा, कुछ अतिरिक्त स्मृति हो और अलग समाधान का उपयोग करें।

+0

मैं एक ही समाधान में दो परियोजनाओं के बीच फ़ाइलों को साझा करता हूं - और गरीब वीएस लगातार मुझे "किसी अन्य प्रोजेक्ट द्वारा खोला गया" संदेश देता है। यह बग वीएस के कई संस्करणों के लिए रहा है (मैं वीएस2015 का उपयोग कर रहा हूं)। मुझे आश्चर्य है कि अगर किसी ने इसे एमएसएफटी को बताया है तो वे इसके बारे में जानते हैं। –

4

यह मैं के बारे में दो बार एक महीने में अब एक WPF आवेदन में नहीं हुआ है,। कोई विचार नहीं है कि ऐसा क्यों होता है लेकिन दोनों मामलों में फिक्स समाधान को साफ करना था, पीसी को रीबूट करना (केवल विजुअल स्टूडियो को पुनरारंभ नहीं करना) और फिर समाधान बनाना था।

1

हां यह विजुअल स्टूडियो शैल का उपयोग करना संभव है।

पहले इन्स्तांत EnvDTE80.DTE2 वस्तु:

private static EnvDTE80.DTE2 _dte; 

public static EnvDTE80.DTE2 DTE 
{ 
    get 
    { 
     if (_dte == null) 
      _dte = ServiceProvider.GlobalProvider.GetService(typeof(DTE)) as DTE2; 

     return _dte; 
    } 
} 

और उसके बाद:

// On Document Opening, close the existing instances. 
// This event occurs when you double-click file in Solution Explorer. 

DTE.Events.DocumentEvents.DocumentOpening += (s, e) => 
{ 
    if(!DTE.ItemOperations.IsFileOpen(YOURFILENAME)) 
     return; 

    foreach(Window win in DTE.Documents.Cast<Document>() 
         .FirstOrDefault(s => s.FullName == YOURFILENAME).Windows)) 
     win.Close(); 
} 

// next; VS itself will call DTE.ItemOperatins.OpenFile(YOURFILENAME); 

HTH।

1

यह मेरे लिए उस समय हुआ जब मैं एक वी.एस. समाधान के तहत अन्य परियोजना का एक लिंक की गई फ़ाइल युक्त एक परियोजना थी। जब मैंने लिंक की गई फ़ाइल में किसी विधि की परिभाषा पर नेविगेट करने का प्रयास किया, तो वीएस ने एक संदेश के साथ संकेत दिया कि यह दस्तावेज़ किसी अन्य प्रोजेक्ट द्वारा खोला गया है।

इसे हल करने के लिए, मुझे अनलोड लोड करना था जो वीएस समाधान से मूल फ़ाइल का मालिक है। सामान्य समय और डीबग समय में विधि परिभाषा के लिए नेविगेट करने के बाद कोई मुद्दा नहीं था।

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