2014-05-08 6 views
10

के निर्माण के बारे में उलझन में मुझे कई परियोजनाओं (एक सी # डब्ल्यूपीएफ एप्लिकेशन प्लस क्लास लाइब्रेरीज़) के साथ एक वीएस2013 समाधान मिला है। प्रत्येक प्रोजेक्ट का "प्लेटफार्म लक्ष्य" "कोई भी CPU" पर सेट होता है। मैं इस धारणा के तहत था कि परिणामस्वरूप EXE 64-बिट पीसी पर 64-बिट अनुप्रयोग के रूप में और 32-बिट पीसी पर 32-बिट एप्लिकेशन के रूप में चलाया जाएगा। क्या ये सही है? मेरा देव पीसी 64-बिट है, लेकिन जब मैं एप्लिकेशन चलाता हूं (या तो स्टैंडअलोन या वीएस डीबगिंग के माध्यम से), यह कार्य प्रबंधक में "foo.exe * 32" के रूप में दिखाई देता है। यहाँ क्या चल रहा है?32- या 64-बिट

हमारे पास 32-बिट मशीन वाला जूनियर डेवलपर है। क्या वह अभी भी समाधान खोलने और इसे वीएस में चलाने में सक्षम होगा?

इसके अलावा, कुछ परियोजनाएं एक तृतीय पक्ष डीएलएल का संदर्भ देती हैं। विक्रेता 32- और 64-बिट संस्करण दोनों प्रदान करता है - परियोजनाओं को किस संदर्भ में संदर्भित किया जाना चाहिए? यदि मैं 32-बिट डीएलएल का संदर्भ देता हूं तो यह एप्लिकेशन को 64-बिट एप्लिकेशन के रूप में चलाने से रोक देगा? और यदि मैं 64-बिट संस्करण का संदर्भ देता हूं, तो क्या यह 32-बिट डेवलपर के लिए समस्याएं पैदा करेगा? और अंत उपयोगकर्ताओं के बारे में क्या - क्या मेरे इंस्टॉलर को ओएस संस्करण की जांच करने और उचित डीएलएल में कॉपी करने की आवश्यकता होगी?

अंत में, डीएलएल के बारे में क्या NuGet के माध्यम से संदर्भित किया गया है? क्या NuGet DLLs के 32- या 64-बिट संस्करण स्थापित करता है? मैं 32- या 64-बिट अंत उपयोगकर्ता स्थापना से कैसे निपटूं?

+0

के संभावित डुप्लिकेट [दृश्य स्टूडियो "कोई भी सीपीयू" क्या करता है लक्ष्य मतलब?] (http://stackoverflow.com/questions/516730/what-does-the-visual-studio-any-cpu-target-mean) – d3dave

उत्तर

8

मैं के बाद से आप एक ही एक में तो कई बंडल किया है आपके कुछ प्रश्नों के जवाब देने की कोशिश करने जा रहा हूँ ..

We have a junior developer with a 32-bit machine. Will he still be able to open the solution and run it in VS?

हाँ, जब तक कि सभी परियोजनाओं के लिए निर्माण करने के लिए सेट कर रहे हैं Any CPU और 64 बिट असेंबली या देशी डीएलएल पर कोई बाहरी निर्भरता नहीं है।

If I reference the 32-bit DLL will this prevent the application from running as a 64-bit application?

हाँ, अगर विधानसभाओं, या COM घटकों जुड़ा हुआ के किसी भी विशेष रूप से 32 बिट CLR के खिलाफ बनाया गया था तो यह एक 32bit प्रक्रिया के रूप में चलाने के लिए पूरी परियोजना की आवश्यकता होगी। आपको हमेशा देशी कोड के बारे में सावधान रहना होगा कि आपकी परियोजना पर निर्भर हो।

And if I reference the 64-bit version, will this cause problems for the 32-bit developer?

हाँ, 32 बिट डेवलपर नहीं उसकी मशीन पर परियोजना चलाने के लिए सक्षम होगा, अगर कोई 64 बिट विधानसभाओं कर रहे हैं।


एक अंतिम सोचा मैं जोड़ने के लिए है कि यह बहुत महत्वपूर्ण अंतिम निष्पादन योग्य परियोजना Any CPU के रूप में बनाया गया है या नहीं, या एक विशेष 32bit या 64bit लक्ष्य मंच के लिए है चाहता हूँ के रूप में।

आमतौर पर मैंने पाया कि अंतिम निष्पादन Any CPU के रूप में बनाया होने (खराब छवि क्रम अपवाद विभिन्न प्रकार के) क्रम जब तक सभी विधानसभाओं जुड़ा हुआ भी Any CPU के लिए लक्षित कर रहे हैं पर समस्याओं के सभी प्रकार पैदा कर सकता है और वहाँ कोई बाहरी, देशी, निर्भरता हैं । यह बाद की आवश्यकता सुनिश्चित करने के लिए सबसे कठिन है।

दूसरी ओर, एक अंतिम एक स्पष्ट निर्दिष्ट 32bit या 64bit मंच के लिए बनाया निष्पादन योग्य खुशी के लिए Any CPU

+0

असल में, मेरा मानना ​​है कि यदि आप 32-बिट डीएलएल का संदर्भ देते हैं और एप्लिकेशन किसी भी CPU को 64-बिट मशीन पर चलते समय रनटाइम अपवाद प्राप्त होगा। यह नवीनतम .NET के साथ बदल गया हो सकता है, लेकिन इस तरह यह काम करने के लिए उपयोग किया जाता है। –

+0

उत्तर के लिए धन्यवाद। यह "किसी भी सीपीयू" मार्ग की तरह महसूस करना शुरू हो रहा है, क्योंकि मुझे यह पता लगाना मुश्किल लगता है कि कौन से संदर्भ 32 हैं और कौन से 64 (विशेष रूप से NuGet के माध्यम से) हैं। मैंने यह भी देखा है कि परियोजनाएं 'सी: \ प्रोग्राम फाइलों (x86) \ संदर्भ असेंबली \ "पर सभी नेट फ्रेमवर्क असेंबली का संदर्भ दे रही हैं ... बस उत्सुक क्यों वीएस यहां देख रहा है (कहें) सी: \ विंडोज \ माइक्रोसॉफ्ट.Net \ Framework \ या \ Framework64? –

+0

@TimB आप सही हैं। जब कोई निष्पादन योग्य किसी भी CPU के रूप में बनाया जाता है तो इसे रनटाइम पर 64 बिट प्रक्रिया के रूप में लोड किया जाएगा और यदि किसी भी संदर्भित प्रबंधित या अप्रबंधित कोड को 32 बिट कोड के रूप में बनाया गया है, तो खराब छवि रनटाइम अपवाद का कारण बन जाएगा। मेरा कहना है कि यह 32 बिट प्रक्रिया के रूप में चलाने के लिए अंतिम असेंबली की आवश्यकता होगी। –

1

हम एक 32 बिट मशीन के साथ एक जूनियर डेवलपर है निर्मित अन्य विधानसभाओं शामिल कर सकते हैं। क्या वह अभी भी समाधान खोलने और इसे वीएस में चलाने में सक्षम होगा?

हाँ, वह दौड़ सकता है।

यदि मैं 32-बिट डीएलएल/64-बिट का संदर्भ देता हूं तो यह एप्लिकेशन को 64-बिट/32-बिट एप्लिकेशन के रूप में चलाने से रोक देगा?

.csproj फ़ाइल का मैनुअल संस्करण। आपको विभिन्न बाइनरी, आदर्श रूप से एक-दूसरे के भाई बहनों के लिए अलग-अलग निर्देशिकाओं की आवश्यकता होती है, और उसी प्लेटफॉर्म के समान नाम के साथ आप लक्ष्यीकरण कर रहे हैं।

देखेंConditionally use 32/64 bit reference when building in Visual Studio

किस बारे में अंत उपयोगकर्ताओं - मेरी संस्थापक OS संस्करण की जाँच करें और उचित DLL भर में नकल करने की आवश्यकता होगी?

हाँ, आप विभिन्न स्थापत्य कला के लिए विशिष्ट संस्करण बनाने के लिए निर्माण प्रक्रिया स्क्रिप्ट प्रबंधित करने की जरूरत है ..

संदर्भ:
What does the Visual Studio "Any CPU" target mean?

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