2009-08-13 5 views
27

मैं स्पष्ट x64 मोड में एक सी # संकलन (AnyCpu से अलग) के लिए VS08SP1 की डिफ़ॉल्ट प्रोजेक्ट सिस्टम का उपयोग करने का प्रयास कर रहा हूं। जब मैं स्पष्ट रूप से 64 के रूप में एक मॉड्यूल चिह्नित करते हैं, मैं एक:MSBUILD/csc: x64 mscorlib चेतावनी को संभालने का सबसे साफ तरीका 1607

चेतावनी CS1607: विधानसभा पीढ़ी - संदर्भित विधानसभा 'mscorlib.dll' शब्द को हटा उस के साथ है की

एक तरह से एक अलग प्रोसेसर को लक्षित करता है एक /nowarn:1607Based on my research, ऐसा करने में अभ्यास में कोई समस्या नहीं है। यदि कोई वास्तविक दुनिया के मुद्दे को उजागर कर सकता है, तो कृपया उत्तर देने में संकोच न करें।

हालांकि, यह गलत लगता है! तो एक और दृष्टिकोण मैं इस्तेमाल किया /nostdlib+ ऐसा करने के लिए, और फिर एक हार्डकोडेड <HintPath> स्पष्ट रूप से 64 बिट mscorlib के साथ एक <Reference> जोड़ने था:

<Reference Include="mscorlib"> 
    <HintPath>$(windir)\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll</HintPath> 
</Reference> 

यह काम करता है और शायद बेहतर है (जब तक किसी को भी कारणों को बताते परवाह करता है यही वजह है कि पिछले दृष्टिकोण बेहतर है), लेकिन क्या कोई यह पुष्टि कर सकता है कि ऐसा करने के लिए एक उचित बात है, उम्मीद है कि कुछ अधिकृतकर्ता का हवाला देते हुए?

+0

मुझे एक ही समस्या का सामना करना पड़ रहा है। समाधान में रुचि होगी। धन्यवाद। – decasteljau

उत्तर

5

मुझे अपने प्रोजेक्ट के लक्ष्य ढांचे को .NET Framework 4 में बदलकर मिला, यह चेतावनी को समाप्त कर दिया।

+1

+1 लेकिन एक अलग सीएलआर और वीएस में जाने से धोखाधड़ी हो रही है: पी (सेरिओउल्सी, जवाब देने का समय लेने के लिए धन्यवाद) –

+0

अंततः स्वीकार करते हुए - हालांकि यह वास्तविक प्रश्न का उत्तर नहीं देता है, यह वह समाधान है जिसका मैं वास्तव में उपयोग कर रहा हूं, और मैं अनुमान लगाओ कि यह पारिस्थितिकी तंत्र में बेवकूफ 'उत्तर' है ... –

+2

यह किसी भी तरह से समस्या का समाधान नहीं है। यह आपके लिए टोड के लिए काम कर सकता है, लेकिन कई परियोजनाओं को एक अलग ढांचे को लक्षित करने के लिए बस बदला नहीं जा सकता है। – xxbbcc

3

मेरा मानना ​​है कि आपका दूसरा विकल्प (/nostdlib+ के साथ स्पष्ट संदर्भ) बेहतर है, क्योंकि अगर आप उसी प्लेटफ़ॉर्म पर बनाए गए अन्य असेंबली का संदर्भ नहीं देते हैं तो यह चेतावनी दबाने नहीं देगा।

+0

+1 अंतर्दृष्टि (पहले पढ़ें मुझे यकीन नहीं था)। मैं अपने चुने हुए रेटिंग पर लटकने के लिए स्वीकार करने पर रोक लगाऊंगा: पी (गंभीरता से: मुझे अपने दूसरे दृष्टिकोण के किसी नकारात्मक निषेध में दिलचस्पी है - आपको लगता है कि अगर कोई डाउनसाइड्स नहीं है तो इसे वीएस द्वारा डिफॉल्ट किया जाएगा)। हालांकि मुझे लगता है कि 'एमएसबिल्ड' परिप्रेक्ष्य से, यह बहुत समझ में आता है, और 'सीएससी' में यह नीति पूरी तरह से उपकरण –

+1

में बनाई गई नहीं होनी चाहिए, जब तक कि आप x86 बॉक्स पर संकलित नहीं हो रहे हैं, मैं किसी भी डाउनसाइड्स के बारे में नहीं सोच सकता उस रास्ते में असेंबली नहीं हो सकती है। –

+0

जहां तक ​​एमएसबिल्ड का संबंध है (वास्तव में टीम बिल्ड), मेरी प्राथमिकता उस मंच पर प्रत्येक मंच निर्माण को चलाने के लिए होगी। –

9

In this blog मैं इस प्रस्ताव को भी यहाँ पर पूरी तरह से इसे कॉपी लंबा है, लेकिन संक्षेप में विचार सारांश this comment से अनुकूलित के साथ वर्णित किया जा सकता पाया:

प्रोजेक्ट फ़ाइल में, आप एक कस्टम चर परिभाषित कर सकते हैं प्रत्येक निर्माण विन्यास के लिए संपत्ति समूह अनुभाग में। उदाहरण:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'"> 
    <MyCustomPath>C:\Windows\Microsoft.NET\Framework64</MyCustomPath> 
</PropertyGroup> 

बस जैसे

<Reference Include="System.Data"> 
    <HintPath>$(MyCustomPath)</HintPath> 
</Reference> 

एक टैग को जोड़ने के लिए और फिर संदर्भ पथ को परिभाषित करने के लिए मैक्रो का उपयोग करें। आप विभिन्न बिल्ड कॉन्फ़िगरेशन (प्लेटफ़ॉर्म और/या डीबग/रिलीज़) के लिए MyCustomPath को किसी भिन्न स्थान पर परिभाषित कर सकते हैं।
यदि एमएस वीएस यूआई में इसका समर्थन करेगा तो समस्या मौजूद नहीं होगी, लेकिन तब तक यह काम करेगी। मैं इस तकनीक का उपयोग अपने डीबग & रिलीज बिल्ड में एक ही असेंबली के विभिन्न संस्करणों के संदर्भ में करने के लिए करता हूं। बहुत अच्छा काम करता है!

उपर्युक्त पाठ में मैंने स्रोत टिप्पणी में खोए गए टैग को पुनर्प्राप्त किया और शब्द को कुछ और विस्तृत बताया।


same blog से एक अतिरिक्त दिलचस्प टुकड़ा:

ऐसा करने के कुछ अन्य तरीकों से है लेकिन वे भी एक को मैन्युअल परियोजना फ़ाइलों को संपादित करने के लिए।एक तरीका है संपत्ति समूह-वर्गों को शर्तों को निर्दिष्ट करना। यह StackOverflow प्रश्न शर्तों के उपयोग पर प्रकाश डाला गया है।

+0

+1 मेरे परिदृश्य में, मुझे वास्तव में इस तकनीक की आवश्यकता नहीं है - मैं हमेशा 'x64' चाहता हूं। अभी भी सवाल अस्वीकार्य छोड़ रहा है - मैं जानना चाहता हूं कि माइक्रोसॉफ्ट एक अंतर्निहित त्रुटि को संभालने के तरीके के रूप में क्या सिफारिश करेगा (उनके भयानक मंच सॉफ़्टवेयर को सहन करने के बिना: पी) –

0

मेरे मामले में, मुझे यह चेतावनी थी क्योंकि मेरे पास मेरे समाधान में x86 और x64 प्रोजेक्ट का मिश्रण था। अगर मैं अपनी सभी परियोजनाओं में x86 बिल्ड कॉन्फ़िगरेशन बनाता हूं, और निर्माण के लिए लक्षित करता हूं, तो चेतावनियां दूर हो जाती हैं। हालांकि, अगर मैं x64 को लक्षित करना चाहता था, तो मेरा मानना ​​है कि मुझे x64 ढांचे के लिए पुन: कार्य करने के लिए प्रोजेक्ट का पुनर्निर्माण करना होगा (या ऊपर सलाह का पालन करना होगा)।

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

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