2012-12-07 16 views
8

मैं एक ही प्रोजेक्ट कॉन्फ़िगरेशन में दो बार एक ही प्रोजेक्ट बनाना चाहता हूं, जो सुविधाओं को टॉगल करने के लिए कुछ # डिफाईन झंडे बदलता है। दोनों बाइनरी अलग-अलग नामों के साथ तैनात किए जाएंगे।क्या मैं एक समाधान कॉन्फ़िगरेशन के भीतर किसी प्रोजेक्ट की एकाधिक कॉन्फ़िगरेशन बना सकता हूं?

समाधान है कि मैं जानता हूँ कि काम कर सकता था:

  1. एक समाधान विन्यास जोड़ें - लेकिन मैं तो समाधान दो बार निर्माण करने के लिए है, जो मैं से बचने के लिए पसंद करेंगे की आवश्यकता होगी। दोनों प्रोजेक्ट कॉन्फ़िगरेशन हमेशा बनाए जाएंगे।

  2. प्रोजेक्ट की प्रतिलिपि बनाएँ - लेकिन फिर मेरे पास एक नई परियोजना को बनाए रखने का ओवरहेड है जब मैं केवल एक अलग कॉन्फ़िगरेशन बनाए रखना चाहता हूं।

  3. बैच बिल्ड - मैं बैच बिल्ड का उपयोग करने से बचता हूं क्योंकि मैं निरंतर एकीकरण के लिए स्थानीय विकास और एमएसबिल्ड दोनों के लिए डेवनव का उपयोग करता हूं।

कोई अन्य विचार या सुझाव?

उत्तर

5

बस आपने जो कुछ पूछा है उसे करने का एक तरीका निकाला। एक msbuild फ़ाइल बनाएं (मैंने मेरा एकाधिक.proj नाम दिया है) और नीचे लिपि जोड़ें।

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Choose> 
    <When Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> 
     <ItemGroup> 
     <ProjectToBuild Include="$(MSBuildProjectName).csproj"> 
      <Properties>Configuration=Release</Properties> 
     </ProjectToBuild> 
     </ItemGroup> 
    </When> 
    </Choose> 
    <Target Name="BeforeBuild"> 
    <Message Text="Building configuration $(Configuration)..." /> 
    </Target> 
    <Target Name="AfterBuild"> 
    <MSBuild Projects="@(ProjectToBuild)"/> 
    </Target> 
</Project> 

</type> 
</this> 

आयात अपनी परियोजनाओं पर स्क्रिप्ट (csproj या vbproj):

<Import Project="..\multiple.proj" /> 

यह स्क्रिप्ट MSBuild बताता है फिर से अपने प्रोजे निर्माण करने के लिए एक Afterbuild घटना के रूप में एक और विन्यास के साथ टी। मैंने उदाहरण बनाने के लिए डीबग/रिलीज का उपयोग किया, लेकिन आप अन्य कॉन्फ़िगरेशन का समर्थन करने के लिए आसानी से स्क्रिप्ट बदल सकते हैं, या अन्य चर के आधार पर फिर से निर्माण करने का निर्णय ले सकते हैं।

सावधान रहें क्योंकि आप एक बार में दो बिल्ड चला रहे हैं, इसलिए त्रुटियों को समझना मुश्किल हो सकता है।

उम्मीद है कि इससे मदद मिलती है।

+0

यह एक अच्छा दृष्टिकोण जैसा दिखता है - मुझे इसे एक स्पिन देना होगा। –

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

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