2009-07-10 17 views
7

हमने .NET Framework 2.0 का उपयोग कर एक सी # एप्लिकेशन विकसित किया जो 32-बिट कंप्यूटरों में ठीक काम करता है। लेकिन जब मैं 64-बिट वातावरण में अपना एप्लिकेशन चलाता हूं, तो यह दुर्घटनाग्रस्त हो जाता है।64-बिट वातावरण में 32-बिट .NET अनुप्रयोग कैसे चलाएं?

मुझे 64-बिट वातावरण में चलाने के लिए अपना आवेदन करने की आवश्यकता है।

मैं यह कैसे कर सकता हूं?

+2

हम उस के बजाय और अधिक जानकारी की आवश्यकता होगी: MSBuild (नीचे <PlatformTarget/> तत्व की जाँच करें) लेने के लिए के लिए इस प्रकार

enter image description here

बदले में इस वसीयत अपने * .csproj फ़ाइल अद्यतन करें। क्या यह पी/Invoke का उपयोग करता है? क्या आपने इसे कोड के विशिष्ट क्षेत्र में अलग कर दिया है? –

उत्तर

0

यह तब तक चलाना चाहिए जब तक कि आप पुस्तकालयों का संदर्भ नहीं दे रहे हैं जो विशेष रूप से केवल 32 बिट (जेट डीबी ड्राइवर एक उदाहरण हैं) के लिए उपलब्ध हैं या जब तक कि आपने अपने संकलक को केवल 32 बिट तक संकलित करने के लिए नहीं बताया है।

क्रैश क्या कहता है?

+1

यदि संकलक को 32 बिट तक संकलित करने के लिए कहा जाता है, तो वास्तव में यह * काम करना चाहिए, और वास्तव में समस्या के लिए एक स्वीकार्य तय है। – harms

4

आपके लिए बिल्ड सेटिंग्स में प्लेटफ़ॉर्म लक्ष्य को किसी भी CPU के बजाय x86 पर सेट किया गया है। यह उन समस्याओं को हल करेगा जहां आपकी परियोजना में 32 बिट उपप्रणाली पर "छिपा" निर्भरता है जो 64 बिट में उपलब्ध नहीं हैं। आपका एप्लिकेशन 64 बिट विंडोज़ पर 32 बिट संदिग्ध तंत्र में चलाएगा।

9

आप इसे किसी भी सीपीयू के बजाय x86 के लिए संकलित कर सकते हैं जिस तरह से यह 64 बिट विंडोज़ पर 32 बिट लाइब्रेरी के खिलाफ चलाएगा।

या 64 बिट विंडोज़ पर स्थापित करते समय 32 बिट लाइब्रेरी को 64 बिट के लिए स्वैप करें। अन्य कुछ स्क्लाइट डीएलएस 32/64 बिट

+0

+1 इस सरल समाधान ने मुझे x86 और x64 समानांतर में समर्थन करने के लिए सहेजा है! इच्छा है कि मैं कई बार उठा सकता हूं !! –

1

के लिए विशिष्ट हैं, मुझे एक ही समस्या का सामना करना पड़ा। मेरा मामला यह विशेष रूप से "x86" के लिए मेरे आवेदन के मुख्य असेंबली (.exe) को संकलित करने के लिए पर्याप्त था। अन्य असेंबली (.dll) "किसी भी CPU" के साथ संकलित हैं।

हमारा आवेदन 32 बिट और 64 बिट सिस्टम पर ठीक काम करता है।

5

आप का उपयोग करेगा CorFlags रूपांतरण उपकरण (CorFlags.exe) आप Windows पर हैं। इस तरह आप 32/64 बिट स्पेस में चलाने के लिए एप्लिकेशन/डीएलएल को लागू कर सकते हैं। उपयोग के विवरण और उदाहरण http://msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx पर उपलब्ध हैं।

0

क्या यह विंडोज/एएसपी.नेट एप्लीकेशन है?

यदि यह एक एएसपी.नेट आवेदन है। आप एक ही समय में केवल 32/64-बिट मोड चला सकते हैं। ऐसा करने के लिए,

केस 1. आपको आईआईएस में एप्लिकेशन पूल पर Enable32bitApplication की आवश्यकता है। फिर आईआईएस को रीसेट करें।

केस 2. regedit में संबंधित डीएलएल की जांच करें।

यदि यह आधारित खिड़कियों है, विजुअल स्टूडियो शीघ्र से इस आदेश को चलाने के लिए,

CorFlags.exe TheApp.exe /32BIT+ //Enables 32 bit application. 
4

यहाँ एक अच्छा समाधान लगता है कि आप रखता से बचने के लिए देख रहे हैं है। ध्यान दें कि प्रत्येक लक्ष्य मशीन में बदलाव की आवश्यकता होती है।

आप एक 64 बिट मशीन है और एक .NET अनुप्रयोग है कि केवल 32 बिट CLR के साथ काम करता चलाना चाहते हैं तो आप अपने मशीन

सेट पर नेट ढांचे में परिवर्तन करने के लिए होता है द।नेट ढांचा इस आदेश

कमांड प्रॉम्प्ट खोलें के माध्यम से वाह मोड में CLR लोड और यह आदेश लिखें करने के लिए

C: \ WINDOWS \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Ldr64.exe SetWow

अब आप उन ऐप्स को चलाने में सक्षम होना चाहिए जो केवल .NET 32 बिट CLR का उपयोग करते हैं।

डिफ़ॉल्ट 64 बिट ढांचे चलाने के लिए वापस जाने के लिए

C: \ WINDOWS \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Ldr64.exe Set64

(source)

2

फ्रेड्रिक लीजॉन के उत्तर पर बस विस्तार से, मुझे लगता है कि यह वही है जो आप के बाद हैं।

यह 32 बिट वातावरण पर आपके एप्लिकेशन को चलाने के लिए 64 और 32 बिट विंडो दोनों बताएगा।

आपके 'रिलीज' कॉन्फ़िगरेशन के लिए ऐसा करने के लिए Remeber।

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
<OutputPath>bin\Debug\</OutputPath> 
<ErrorReport>prompt</ErrorReport> 
<WarningLevel>4</WarningLevel> 
<PlatformTarget>x86</PlatformTarget> 
</PropertyGroup> 
संबंधित मुद्दे