2012-12-14 18 views
7

मैं वर्तमान में माइक्रोसॉफ्ट बीसीएल असिंक लाइब्रेरी (here) का उपयोग कर रहा हूं जिसमें एक परियोजना में बड़ी संख्या में परस्पर निर्भर असेंबली हैं जो सभी .NET 4 पूर्ण प्रोफाइल के खिलाफ संकलित हैं, मुझे संकलन करने के लिए प्रत्येक प्रोजेक्ट में असेंबली बाइंडिंग रीडायरेक्ट का उपयोग करना पड़ा है (मुद्दे 2 here के अनुसार)।वीएस 2012 में असेंबली बाध्यकारी कॉन्फ़िगर करने के लिए एपी.कॉन्फिग फ़ाइल का उपयोग सी ++/सीएलआई के साथ कैसे करें?

समस्या मैं अब

, कि मैं एक सी ++/CLR DLL परियोजना से इन पुस्तकालयों में से एक का उपभोग है यह वास्तव में async उपयोग करने के लिए की जरूरत नहीं है, लेकिन मैं निम्नलिखित संकलन त्रुटि है:

2> C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (1578,5): चेतावनी MSB3268: प्राथमिक संदर्भ "ImInterface.dll" को हल नहीं किया जा सका क्योंकि इसकी फ्रेमवर्क असेंबली पर अप्रत्यक्ष निर्भरता है "सिस्टम रनटाइम, संस्करण = 1.5.11.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a "जिसे वर्तमान में लक्षित ढांचे में हल नहीं किया जा सका। ".NETFramework, संस्करण = v4.0"। इस समस्या को हल करने के लिए, या तो "ImInterface.dll" संदर्भ को हटाएं या अपने अनुप्रयोग को एक फ्रेमवर्क संस्करण में पुन: लक्षित करें जिसमें "System.Runtime, Version = 1.5.11.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a" शामिल है।

मैंने उसी ऐप.कॉन्फिग फ़ाइल को जोड़ा है जिसे मैंने सी # परियोजनाओं में उपयोग किया है, लेकिन ऐसा लगता है कि यह C++ प्रोजेक्ट में कोई प्रभाव नहीं पड़ता है। क्या मुझे इसे एक विशिष्ट निर्देशिका में रखना है या app.config फ़ाइल को पहचानने में सक्षम करने के लिए कोई अन्य कदम करना है?

मेरी app.config फ़ाइल की सामग्री है:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.5.11.0" newVersion="2.5.11.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.5.11.0" newVersion="2.5.11.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

कोई सुझाव की सराहना की कर रहे हैं!

सादर, एंथोनी

+0

क्या आपने इस एंथनी को ठीक करने के लिए तैयार किया था? मुझे एक समान त्रुटि है हालांकि मेरा सी ++ –

+0

हाय जेम्स, दुर्भाग्य से नहीं है - किसी ने भी कोई उपयोगी सलाह नहीं दी है। मैं क्रिसमस से दूर हो गया हूं इसलिए मैं अगले हफ्ते इस पर फिर से देख रहा हूं क्योंकि यह हमारे लिए उपयोग करने के लिए एक महत्वपूर्ण परियोजना है। आपकी समस्या के साथ विशेष रूप से क्या समस्या है? एक सी # परियोजना? मेरी पोस्ट में app.config फ़ाइल को उसमें मदद करनी चाहिए ... – Anthony

+0

विंडोज फोन/8 के लिए सी # और पोर्टेबल क्लास लाइब्रेरीज़ के साथ मेरा करना है, मुझे एक स्टैक ओवरफ्लो प्रश्न मिला जो http://stackoverflow.com/ के ठीक बाद मेरे जैसा ही था प्रश्न/12597797/का उपयोग कर-async-सीटीपी-साथ-पोर्टेबल-वर्ग-पुस्तकालय। यद्यपि त्रुटि काफी समान है, दुर्भाग्यवश –

उत्तर

6

मैं एक ही समस्या थी और के रूप में यह पता चला, <SpecificVersion>True</SpecificVersion> में मदद की।

इससे पहले कि आप आगे पढ़ने से ध्यान दें कि समस्या करने लगता है केवल हो सकता है जब C++/CLI परियोजना "दृश्य स्टूडियो 2012 - Windows XP (v110_xp)" का उपयोग कर बनाया गया है मंच टूलसेट! ऐसा है कि यदि आपको WinXP के साथ संगत डीएलएल बनाने की आवश्यकता नहीं है, तो इसके बजाय "विजुअल स्टूडियो 2012 (v110)" पर स्विच करें और आपको ठीक होना चाहिए।

मुझे मेरे परिदृश्य विस्तृत करते हैं:

मैं एक C++/CLI सांत्वना आवेदन परियोजना (ConsoleAppCLI) WinXP (v110_xp) के लिए लक्षित है। ConsoleAppCLI एक पुस्तकालय (AsyncLib) जो Microsoft.Bcl.Async NuGet के माध्यम से स्थापित किया गया है का संदर्भ:

[ConsoleAppCLI.vcxproj] (C++/CLI, .NET 4.0 v110_xp) 
      | 
      | 
    [AsyncLib.csproj]  (C#, .NET 4.0) 
      | 
      | 
[Microsoft.Bcl.Async] (via NuGet) 

मैं ठीक उसी समस्या थी और app.config या तो मदद नहीं की है, लेकिन क्या किया था मदद निम्नलिखित:

  1. अनलोड ConsoleAppCli.vcxproj
  2. संपादित vcxproj फ़ाइल सीधे
  3. पुस्तकालय जो है के संदर्भ में खोजें Async nuget पैकेज स्थापित (मेरे मामले में, AsyncLib पर।csproj)
  4. <ProjectReference> और </ProjectReference> बीच , निम्नलिखित जोड़ें: <SpecificVersion>True</SpecificVersion>

नोट तथापि, कि ConsoleAppCLI निर्भरता पेड़ में अपने शीर्ष स्तर परियोजना थी। यदि आपके पास असेंबली हैं जो सीएस ++/सीएलआई असेंबली पर निर्भर करती हैं जो एमएसबी 3268 का उत्पादन करती है, तो आपको संदर्भ में <SpecificVersion>True</SpecificVersion> भी जोड़ना होगा (उदाहरण के लिए यदि मेरे पास अतिरिक्त सी # लाइब्रेरी थी जिसमें ConsoleAppCli निर्भरता के रूप में है, तो मुझे ConsoleAppCli <SpecificVersion>True</SpecificVersion> का संदर्भ देना होगा भी)।

यह समाधान over here से, रास्ते में आ रहा है।

+1

+1 में आपकी समस्या के लिए प्रासंगिक प्रतीत नहीं होता है, मुझे एसिंक एक्सटेंशन का उपयोग करके .Net 4.0 प्रोजेक्ट के साथ एक ही समस्या थी, जिसका अर्थ है कि हमारा मुख्य सी ++ प्रोजेक्ट अब निर्माण नहीं करेगा। "निर्दिष्टीकरण" जोड़ा गया और सब कुछ अच्छा है ... धन्यवाद – reSPAWNed

+0

मैं यह भी पुष्टि कर सकता हूं, यह वास्तविक समस्या का वर्णन करता है और समाधान ठीक काम कर रहा है। धन्यवाद! – DiableNoir