2010-07-18 6 views
6

अद्यतन: मैंने इसे an issue on Microsoft Connect के रूप में दायर किया है यदि आप इसे पुन: पेश कर सकते हैं और/या यह तय करना पसंद करेंगे तो कृपया इस मुद्दे को वोट देने में सहायता करें।संकलन विफल रहता है अगर किसी अन्य प्रोजेक्ट में प्रतिनिधि परिभाषाएं डाली जाती हैं?


मैं अब घंटे के लिए इस समस्या को हल करने की कोशिश कर रहा हूँ।
वास्तव में जो भी विचार/सलाह आप सोच सकते हैं उसकी सराहना करेंगे।

सबसे पहले, मेरे पास 3 फाइलें Class.csDefinitions.cs और Program.cs हैं। आपके द्वारा प्रयास करने के लिए मैंने http://pastie.org/1049492 पर फ़ाइल सामग्री चिपका दी है।

समस्या यह है कि, यदि आपके पास एक ही कंसोल एप्लिकेशन प्रोजेक्ट में सभी 3 फ़ाइलें हैं। एप्लिकेशन संकलित करता है और ठीक चलाता है।

यदि फिर भी, मैं एक "पुस्तकालय" परियोजना जो जो केवल Program.cs फ़ाइल है मुख्य सांत्वना आवेदन परियोजना से करने के लिए संदर्भित है में Class.cs और Definitions.cs है संकलन के साथ विफल:

  • प्रतिनिधि Act नहीं है 2 तर्क ले लो।
  • को सौंपने के लिए प्रकार 'DC.Lib.Produce' क्योंकि ब्लॉक में प्रकार वापसी में से कुछ परोक्ष प्रतिनिधि वापसी प्रकार के लिए परिवर्तनीय नहीं हैं लैम्ब्डा अभिव्यक्ति कनवर्ट नहीं कर सकता ...

यहाँ के साथ एक पूर्ण समाधान है 3 परियोजनाओं - परिभाषाएँ एक अन्य परियोजना में डाल के साथ एक साथ और एक अन्य संयुक्त रूप से सभी फाइलों के साथ 1:
http://dl.dropbox.com/u/149124/DummyConsole.zip

मैं VS2010 RTW व्यावसायिक संस्करण का उपयोग कर रहा हूँ।

उत्तर

8

दिलचस्प। मैं सोचता हूं आपको सी # कंपाइलर में एक वास्तविक बग मिला है - हालांकि मुझे कुछ सूक्ष्म याद आ रही है। मैं एक से थोड़ा सरलीकृत संस्करण है जो अधिक भार आदि खेलने में आने की संभावनाओं से बचा जाता है लिखा है, और जो अतिरिक्त विधि के साथ वितरित:

// Definitions.cs 
public interface IData { } 
public delegate IData Foo(IData input); 
public delegate IData Bar<T>(IData input, T extraInfo); 
public delegate Foo Produce<T>(Bar<T> next); 

// Test.cs 
class Test 
{ 
    static void Main() 
    { 
     Produce<string> produce = 
      next => input => next(input, "This string should appear."); 
    }  
} 

एक विधानसभा के रूप में संकलन का प्रदर्शन, कोई त्रुटि के साथ:

> csc Test.cs Definitions.cs 
त्रुटियों के साथ के रूप में दो विधानसभाओं के संकलन की

प्रदर्शन:

> csc /target:library Definitions.cs 
> csc Test.cs /r:Definitions.dll 

Test.cs(5,43): error CS1662: Cannot convert lambda expression 
     to delegate type 'Produce<string>' 
     because some of the return types in the block are not 
     implicitly convertible to the delegate return type 
Test.cs(5,52): error CS1593: Delegate 'Bar' does not take 2 arguments 

मैं किसी भी कारण नहीं सोच सकते हैं यह सब कुछ जनता के रूप में अलग-अलग असेंबली में अलग क्यों होना चाहिए। स्पेस शायद ही कभी internal कारणों के अलावा असेंबली सीमाओं के बारे में बात करता है।

दिलचस्प बात यह है कि मुझे सी # 3 और 4 कंपेलरों दोनों के लिए एक ही त्रुटि मिलती है।

एरिक और अब मैड्स ईमेल ...

संपादित करें: ध्यान दें कि आप एक स्पष्ट पैरामीटर सूची का उपयोग कर इस के आसपास काम कर सकते हैं।उदाहरण के लिए, मेरे नमूना कोड में, यह काम करेगा:

Produce<string> produce = 
    (Bar<string> next) => input => next(input, "This string should appear."); 
+0

धन्यवाद! अधिक प्रतिक्रिया के लिए अधीरता से इंतजार कर रहे हैं ... उम्मीद है कि मुझे इस टीटी – chakrit

+1

@chakrit के लिए 3.5 पर वापस जाना नहीं है: मैंने एक कामकाज किया है, लेकिन मुझे नहीं लगता कि .NET 3.5 पर वापस कैसे मदद मिलेगी आप - जैसा कि मैंने कहा है, मैंने सी # 3 कंपाइलर के साथ एक ही समस्या देखी है। –

+0

मैं एक पुस्तकालय को फिर से लिख रहा/पुन: सक्रिय कर रहा हूं जो 3.5 .NET 4.0 सामान का उपयोग करने के लिए ठीक काम करता है .... मुझे लगता है कि मैंने प्रक्रिया में कुछ तारों को तोड़ दिया होगा। – chakrit

1

मैं इस संकल्प लिया सी के नाम बदलकर: \ Windows \ Microsoft.NET \ फ्रेमवर्क \ v4.0.30319 \ Microsoft.CSharp.targets (नहीं है इसे हटाएं!) जो आउटपुट विंडो में एक चेतावनी है। नई परियोजना अब ठीक है लेकिन पिछले एक को लोड नहीं किया जा सका। इसके बाद मैंने फ़ाइल को फिर से मूल नाम पर बदल दिया। अब दोनों परियोजनाओं को त्रुटियों के बिना संकलित किया जा सकता है। यह एक अनुभवजन्य समाधान है लेकिन मुझे उम्मीद है कि यह

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