2015-09-30 28 views
7

के लिए साझा कक्षा लाइब्रेरी संदर्भ हमारे वर्तमान माहौल में, हमारे पास कुछ साझा साझा लाइब्रेरी (सी # क्लास लाइब्रेरी .NET 4.5.1 csproj) परियोजनाएं हैं जिन्हें एएसपीनेट और कंसोल अनुप्रयोगों दोनों द्वारा संदर्भित किया जाता है। हम आने वाले कुछ नए बदलावों का परीक्षण शुरू करने के लिए हमारी वेब परियोजनाओं में से 1 को एएसपी.NET 5 में अपग्रेड करना चाहते हैं।एएसपी.नेट 5 बीटा 7

चूंकि मैं पुराने csproj लाइब्रेरी प्रकार में एएसपी.NET 5 में कोई प्रोजेक्ट संदर्भ नहीं कर सकता, मुझे लाइब्रेरी को इसके संकलित डीएलएल द्वारा संदर्भित करना है और project.json (जो हमारे लिए ठीक है) से dnxcore50 को हटा देना है। हालांकि, हम साझा लाइब्रेरी स्रोत के स्वामी हैं और लगातार हमारे DEV पर्यावरण में संशोधन के लिए अपडेट लाते हैं और डीएलएल को अक्सर बदलाव की आवश्यकता होगी। एएसपी.नेट 5 डीएलएल को एक lib निर्देशिका के अंदर रखता है और csproj निर्देशिका के पथ का उपयोग नहीं करता है।

यदि आपके पास asp.net & कंसोल csproj ऐप्स के साथ एएसपीनेट 5 ऐप्स के साथ 2 कोड बेस बनाए रखने के बिना एक सामान्य कोड लाइब्रेरी साझा करने की आवश्यकता है तो आप क्या करेंगे? क्या आप सामान्य लाइब्रेरी प्रोजेक्ट को संकलित करने के लिए एक बिल्ड कार्य की अनुशंसा करेंगे और एएसपीनेट 5 प्रोजेक्ट को संकलित करने से पहले संदर्भ में डीएलएल को संदर्भित करेंगे या इसके बजाय हमारी साझा लाइब्रेरी के लिए स्थानीय न्यूजेट रेपो सेट अप करेंगे क्योंकि परियोजना संदर्भ अब सीस्पोज़ के लिए प्रश्न से बाहर हैं? हम टीएफएस में इस कोड के साथ एक साझा टीम हैं, इसलिए मुझे जो भी करना है, उसे हर किसी के लिए आसानी से दोहराने की जरूरत है।

उत्तर

2

यदि साझा कोड अक्सर परिवर्तित नहीं होता है, तो मैं एक साझा nuget भंडार के साथ जाऊंगा। इस तरह, आपको nuget संकुल का उपयोग करने के सभी लाभ मिलते हैं: संस्करण, आसान बहाली, आदि। आपके समाधान में कम परियोजनाएं हो सकती हैं और तेज़ी से संकलित हो सकती हैं। लेकिन यदि साझा कोड लगातार बदल जाता है, तो पैक-पुश-पुनर्स्थापना प्रक्रिया के माध्यम से जाना दर्दनाक हो सकता है।

एक और तरीका है - dnu में wrap नामक एक आसान कमांड है। यह आपकी मौजूदा .csproj फ़ाइलों को project.json फ़ाइलों में लपेटता है जिसे बाद में एस्पनेट 5 परियोजनाओं द्वारा संदर्भित किया जा सकता है।

आप कुछ इस तरह कर सकते हैं:

  1. कुछ शीर्ष स्तरीय निर्देशिका में अपनी परियोजनाओं में शामिल है में एक global.json फ़ाइल जोड़ें। एक ही निर्देशिका global.json प्रत्येक मौजूदा .csproj परियोजना के लिए निष्पादित dnu wrap जिसमें में

    { 
        "projects": [ "src", "test" ], 
        "sdk": { 
         "version": "1.0.0-rc1-final" 
        } 
    } 
    
  2. : projects अनुभाग, सूची निर्देशिका है कि अपने स्रोत कोड होता है, उदाहरण के लिए।

    dnu wrap src/my.project/my.project.csproj 
    

    यह एक निर्देशिका wrapproject.json फ़ाइलें कि रैप .csprojs युक्त बनाना चाहिए। एक नमूना फ़ाइल इस तरह दिखता है:

    { 
        "version": "1.0.0-*", 
        "frameworks": { 
         "net45": { 
          "wrappedProject": "../../src/my.project/my.project.csproj", 
          "bin": { 
           "assembly": "../../src/my.project/obj/{configuration}/my.project.dll", 
           "pdb": "../../src/my.project/obj/{configuration}/my.project.pdb" 
          } 
         } 
        } 
    } 
    

    ध्यान दें कि wrap निर्देशिका भी global.json में projects अनुभाग में जोड़ा जाता है।

  3. अपने समाधान में, एक नया एस्पनेट प्रोजेक्ट जोड़ें और लपेटा गया प्रोजेक्ट का संदर्भ जोड़ें। बस जोड़ें:

    "my.project": "" 
    

    से dependencies अनुभाग।एस्पनेट को रूट निर्देशिका में स्वचालित रूप से global.json फ़ाइल लेनी चाहिए, और वहां सूचीबद्ध सभी निर्देशिकाओं में परियोजनाओं की तलाश होगी, जिसमें wrap निर्देशिका भी शामिल है।

  4. अब तुम जाने के लिए अच्छा कर रहे हैं - आप, आदि my.project से सभी वर्गों का उपयोग उन में कदम जबकि डिबगिंग कर सकते हैं, परिभाषा के लिए जाना ध्यान दें कि आपके समाधान में, आप अभी भी पुराने csproj है।

आप यहां एक नमूना कोड पा सकते हैं: https://github.com/heavymetaldev/aspnet5-wrap

मुझे लगता है कि यदि आपके पास अपनी परियोजनाओं में कुछ कस्टम चीजें हैं, जैसे सशर्त संकलन, कस्टम शामिल हैं, आदि।

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