7

मेरे पास Entlib 5.0 का स्रोत कोड है और मुझे अपनी स्वयं की कुंजी (स्नैक फ़ाइल) का उपयोग करके सभी असेंबली पर हस्ताक्षर करने की आवश्यकता है।प्रोग्रामेटिक रूप से csproj फ़ाइलों को संशोधित करें

सबसे आसान तरीका है दृश्य स्टूडियो में EnterpriseLibrary.2010 समाधान फ़ाइल खोलने के लिए और उसके बाद प्रत्येक परियोजना के लिए चयन किया जाएगा गुण> साइन इन करना और चयन विधानसभा साइन और फिर अपने कुंजी फ़ाइल चुनें।

लेकिन मैं मैन्युअल रूप से करते हैं तो मैं एक पटकथा लिखने के लिए मैन्युअल रूप से परियोजना फ़ाइलों को संपादित और PropertyGroups की वर्तमान सूची के अंत में निम्नलिखित सम्मिलित करने के लिए कर सकता है नहीं करना चाहती:

<PropertyGroup> 
    <SignAssembly>true</SignAssembly> 
    </PropertyGroup> 
    <PropertyGroup> 
    <AssemblyOriginatorKeyFile>keyFile.snk</AssemblyOriginatorKeyFile> 
    </PropertyGroup> 

किसी भी सहायक वर्ग सी # या स्क्रिप्टिंग में यदि यह आसान और त्वरित तरीका करने के लिए बेहतर था?

+1

क्यों एक सी # प्रोग्राम नहीं लिखते जो XDocument क्लास का उपयोग करता है? –

उत्तर

19

आप Microsoft.Build.BuildEngine नाम स्थान पर एक नज़र ले जा सकते हैं MSDN Link

नमूना कोड:

Engine eng = new Engine() 
Project proj = new Project(eng); 
proj.Load(FullProjectPath); 
proj.SetProperty("SignAssembly", "true"); 
proj.Save(FullProjectPath); 

मैं कुछ मेरी कंपनी के .csproj के सभी भर में परिवर्तन की एक श्रृंखला बनाने के लिए इसी तरह हाल ही में उपयोग मैन्युअल रूप से प्रत्येक प्रोजेक्ट खोलने और परिवर्तन करने के बजाय फ़ाइलों (200 से अधिक)।

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

+1

यकीन है कि, जब मैंने इसका इस्तेमाल किया, तो मैंने एक कंसोल एप्लिकेशन लिखा जिसने हमारी स्रोत निर्देशिका को देखा और सभी .csproj फ़ाइलों को उठाया और फिर मुझे आवश्यक परिवर्तन किए। आपको बस माइक्रोसॉफ्ट.बिल्ड.इंजिन और माइक्रोसॉफ्ट.बिल्ड.फ्रेमवर्क –

+0

पर एक संदर्भ जोड़ने की जरूरत है यदि आप इस पुस्तकालय के माध्यम से csproj के "पोस्ट बिल्ड इवेंट" भाग उपलब्ध हैं तो क्या आप हाथ से जानते हैं? मैंने थोड़ा सा काम किया है। लेकिन अभी तक यह नहीं मिला है। धन्यवाद। और इस प्रतिक्रिया के लिए "उपरोक्त"। – granadaCoder

+0

सुनिश्चित करें, आपको कुछ ऐसा करने में सक्षम होना चाहिए जैसे लक्ष्य पोस्टबिल्ड = proj.Targets ["Afterbuild"]; यह मानते हुए कि परियोजना प्रोजेक्ट में यह टिप्पणी नहीं की गई थी। मैंने लगभग 5 सेकंड तक चारों ओर पोक किया और यह नहीं देखा कि लक्ष्य कैसे जोड़ा जाए यदि यह अस्तित्व में नहीं था, लेकिन मुझे पता है कि यह किया जा सकता है। साथ ही, यह नामस्थान अप्रचलित है और इसके प्रतिस्थापन के साथ आपको अधिक भाग्य हो सकता है। –

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