हाँ, आप दोनों x86 और एक ही परियोजना में एक ही कोड आधार के साथ 64 लक्षित कर सकते हैं। आम तौर पर, यदि आप VS.NET में सही समाधान कॉन्फ़िगरेशन बनाते हैं तो चीजें बस काम करेंगी (हालांकि पी/पूरी तरह से अप्रबंधित डीएलएल के लिए आमंत्रित करने की संभावना अधिकतर सशर्त कोड की आवश्यकता होगी): जिन वस्तुओं को मुझे विशेष ध्यान देने की आवश्यकता है, वे हैं:
- एक ही नाम है, लेकिन अपनी विशिष्ट bitness साथ बाहर प्रबंधित विधानसभाओं के संदर्भ (यह भी COM इंटरॉप असेंबलियों के लिए लागू होता है)
- MSI पैकेज (जो, के रूप में पहले से ही उल्लेख किया गया है, या तो 86 या 64 को लक्षित करने की आवश्यकता होगी)
- आपके एमएसआई पैकेज में कोई कस्टम .NET इंस्टॉलर क्लास-आधारित क्रिया
असेंबली संदर्भ समस्या पूरी तरह से VS.NET के भीतर हल नहीं की जा सकती है, क्योंकि यह आपको एक बार किसी दिए गए नाम के साथ संदर्भ जोड़ने की अनुमति देगा। इसके आसपास काम करने के लिए, अपनी प्रोजेक्ट फ़ाइल को मैन्युअल रूप से संपादित करें (वीएस में, समाधान एक्सप्लोरर में अपनी प्रोजेक्ट फ़ाइल पर राइट-क्लिक करें, अनलोड प्रोजेक्ट का चयन करें, फिर राइट-क्लिक करें और संपादित करें का चयन करें)।
<Reference Include="Filename, ..., processorArchitecture=x86">
<HintPath>C:\path\to\x86\DLL</HintPath>
</Reference>
लपेटें कि एक ItemGroup टैग के अंदर टैग संदर्भ समाधान विन्यास यह लागू होता है यह दर्शाता है, जैसे::
करने के लिए, कहते हैं, एक विधानसभा का x86 संस्करण के लिए एक संदर्भ जोड़ने के बाद, अपनी परियोजना फ़ाइल की तरह कुछ में शामिल होंगे
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<Reference ...>....</Reference>
</ItemGroup>
फिर, कॉपी और पूरे ItemGroup टैग पेस्ट, और इसे संपादित अपने 64-बिट DLL के विवरण, जैसे को रोकने के लिए:
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<Reference Include="Filename, ..., processorArchitecture=AMD64">
<HintPath>C:\path\to\x64\DLL</HintPath>
</Reference>
</ItemGroup>
अपने proje पुन: लोड करने के बाद वीएस.नेट में सीटी, विधानसभा संदर्भ संवाद इन परिवर्तनों से थोड़ा उलझन में होगा, और आपको गलत लक्ष्य प्रोसेसर के साथ असेंबली के बारे में कुछ चेतावनियां मिल सकती हैं, लेकिन आपके सभी बिल्ड ठीक काम करेंगे।
एमएसआई मुद्दे को सुलझाने के बगल में है, और दुर्भाग्य से इस एक non-VS.NET उपकरण की आवश्यकता होगी: मैं पसंद Caphyon के Advanced Installer उस उद्देश्य के लिए, के रूप में के रूप में यह बुनियादी चाल शामिल (एक आम एमएसआई बनाने खींचती 32-बिट और 64-बिट विशिष्ट एमएसआई के साथ-साथ, सही संस्करण निकालने के लिए .EXE सेटअप लॉन्चर का उपयोग करें और रनटाइम पर आवश्यक फ़िक्सअप करें) बहुत, बहुत अच्छी तरह से।
आप शायद ही परिणाम अन्य उपकरण या Windows Installer XML (WiX) toolset का उपयोग कर प्राप्त कर सकते हैं, लेकिन उन्नत इंस्टालर चीजें इतनी आसान बना देता है (और है कि कम से काफी सस्ती है) कि मैं वास्तव में विकल्प पर कभी नहीं देखा है।
एक चीज आपको को अभी भी वाईएक्स की आवश्यकता है, भले ही उन्नत इंस्टॉलर का उपयोग करते समय भी आपके .NET इंस्टॉलर क्लास कस्टम क्रियाओं के लिए हो।यद्यपि यह कुछ क्रियाओं को निर्दिष्ट करने के लिए तुच्छ है जो केवल कुछ प्लेटफॉर्म पर चलाना चाहिए (क्रमशः संस्करणNT64 और संस्करण संस्करण 64 निष्पादन शर्तों का उपयोग करके), अंतर्निहित एआई कस्टम क्रियाएं 32-बिट फ्रेमवर्क का उपयोग करके निष्पादित की जाएंगी, यहां तक कि 64-बिट मशीनों पर भी ।
इसे भविष्य में रिलीज में ठीक किया जा सकता है, लेकिन अभी के लिए (या जब आपके एमएसआई को एक ही समस्या है तो एक अलग टूल का उपयोग करते समय), आप एक्शन डीएलएल बनाने के लिए वाईएक्स 3.0 के प्रबंधित कस्टम एक्शन सपोर्ट का उपयोग कर सकते हैं उचित फ्रेमवर्क जो इसी फ्रेमवर्क का उपयोग करके निष्पादित किया जाएगा।
संपादित करें: संस्करण 8.1.2 के रूप में, उन्नत इंस्टॉलर 64-बिट कस्टम क्रियाओं का सही ढंग से समर्थन करता है। मेरी मूल जवाब के बाद से, इसकी कीमत काफ़ी, दुर्भाग्य से, भले ही यह अभी भी बहुत अच्छा मूल्य है जब InstallShield और उसके जैसे लोग की तुलना में बढ़ गया है ...
संपादित करें: अपने DLLs GAC में पंजीकृत हैं, तो आप भी मानक संदर्भ टैग इस तरह से (एक उदाहरण के रूप SQLite) का उपयोग कर सकते हैं:
<ItemGroup Condition="'$(Platform)' == 'x86'">
<Reference Include="System.Data.SQLite, Version=1.0.80.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86" />
</ItemGroup>
<ItemGroup Condition="'$(Platform)' == 'x64'">
<Reference Include="System.Data.SQLite, Version=1.0.80.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=AMD64" />
</ItemGroup>
हालत भी सभी के लिए नीचे कम हो जाता है प्रकार, रिहाई या डिबग निर्माण, और सिर्फ प्रोसेसर आर्किटेक्चर निर्दिष्ट करता है।
@Magnus जोहानसन: यदि आप अपने आधा लक्ष्य को पूरा करने के लिए दो विन्यास का उपयोग कर सकते हैं। एमएसआई थोड़ा कठिन है। – user7116