2010-05-06 19 views
5

मेरे पास 5 परियोजनाओं के साथ विजुअल स्टूडियो में एक समाधान है। वे हैं:विजुअल स्टूडियो परियोजनाओं में आईएलएमर्ज के साथ बनाई गई असेंबली का संदर्भ

  • Foo.Core: कोर कार्यक्षमता
  • : वेब-विशेष विस्तारण
  • Foo.Web.Mvc: जनरेट किया गया
  • Foo.Web कोर के ऊपर एक बने कोड MVC-विशिष्ट एक्सटेंशन
  • Newtonsoft.Json: 3 पार्टी पुस्तकालय

मैं ILMerge उपयोग करने के लिए एक भी विधानसभा में Foo.Core, और Newtonsoft.Json मर्ज करना चाहते हैं, Foo कहा जाता है। यह आसान हिस्सा है।

जिस समस्या में मैं दौड़ रहा हूं वह यह है कि Foo.Web और Foo.Web.Mvc दोनों को विलयित असेंबली के तीनों को संदर्भित करने की आवश्यकता है।

यदि मैं मूल असेंबली का संदर्भ देता हूं, तो आईएलएमर्ज करने के बाद उनके पास अमान्य संदर्भ होंगे।

यदि मैं ILMerged असेंबली का संदर्भ देता हूं, तो मुझे एक डीबग असेंबली का संदर्भ देना होगा और फिर सबकुछ पैकेज करने से पहले इसे बदलना होगा, जो आदर्श नहीं लगता है।

मैंने Foo नामक एक प्रोजेक्ट बनाने का प्रयास किया है, जो 3 मर्ज किए गए असेंबली का संदर्भ देता है और आईएममेरेड असेंबली के साथ अपने आउटपुट को प्रतिस्थापित करता है, लेकिन ऐसा लगता है कि यह बिल्कुल काम नहीं करता है।

क्या ऐसा करने का कोई विश्वसनीय तरीका है?

उत्तर

2

आईएलएमर्ज को एक नए पैकेज/घटक को एक बॉक्स किए गए 'उत्पाद' (एपीआई, प्रोग्राम ...) के रूप में डिज़ाइन, जीएसी संदर्भ, असेंबली दृश्यता और अन्य सभी के लिए उपयोग के लिए असेंबली प्रबंधन को सरल बनाने के लिए डिज़ाइन किया गया है या बाहरी उपयोग, मिश्रित नहीं।

मेरा अनुमान है आप अपने मुख्य विधानसभा/परियोजना पर सेटअप एक PostBuildEvent करना पड़ता है (?) आप एक या एक PreBuildEvent अपने Foo.Web और Foo.Web.Mvc परियोजनाओं उत्पन्न करने के लिए है, तो अपने में विलय कर दिया Foo जो आपके Foo.Web और Foo.Web.Mvc में संदर्भित किया जाएगा एक बाहरी असेंबली के रूप में परियोजनाओं।

आप इसे एमएसबिल्ड कार्य स्थापित करके विजुअल स्टूडियो में और अधिक एकीकृत कर सकते हैं। sample ( Stackoverflow से)।

+0

हाँ, मैंने ऐसा करने की कोशिश की है, लेकिन मैं जिस प्रभाव को ढूंढ रहा था उसे प्राप्त नहीं कर सका। ऐसा लगता है कि आईएलएमर्ज को एक संकलन-समय की बजाय रिलीज से पहले अंतिम चरण के लिए आरक्षित होने की आवश्यकता होगी। –

+0

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

3

मुझे पता है कि मैं खेल के लिए वास्तव में देर से आ रहा हूं, लेकिन हम इस सटीक समस्या से जूझ रहे थे और यहां हमने इसे हल किया है।

सबसे पहले, हमने फ़ाइल के अस्तित्व के आधार पर बाहरी असेंबली में conditional reference का उपयोग करने के लिए सभी गैर-विलय या उपग्रह परियोजनाओं की csproj फ़ाइलों को संपादित किया। इस मामले में, हम मर्ज किए गए असेंबली के अस्तित्व के लिए परीक्षण करने जा रहे हैं।फिर हमने एक बिल्ड स्क्रिप्ट चलाई जो निम्नलिखित करता है:

  1. समाधान बनाता है।
  2. सशर्त संदर्भ में फ़ाइल होने के आउटपुट के साथ आपकी प्राथमिक असेंबली पर आईएलएमर्ज चलाता है।
  3. समाधान पुनर्निर्माण, लेकिन इस बार क्योंकि मर्ज किए गए असेंबली मौजूद है, गैर विलय या उपग्रह असेंबली के पास अब सही संदर्भ होगा।
+0

उपर्युक्त अवधारणा का एक उदाहरण यहां दिया गया है। प्रोजेक्ट रेफरेंस और रेफरेंस टैग को देखना सुनिश्चित करें: https://github.com/joliver/EventStore/blob/5fce28b92fa875ea8acdfea387161abdee3c8b00/src/proj/EventStore.Persistence.RavenPersistence/EventStore.Persistence.RavenPersistence.csproj –