2008-10-16 13 views
9

यदि आप अपने प्रोजेक्ट गुणों को देखते हैं तो .NET या Silverlight एप्लिकेशन बनाते समय विजुअल स्टूडियो 2008 (और अन्य) में, ऐसा लगता है कि आपके पास केवल एक असेंबली नाम हो सकता है - सभी कॉन्फ़िगरेशन में। डिबग मोड में और सिर्फ MyApp - - रिलीज़ मोड मेंविभिन्न विन्यास के लिए एक अलग असेंबली नाम का उपयोग कैसे करें?

अगर यह संभव हो सकता है किसी को भी पता है

MyAppDebug: मैं के रूप में अपने आवेदन संकलित करने के लिए चाहते हैं?

संपादित करें:

यह कुछ लोगों के सवाल के पीछे तर्क पूछताछ कर रहे हैं लगता है, इसलिए मैं थोड़ा आगे समझाएंगे:

मैं एक Silverlight आवेदन जो स्वचालित रूप से पर अपलोड हो जाता पर काम कर रहा हूँ जब मैं "समाधान समाधान" करता हूं तो हमारी टेस्ट साइट। परेशानी यह है कि परीक्षण टीम अब ऑनलाइन संस्करण का परीक्षण कर रही है, जबकि मैं एक नए काम पर काम करता हूं। इसलिए, मैं नियमित संस्करण के लिए \ MyApp.html जैसे यूआरएल चाहता हूं कि क्यूए टीम परीक्षण करेगी और फिर। \ MyApp.html? Version = वर्तमान संस्करण के लिए डीबग करें जिस पर मैं काम कर रहा हूं।

उत्तर

1

मैं प्राप्त करने के लिए क्या मैं एक के बाद निर्माण स्क्रिप्ट का उपयोग करके के बाद था प्रबंधित किया है:

if "$(ConfigurationName)"=="Debug" goto debug 
"$(SolutionDir)ftp.bat" "$(TargetDir)$(TargetName).xap" 
:debug 
"$(SolutionDir)ftp.bat" "$(TargetDir)$(TargetName).xap" "$(TargetDir)$(TargetName)Debug.xap" 

मेरे एफ़टीपी स्क्रिप्ट मूल रूप से अंत के रूप में फाइल को अपलोड करने के लिए क्या है पर एक वैकल्पिक पैरामीटर स्वीकार करता है। तो मेरी स्थानीय मशीन पर फ़ाइल नाम हमेशा समान होते हैं, लेकिन डीबग मोड में हम इसे फ़ाइल नाम के अंत में "डीबग" के साथ अपलोड करते हैं। अब मैं अपने वेबपृष्ठ में कौन सा संस्करण दिखाना चुन सकता हूं। या तो विन्यास विशिष्ट संपत्ति समूहों में विशेषता ले जाते हैं, या सिर्फ स्थिति का उपयोग करें:

+1

इसके बजाय विभिन्न फ़ोल्डर्स का उपयोग क्यों नहीं कर रहे हैं? – mbx

3

निश्चित रूप से आप असेंबली का नाम बदलने के लिए एक पोस्ट-बिल्ड ईवेंट जोड़ सकते हैं। यदि आपके समाधान में केवल एक असेंबली है तो यह काम करेगा।

लेकिन यदि आपके समाधान में कई परियोजनाएं हैं, तो आपके पास आमतौर पर एक अन्य समस्या से उत्पन्न असेंबली का संदर्भ देने वाला एक प्रोजेक्ट होता है। कल्पना करें कि आपके समाधान में दो प्रोजेक्ट हैं: पहला एक विंडोज फॉर्म exe (MyApp.EXE) बनाता है, जो दूसरी परियोजना (MyData.DLL) द्वारा बनाई गई असेंबली का संदर्भ देता है।

इस उदाहरण में डीबग EXE को MyAppDebug.EXE नाम दिया जाएगा, और इसे MyDataDebug.EXE को संदर्भित करने की आवश्यकता है। और यह पोस्ट-बिल्ड इवेंट में नाम बदलने के साथ काम नहीं करेगा।

इसलिए मैं दृढ़ता से अनुशंसा करता हूं कि कोई भी नामकरण न करें।

+2

बाद निर्माण नाम के साथ एक और समस्या नहीं है: आप डिबगर एकीकरण का एक बहुत खो देते हैं। आपको मूल रूप से प्रोग्राम को चलाने के लिए और फिर डीबगर संलग्न करना होगा। –

2

आप पूरी तरह अपने दिल को ऐसा करने पर निर्धारित किया है, तो आप कुछ इस तरह अपने AssemblyInfo.cs फ़ाइल में कर सकता है:

#if DEBUG 
[assembly: AssemblyTitle("MyAssemblyDebug")] 
#else 
[assembly: AssemblyTitle("MyAssembly")] 
#endif 

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

ऊपर वर्णित अनुसार यह आम तौर पर एक बुरा विचार होने जा रहा है क्योंकि यह केवल भ्रम, और रखरखाव के साथ मुद्दों को पेश करेगा। तुम सब एक पोस्ट का निर्माण आपरेशन करके फ़ाइलों का नाम है:

नाम बदलने "$ (ProjectDir) बिन \ डीबग \ SomeAssembly.dll" SomeAssemblyDebug.dll

तो फिर तुम हेवन ' वास्तव में आपकी असेंबली की पहचान केवल फ़ाइल नाम बदल नहीं है। आप इसे Bob.dll नाम दे सकते हैं और सीएलआर के संबंध में यह वही पहचान होगी जहां तक ​​सीएलआर का संबंध है। यह एकमात्र समय है जब आप एक दृढ़ नामित असेंबली का उपयोग कर रहे हैं जो जीएसी में तैनात किया जा रहा है। उस स्थिति में आप असेंबली नाम से एक अलग फ़ाइल नाम नहीं कर सकते हैं।

आप वास्तव में विधानसभा नाम का नाम बदलने की कोशिश कर रहे हैं, और न सिर्फ फ़ाइल नाम है, तो आप अपने हाथ पर एक और मुद्दा है क्योंकि यह अब CLR करने के लिए एक पूरी तरह से अलग विधानसभा है।

मुझे लगता है कि आप मानकों उस जगह में पहले से ही हैं साथ बेहतर रहने के लिए कर रहे हैं। अगर आपको खुद को कुछ अजीब कुछ करना पड़ता है तो शायद आपको खुद से पूछना चाहिए कि आप ऐसा करने की कोशिश क्यों कर रहे हैं। एक बेहतर समाधान हो सकता है।

10

मैं .csproj फ़ाइल के साथ खिलवाड़ करके इस किया है। उदाहरण:

<AssemblyName>MyApp</AssemblyName> 
<AssemblyName Condition=" '$(Configuration)' == 'Debug' ">MyAppDebug</AssemblyName> 

दृश्य स्टूडियो कुछ हद तक अपंग हो जाता है जब आप इस तरह .csproj साथ खिलवाड़ शुरू - उदाहरण के लिए मैं अब और नहीं F5/डीबग मोड में परियोजना को चलाने के लिए F10; यह मुझे बताता है कि "MyApp.exe" नहीं मिला था (यानी डीबगर गलत असेंबलीनाम के साथ असेंबली लॉन्च करने का प्रयास करता है)।

+1

अनचाहे लेकिन मुझे लगता है कि यदि आप पहली पंक्ति को दूसरी पंक्ति के विपरीत सशर्त बनाते हैं तो आपकी डीबग समस्याएं दूर हो सकती हैं। विजुअल स्टूडियो शायद एक असेंबलीनाम के लिए पार्सिंग बंद कर देता है जब यह पहला काम करता है जो काम करता है। –

+1

मैंने सीएडी ब्लोक की परिकल्पना का परीक्षण किया है और यह बिल्कुल सही है। आदेश को स्विच करना (या अधिक सामान्यतः, किसी भी सशर्त बयान डालने से पहले) 'MyApp.exe' को त्रुटि नहीं मिलेगी। एक बार विजुअल स्टूडियो को वैध असेंबली नाम मिल जाए, तो यह आने वाले किसी भी व्यक्ति को अनदेखा करता है। – eskimwier

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