2010-12-20 2 views
24

में निर्दिष्ट मान से मेल खाते हैं, मुझे अपना कोड बनाते समय निम्न त्रुटि मिल रही है।

सी: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ Microsoft.CppBuild.targets (990,5): चेतावनी MSB8012: TargetPath (ई: \ अध्ययन \ FWIF \ demola \ ext-libs \ libcommoncpp2-1.6.0 \ w32 \ Debug \ ccgnu2.dll) लिंकर के आउटपुट फ़ाइल संपत्ति मान g \ CapeCommon14.dll से मेल नहीं खाता है)। इससे आपकी परियोजना गलत तरीके से निर्माण हो सकती है। इसे ठीक करने के लिए, कृपया सुनिश्चित करें कि $ (आउटडियर), $ (TargetName) और $ (TargetExt) संपत्ति मान % (Link.OutputFile) में निर्दिष्ट मान से मेल खाते हैं।

मुझे उम्मीद है कि किसी को पता चलेगा कि क्या करना है।

+0

आप एक समाधान खोजने के लिए सक्षम थे? – Brown

उत्तर

22

क्या आपने पिछले संस्करण से विजुअल स्टूडियो 2010 में एक प्रोजेक्ट अपग्रेड किया था? यदि ऐसा है, तो यह एक प्रसिद्ध मुद्दा है।

1) लिंकर उत्पादन निर्देशिका:

विजुअल स्टूडियो 2010 सी ++ परियोजना अपग्रेड के दौरान अपग्रेड मार्गदर्शिका http://blogs.msdn.com/b/vcblog/archive/2010/03/02/visual-studio-2010-c-project-upgrade-guide.aspx

चेतावनी

यहां कुछ सामान्य चेतावनी है कि आप रूपांतरण के दौरान में पड़ सकते हैं में से कुछ हैं

आपके अनुप्रयोगों को अपग्रेड करते समय आप देख सकते हैं कि एक चेतावनी MSB8012: $ (TargetPath) और L है Inker के OutputFile संपत्ति के मूल्य से मेल नहीं खाता:

  • MSB8012: $ (TargetExt) ('.dll') लिंकर की OutputFile संपत्ति के मूल्य से मेल नहीं खाता 'सी: \ foo \ डीबग \ MFCActiveX.ocx' ('। ओसीएक्स ') परियोजना विन्यास' डीबग | Win32 'में। इससे आपकी परियोजना गलत तरीके से निर्माण हो सकती है। इसे सही करने के लिए, कृपया सुनिश्चित करें कि $ (TargetExt) संपत्ति मान% (Link.OutputFile) में निर्दिष्ट मान से मेल खाता है।

  • MSB8012: $ (TargetPath) ('C: \ foo \ डीबग \ MFCActiveX.dll') लिंकर की OutputFile संपत्ति के मूल्य 'सी: \ foo \ डीबग \ MFCActiveX.ocx' से मेल नहीं खाता ('C: \ प्रोजेक्ट कॉन्फ़िगरेशन 'डीबग | Win32' में foo \ Debug \ MFCActiveX.ocx ')। इससे आपकी परियोजना गलत तरीके से निर्माण हो सकती है। इसे सही करने के लिए, कृपया सुनिश्चित करें कि $ (TargetPath) गुण मान% (Link.OutputFile) में निर्दिष्ट मान से मेल खाता है।

    Link.OutputFile प्रॉपर्टी पेज पर लिंकर -> सामान्य -> ​​आउटपुट फ़ाइल पर परिभाषित मान है। डिफ़ॉल्ट रूप से, इसका मान $ (आउटडियर) $ (TargetName) $ (TargetExt) है, जो $ (TargetPath) के मान के समान है। जब हम किसी पिछले संस्करण से किसी एप्लिकेशन को रूपांतरित करते हैं, तो रूपांतरण के लिए रूपांतरण का एक आसान तरीका नहीं है लिंक .ऑटपुटफ़ाइल को यह पता लगाने के लिए कि मूल्य (लक्ष्यनाम) और $ (TargetExt) के लिए कितने मूल्य हैं, क्योंकि अलग-अलग ग्राहक स्वरूपित हो सकते हैं उन्हें विभिन्न तरीकों से। इसके आसपास काम करने के लिए, हमने रूपांतरण के दौरान Linker.OutputFile के मूल्य को संरक्षित करने का निर्णय लिया। रूपांतरण के बाद, $ (TargetName) $ (ProjectName) के लिए डिफ़ॉल्ट होगा। $ (TargetExt) डायनामिक लाइब्रेरी के लिए अनुप्रयोग प्रकार: .dll के लिए डिफ़ॉल्ट एक्सटेंशन के लिए डिफ़ॉल्ट होगा, स्टेटिक लाइब्रेरी के लिए .lib और अनुप्रयोग के लिए .exe। Link.OutputFile मान संरक्षित किया जाएगा। चेतावनी MSB8012 रूपांतरण लॉग में जारी की जाएगी यदि Link.OutputFile और $ (TargetPath) समान नहीं हैं। एप्लिकेशन बनाने के दौरान आपको वही चेतावनियां मिलेंगी।

    $ (आउटडियर), $ (लक्ष्यनाम) और $ (TargetExt) क्रमशः "आउटपुट निर्देशिका", "लक्ष्य नाम", "लक्ष्य एक्सटेंशन" के रूप में "सामान्य" संपत्ति पृष्ठ पर प्रकट होते हैं। आप इन गुणों के मानों को मैन्युअल रूप से बदल सकते हैं ताकि आपको अब चेतावनी न मिल सके।

  • यदि आपकी परियोजना आयात लाइब्रेरी (लिंकर -> उन्नत -> आयात लाइब्रेरी) का उत्पादन करती है, तो आपको लिंकर आउटपुट निर्देशिका डिफ़ॉल्ट आउटपुट निर्देशिका नहीं होने पर आयात लाइब्रेरी के आउटपुट फ़ोल्डर को बदलने की आवश्यकता हो सकती है। अन्यथा, जेनरेट आयात lib शायद लिंकर आउटपुट की तुलना में एक अलग निर्देशिका में हो सकता है।

  • डीबगिंग। कॉमांड रूपांतरण के बाद डिफ़ॉल्ट $ (TargetPath) पर सेट है। आपको परिवर्तन करने की आवश्यकता हो सकती है ताकि सही निष्पादन योग्य F5 (डिबगिंग) या Ctrl + F5 (डिबगिंग के बिना प्रारंभ) पर लॉन्च किया जा सके।

4

एक ही समस्या डिबग DLLs के लिए मेरे पास आई, कि मैं एक अनुगामी 'डी' basename में करना चाहते थे। उदाहरण के लिए, foo.dll (रिलीज़) लेकिन fooD.dll (डीबग)। जब आप डीबग-कॉन्फ़िगरेशन की लिंकर सेटिंग्स में आउटपुट नाम परिशोधित करते हैं - बदसूरत MSB8012 चेतावनी होती है।

@echo off 
echo Copying $(OutDir)$(TargetName)$(TargetExt) as $(TargetName)D$(TargetExt) 
copy /Y $(OutDir)$(TargetName)$(TargetExt) $(OutDir)$(TargetName)D$(TargetExt) 
+18

लिंकर बदलें -> सामान्य -> ​​आउटपुट फ़ाइल "$ (आउटडियर) $ (TargetName) $ (TargetExt)"।और सामान्य -> ​​लक्ष्य नाम "$ (प्रोजेक्टनाम) डी" –

1

मैं पुराने परियोजना से वी.एस. 2010

को परिवर्तित करने के बाद एक ही त्रुटि प्राप्त:

एकमात्र समाधान है कि दृश्य-स्टूडियो 2010 के साथ काम करता डीबग-विन्यास के लिए एक Postbuild-घटना हो रहा है

मैं एक ही प्रकार के खाली प्रोजेक्ट बनाया इसे ठीक करने के (जैसे .dll, उदारीकरण, .exe)।
तो मैं आउटपुट निर्देशिका, मध्यवर्ती निर्देशिका और आउटपुट फ़ाइल

4

भी देखें यहाँ Stackoverflow MSB8012 के लिए अपने प्रोजेक्ट के लिए प्रोजेक्ट propeties में अपनी मूलभूत मूल्यों की नकल की। क्या मेरे लिए काम किया जब VS2012 करने के लिए एक VS2008 सी ++ परियोजना परिवर्तित: सही समाधान एक्सप्लोरर, चुनें गुण में इस परियोजना को क्लिक करें, पॉप-अप में: विन्यास गुण, लिंकर, सामान्य। दाईं ओर आउटपुट फ़ाइल का चयन करें, यह एक ड्रॉप-डाउन देता है, पैरेंट या प्रोजेक्ट डिफ़ॉल्ट से अंतर्निहित चुनें। आवेदन पर क्लिक करें। यह डिफ़ॉल्ट लिंकर सेटिंग देता है: $ (आउटडियर) $ (TargetName) $ (TargetExt)। परियोजना को फिर से बनाएं और चेतावनी अब प्रकट नहीं होनी चाहिए।

+1

एंड्रियास स्पिंडलर के उत्तर पर नाथन मोइन्वाज़ीरी द्वारा टिप्पणी के समान: चेंज लिंकर -> सामान्य -> ​​आउटपुट फ़ाइल "$ (आउटडियर) $ (TargetName) $ (TargetExt)) "। और सामान्य -> ​​लक्ष्य नाम "$ (प्रोजेक्टनाम) डी" –

+0

@ निकवेस्टगेट हे निक ;-) ने पुष्टि की है कि एमएसवीसी 2010 के लिए काम करता है। – Michaelangel007

2

मेरे पास परिदृश्य था जहां मेरा निष्पादन योग्य नाम प्रोजेक्ट नाम से अलग था और मैं चाहता था कि यह परियोजना कहां स्थित हो, उससे अलग स्थान पर निष्पादन योग्य/डीएलएल बनाना चाहें।

1) डिफ़ॉल्ट प्रोजेक्ट नाम अलग होने के लिए बदलें। जनरल> टार्गेटनाम
< मेरी निष्पादन योग्य नाम>

2) एक अलग स्थान है, जहां मैं निष्पादन का निर्माण करना चाहते करने के लिए उत्पादन। सामान्य-> आउटपुट डायरेक्टरी < मेरा नया स्थान यहां जाता है>

3) लिंकर सेटिंग्स अपडेट करें। Linker-> सामान्य नई मूल्य: $ (OutDir) $ (टार्गेटनाम) $ (TargetExt)
यह 1 से नई सेटिंग पर ले जाता है और 2.

+0

यह ओपीएस प्रश्न का उत्तर नहीं देता है। –

+1

असल में चरण 3) ने मेरे लिए इस मुद्दे को हल किया। – DanielV

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