2010-05-18 10 views
9

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

उत्तर

5

फ़्रेड्रिक द्वारा सुझाए गए असेंबली नाम टैग की स्थिति को परिभाषित करने के बाद से विजुअल स्टूडियो क्रैकी बनाते हैं, तो आप बाद में csproj फ़ाइल में असेंबली नाम बदल सकते हैं। Choose element का उपयोग करना एक कथन की तरह है, इसलिए यदि कोई शर्त पूरी हो जाती है, तो नीचे दिखाया गया है, तो एक नाम जोड़ा जा सकता है।

एक शर्त विशेषता में उदाहरण DefineConstants के लिए से बाहर सबस्ट्रिंग हो रही है (MSDN के अनुसार) संभव प्रतीत नहीं होता है के साथ "सादे वेनिला MSBuild", लेकिन एक अपने स्वयं के निर्माण लक्ष्य निर्धारित करने और जब एक /p:Tag=value साथ संकलन एक संपत्ति सेट कर सकते हैं (MSBuild command line reference)

... 
    <Tag>true</Tag> 
</PropertyGroup> 
<Choose> 
    <When Condition=" '$(Tag)' == 'true' "> 
    <PropertyGroup> 
     <AssemblyName>$(AssemblyName).TagDefined</AssemblyName> 
    </PropertyGroup> 
    </When> 
</Choose> 
<ItemGroup> 
... 
11

आप एक पाठ संपादक में .csproj फ़ाइल लोड हैं, तो आप AssemblyName संपत्ति को नियंत्रित कर सकते हैं:

<AssemblyName Condition="'$(Configuration)' == 'Debug'">WindowsFormsApplication9.Debug</AssemblyName> 
<AssemblyName Condition="'$(Configuration)' != 'Debug'">WindowsFormsApplication9</AssemblyName> 

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

मैंने कभी यह नहीं किया, इसलिए मैं वास्तव में यह नहीं कह सकता कि विचार कितना अच्छा या बुरा है।

+0

मैं अपने स्वयं के प्रतीक, जैसे 'NO_LOG' या कॉन्फ़िगरेशन चयन के बजाय कुछ) के लिए कोई शर्त कैसे दर्ज करूं? – Patrick

+0

@ पैट्रिक: मेरे एमएसबिल्ड कौशल काफी दूर तक फैले नहीं हैं। वे स्थिरांक 'DefineConstants' संपत्ति में जाते हैं, लेकिन उनमें से सभी एक ही संपत्ति मूल्य ('CONST1 = value; CONST2; CONST3') में जाते हैं और दुर्भाग्यवश ऐसा लगता है कि इसमें कोई" शामिल "-ऑपरेटर नहीं है जिसका उपयोग किया जा सकता है 'हालत' विशेषताएँ। –

+0

इस धागे को जांचें: http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/827eb72a-65fb-426c-862c-6095f71bd4bc –

1

आप csproj फ़ाइल को संपादित कर सकते हैं, जो केवल एक MSBuild फ़ाइल है जिसमें 'कार्य' शामिल है। csproj फ़ाइल में एक सेक्शन है जिसे 'आफ्टरबिल्ड' कहा जाता है।

शायद, आप वहां एक आदेश जोड़ सकते हैं जो आपकी पसंद के फ़ाइल नाम पर आपकी exe फ़ाइल का नाम बदलता है।
(ऑफकोर्स, आपको उस खंड को अपूर्ण करना होगा)।

शायद कुछ इस तरह:

<Target Name="AfterBuild"> 
    <Copy SourceFiles="" DestinationFiles="" Condition="" /> 
    <Delete Files="" Condition="" /> 
</Target> 

मैं इसे बाहर आगे काम नहीं किया है, लेकिन इतना है कि आप देख सकते हैं कि सशर्त प्रतीक या परिभाषित नहीं है आप, स्थिति विशेषता पूरा करना चाहिए।

+0

इसे आजमाया नहीं गया, लेकिन फिर भी दुर्भाग्यवश एक मौजूदा संकलन को ओवरराइट कर देगा। * शायद मैं पहले से हील्ड में प्रवेश कर सकता हूं और मौजूदा एप्लिकेशन की प्रतिलिपि बना सकता हूं *। यदि मैं csproj फ़ाइल में 'DefineConstants' टैग में दर्ज कस्टम सशर्त प्रतीक है तो मैं शर्त कैसे दर्ज करूं? – Patrick

+0

यह मेरे लिए काम नहीं करता है। – Elmue

1

यहां कोई भी जवाब मेरे लिए काम नहीं करता है।

वे या तो त्रुटियां उत्पन्न करते हैं या कुछ भी नहीं करते हैं।

यहां मेरा समाधान है जो वीएस2005 में काम करता है और मुझे लगता है कि यह नए वीएस संस्करणों में भी काम करेगा। इस तरह फ़ाइल * .csproj संपादित करें:

<PropertyGroup> 
    <PreBuildEvent> 
    </PreBuildEvent> 
    <PostBuildEvent> 
    if $(PlatformTarget) == x86 move /y "$(TargetPath)" "$(TargetDir)$(ProjectName)_32.exe" 
    if $(PlatformTarget) == x64 move /y "$(TargetPath)" "$(TargetDir)$(ProjectName)_64.exe" 
    </PostBuildEvent> 
</PropertyGroup> 

परिणाम होगा कि एक 32 बिट संकलन एक फ़ाइल ProjectName_32.exe और एक 64 बिट निर्माण का उत्पादन ProjectName_64.exe पैदा करता है।

कृपया अजीब वाक्यविन्यास नोट करें। if स्थिति के आसपास कोई संश्लेषण नहीं होना चाहिए और x86 उद्धरणों में नहीं होना चाहिए।

इस विधि का नुकसान यह है कि अब आप डीबगर में अपना एक्सई शुरू नहीं कर सकते हैं क्योंकि विजुअल स्टूडियो को जेई उत्पन्न नहीं हुआ है।इसे 'कॉपी' कमांड को 'कॉपी' कमांड के साथ बदलकर हल किया जा सकता है लेकिन इस मामले में आपको एक्स को दूसरी निर्देशिका में कॉपी करना होगा क्योंकि निश्चित रूप से आप एक ही निर्देशिका में एक ही फाइल को दो बार नहीं रखना चाहते हैं।

यह सब एक गड़बड़ है। यह वास्तव में अविश्वसनीय है कि आप सीधे प्रोजेक्ट सेटिंग्स में आउटपुट निर्देशिका दर्ज कर सकते हैं लेकिन एक्सई नाम को बदलने के रूप में वास्तव में कुछ बुनियादी करने के लिए आपको ऐसी बेकार लिपि लिखनी होगी जिसमें बदसूरत साइड इफेक्ट्स हैं। माइक्रोसॉफ्ट पर शर्म आती है!

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