c# - How to programmatically update project references in a Visual Studio project -
मेरे पास एक फ़ाइल संरचना है जैसे निम्नलिखित:
- binaries - binary1.dll - Dev - & lt; डेवलपर-नाम & gt; - a.csproj-trunk - a.csproj डेवलपर्स जिनको एक सीप्रोज पर काम करना है, वे देव की शाखा बना देंगे और वे वहां से काम करेंगे। हमारी परियोजनाओं को बायनेरी डायरेक्टरी में बाइनरी 1.dll का संदर्भ होना चाहिए।
यदि संदर्भ एक सापेक्ष पथ है (विजुअल स्टूडियो डिफॉल्ट), तो पथ ट्रंक में परियोजना के लिए दोनों काम नहीं करेगा और डेवलपर की शाखा में प्रोजेक्ट।
इस समस्या को हल करने के लिए मैंने एक पर्यावरण चर बनाने का विचार किया और इसके बजाय परियोजना फ़ाइल में इसका प्रयोग किया:
& lt; संदर्भ शामिल करें = " binary1 "& gt; & LT; HintPath & gt; $ (MY_ENV_VAR) \ binary1.dll & lt; / HintPath & gt; & Lt; / संदर्भ & gt; यह पूरी तरह से काम करता है, लेकिन मैं डेवलपर्स को संदर्भों को अधिक आसानी से जोड़ने में मदद करना चाहता था, इसलिए मैंने उस प्रोग्राम को लिखा जो रिश्तेदार पथ को परिवर्तित करेगा जो कि binary1.dll को इंगित करे (उदाहरण के लिए, देव शाखा से A.csproj यह पथ ../../ binaries / binary1.dll से $ (MY_ENV_VAR) \ binary1.dll ) को बदल देगा, लेकिन मुझे पता नहीं है कि कैसे इसे काम करने के लिए।
अगर मैं एक प्री-बिल्ड इवेंट का उपयोग करता हूं, तो परियोजना पहले से ही मेमोरी में भरी हुई है और इवेंट एक त्रुटि लौटती है क्योंकि यह प्रोजेक्ट फाइल नहीं लिख सकता है।
तब मुझे एहसास हुआ कि मैं MSBuild लक्ष्य को ओवरराइड कर सकता हूं, और लक्ष्य के साथ प्रयास कर सकता हूं: BeforeCompiler , AfterCompiler , BeforeBuild AfterBuild और उन सभी में परियोजना पहले ही लॉक है
फिर मैं भाग गया और मैंने अपने कोड को GenerateApplicationManifest लक्ष्य में निष्पादन योग्य कॉल करने के लिए संशोधित किया, लेकिन वह एक निष्पादन योग्य को बिल्कुल भी नहीं कहता।
कुछ अन्य विचार जो मैं साथ खेल रहा हूं एक नई परियोजना का निर्माण कर रहा है जो दूसरी परियोजना को अद्यतन करता है और उनके बीच एक लिंक होता है, लेकिन यह परियोजनाओं की संख्या को दोहराएगा।
मैं कर सकता था भी बस ट्रंक की गहराई में परिवर्तन, लेकिन यह केवल समस्या छुपाता है और वास्तव में इसे हल नहीं करता है जब डेवलपर्स विभिन्न देवताओं या देवताओं की शाखाओं में एक शाखा बनाते हैं, तो मुझे फिर से एक ही समस्या हो सकती है।
वहां एक और विशेषता भी हो सकती है जो इसे एक अधिक सुंदर तरीके से ठीक करती है, लेकिन मैं
तो मेरा प्रश्न: मैं सीएस परियोजना को संशोधित करने के लिए एमएस बिल्ड या प्री-बिल्ड इवेंट कैसे प्राप्त करूं?
मुझे ऐसा करने का एक तरीका मिला। मुद्दा यह था कि विजुअल स्टूडियो प्रक्रिया ही परियोजना को लॉक कर रही थी, लेकिन विजुअल स्टूडियो फ़ाइल को अधिलेखित कर सकता था। इसमें शामिल करने के लिए मैंने एक सीएसएसआरजीज संशोधित किया:
& lt; लक्ष्य नाम = "पहले बिल्ड" & gt; & Lt; Exec Command = "UpdateReferences.exe" / & gt; & Lt;! - यह $ (ProjectPath)। नई फ़ाइल बनाता है - & gt; & Lt; सोर्सफाइलों को ले जाएं = "$ (प्रोजेक्टपाथ)। New" गंतव्यफ़ाइल = "$ (प्रोजेक्टपाथ)" / & gt; & Lt; / लक्ष्य & gt;
Comments
Post a Comment