2010-12-13 14 views
8

पर .NET फ्रेमवर्क का लक्ष्य विशिष्ट संस्करण मैं अपने विजुअल स्टूडियो 2010 समाधान में .NET 3.5 और .NET 4.0 दोनों को लक्षित करना चाहता हूं।विजुअल स्टूडियो 2010 समाधान स्तर

मुझे पता है कि मैं अपनी परियोजना फ़ाइलों में <TargetFrameworkVersion /> सेट कर सकता हूं, हालांकि मुझे एक विशिष्ट .NET फ्रेमवर्क संस्करण के समाधान के निर्माण से पहले प्रत्येक प्रोजेक्ट फ़ाइल को संपादित करने की आवश्यकता है। स्कॉट डोर्मन एक मैक्रो प्रदान करता है जो अपने ब्लॉग पोस्ट Visual Studio 2010 and Target Framework Version पर चाल करता है।

मैं एक वैश्विक समाधान की तलाश में हूं जहां मुझे हर परियोजना में सेटिंग बदलने की ज़रूरत नहीं है। क्या एक ही चीज़ को प्राप्त करने के लिए समाधान स्तर पर केंद्रीय सेटिंग बदलना संभव है?

उत्तर

18

जैसा कि जॉन स्कीट ने लिखा था, समाधान स्तर पर लक्ष्य ढांचे को परिभाषित करने का कोई स्पष्ट तरीका नहीं है। हालांकि, यह समाधान के लिए विशिष्ट कॉन्फ़िगरेशन जोड़कर, *.csproj फ़ाइलों को मैन्युअल रूप से संपूर्ण प्रोजेक्ट के लिए वैश्विक रूप से प्रत्येक कॉन्फ़िगरेशन के लिए लक्ष्य निर्दिष्ट करने के लिए मैन्युअल रूप से संपादित करके किया जा सकता है। - कॉन्फ़िगरेशन मैनेजर

  1. करें बिल्ड:

    यहाँ एक कदम-दर-कदम गाइड है।

  2. सक्रिय समाधान विन्यास ड्रॉप-डाउन सूची में, का चयन करें और एक सार्थक नाम (जैसे Debug v3.5) आपके पास पहले से जो कुछ भी मौजूदा सेटिंग के आधार पर दर्ज करें।
  3. प्रत्येक परियोजना फ़ाइल के लिए, संपादक में खोलें (आप दृश्य स्टूडियो में ऐसा कर सकते हैं, लेकिन आप पहले समाधान Explorer में उस पर राइट क्लिक करें और चुनें अनलोड परियोजना करने के लिए है, तो संपादित xyz.csproj)।
  4. <PropertyGroup> तत्व खोजें जो आपके द्वारा अभी बनाई गई कॉन्फ़िगरेशन से मेल खाता है (उदाहरण के लिए Debug v3.5|AnyCPU)।
  5. एक्सएमएल में जोड़ें, उदाहरण के लिए बंद </PlatformTarget> तत्व के बाद, <TargetFrameworkVersion> और <TargetFrameworkProfile> आपको आवश्यकता है।
  6. फ़ाइल को सहेजें।
  7. समाधान एक्सप्लोरर में, प्रोजेक्ट को फिर से उपलब्ध कराने के लिए रीलोड प्रोजेक्ट कमांड का उपयोग करें।

    <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug v3.5|AnyCPU'"> 
        <DebugSymbols>true</DebugSymbols> 
        <OutputPath>bin\Debug v3.5\</OutputPath> 
        <DefineConstants>DEBUG;TRACE;DOTNET35</DefineConstants> 
        ... 
        <DebugType>full</DebugType> 
        <PlatformTarget>x86</PlatformTarget> 
        <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> 
        <TargetFrameworkProfile>Client</TargetFrameworkProfile> 
        ... 
    </PropertyGroup> 
    

    ध्यान दें कि मैं भी प्रतीक DOTNET35, जो मुझे स्रोत कोड में ढांचे निर्भर #if बयान लिखने की अनुमति देता परिभाषित:

यहां एक नमूना है। उदाहरण के लिए, मैंने कोड के कुछ टुकड़े जो System.Tuple पर भरोसा किया था और कक्षा का एक न्यूनतम संस्करण जोड़कर, मैं अपने .NET 4.0 एप्लिकेशन को .NET 3.5 पर बैक-पोर्ट कर सकता था।

यहाँ मेरी टुकड़ा है:

#if DOTNET35 
namespace System 
{ 
    public class Tuple<T1, T2> 
    { 
     public Tuple(T1 item1, T2 item2) 
     { 
      this.item1 = item1; 
      this.item2 = item2; 
     } 

     public T1 Item1 
     { 
      get 
      { 
       return this.item1; 
      } 
     } 

     public T2 Item2 
     { 
      get 
      { 
       return this.item2; 
      } 
     } 

     private readonly T1 item1; 
     private readonly T2 item2; 
    } 
} 
#endif 
+0

+1: ग्रेट उत्तर। इससे मुझे बहुत मदद मिली। संयोग से, मेरे पास कोड के कुछ टुकड़े भी थे जो 'System.Tuple' पर निर्भर थे। –

+2

वीएस 2012 इस बारे में बहुत खुश नहीं लगता है – leonbloy

6

ऐसा नहीं है कि मुझे पता है।

ध्यान दें कि एक परियोजना कई समाधानों का हिस्सा हो सकती है - या किसी भी समाधान से स्वतंत्र रूप से बनाया जा सकता है। इस प्रकार सभी एक "समाधान स्तर" विकल्प वास्तव में एक नई परियोजना बनाते समय डिफ़ॉल्ट सेट करना होगा।

आप हाथ से संपादित करते हैं तो परियोजना फ़ाइलें, मेरा मानना ​​है कि आप .NET 3.5 और नेट 4 के लिए विन्यास के साथ एक एकल परियोजना फ़ाइल बनाने के लिए सक्षम होना चाहिए (मैं निश्चित रूप से किया है जो .NET 2 और के लिए .NET 3.5 अब पहले।) फिर आपके पास अलग-अलग समाधान-स्तरीय कॉन्फ़िगरेशन हो सकते हैं जो प्रासंगिक प्रोजेक्ट-स्तरीय कॉन्फ़िगरेशन को लक्षित करते हैं।

+0

आप ठीक कह रहे हैं, मैं 'जोड़ने के लिए सक्षम होना चाहिए v3.5' और ' क्लाइंट' सीधे में सशर्त '' तत्व। मैं ऐसा करने के लिए एक इंटरेक्टिव तरीका ढूंढ रहा था, लेकिन वीएस -2010 प्रति सेटिंग कॉन्फ़िगरेशन आधार पर इस सेटिंग को सतह पर नहीं लग रहा है। –

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