2009-04-03 8 views
7

मेरे पास मेरे समाधान की जड़ में एक GlobalAssemblyInfo.cs फ़ाइल है, और मेरे आउटपुट असेंबली के मजबूत नामकरण को सक्षम करने के लिए मेरे पास निम्न प्रविष्टि की तरह कुछ है।GlobalAssemblyInfo.cs और मजबूत नामकरण

#pragma warning disable 1699 
[assembly : AssemblyKeyFile("..\\keyfile.snk")] 
#pragma warning restore 1699 

इस दृष्टिकोण में दो कमीएं हैं। सबसे पहले, Assembly KeyFileAttribute को बहिष्कृत किया गया है, और इसलिए संकलन चेतावनियों से बचने के लिए मुझे उपरोक्त प्रगामा लाइनों की आवश्यकता है। दूसरा, मुझे या तो सभी परियोजनाओं को सापेक्ष पथ का उपयोग करने के लिए रूट के सापेक्ष एक ही गहराई पर रखने की आवश्यकता है, या एक पूर्ण पथ का उपयोग करना है, जो अन्य उपयोगकर्ताओं की मशीनों पर चेकआउट स्थान को निर्देशित करता है (और निरंतर एकीकरण सर्वर/बिल्ड एजेंटों पर) ।

क्या किसी के पास परियोजना फ़ाइल में प्रत्येक नाम सेटिंग मजबूत नामकरण के माध्यम से जाने के अलावा, इसके अलावा कोई बेहतर समाधान है?

उत्तर

1

महत्वपूर्ण हस्ताक्षर के लिए उन विशेषताओं को अच्छे कारण (सूचना रिसाव) के लिए बहिष्कृत किया गया था, जो परियोजना मार्ग पर जाने का एक और कारण है।

यदि आपके पास बहुत सारी परियोजनाएं हैं तो उन्हें रिकॉर्ड किए गए मैक्रो के माध्यम से सेट करना संभव हो सकता है, या यहां तक ​​कि सीधे .csproj फ़ाइलों को मैनिपुलेट करना संभव है (सुनिश्चित करें कि वे पहले वीएस से अनलोड किए गए हैं)।

2

ठीक है, पथ समस्या से बचने के लिए आप [assembly:AssemblyKeyName(...)] का उपयोग कर सकते हैं (हालांकि आईआईआरसी को भी हटा दिया गया है); नामित कुंजी स्थापित करने के लिए sn -i का उपयोग करें। प्रत्येक मशीन (जो बनाता है) को इस कुंजी जोड़ने की आवश्यकता होगी।

इसके अलावा; हां, आपको शायद प्रोजेक्ट फाइलों को संपादित करने की आवश्यकता होगी।

+0

सहमत हुए, जो मुझे दूसरे अंक के दौर में ले जाता है। –

1

रिचर्ड सूचना रिसाव के बारे में एक अच्छा मुद्दा बनाता है - अब मुझे माइक्रोसॉफ्ट की .NET टीम की पोस्ट मिली है जहां वे इसका वर्णन करते हैं। इसलिए मैं उनके सुझाव के लिए चले गए हैं और निम्नलिखित NAnt लक्ष्य के साथ आते हैं:

<target name="strongName" description="Strong names the output DLLs"> 
    <foreach item="File" property="filename"> 
     <in> 
     <items> 
      <include name="**/*.csproj"></include> 
      <exclude name="**/*.Test.csproj"></include> 
     </items> 
     </in> 
     <do> 
     <echo message="${filename}" /> 
     <xmlpoke file="${filename}" xpath="/m:Project/m:PropertyGroup/m:SignAssembly" value="false"> 
      <namespaces> 
      <namespace prefix="m" uri="http://schemas.microsoft.com/developer/msbuild/2003" /> 
      </namespaces> 
     </xmlpoke> 
     <xmlpoke file="${filename}" xpath="/m:Project/m:PropertyGroup/m:AssemblyOriginatorKeyFile" value="..\keyfile.snk"> 
      <namespaces> 
      <namespace prefix="m" uri="http://schemas.microsoft.com/developer/msbuild/2003" /> 
      </namespaces> 
     </xmlpoke> 
     </do> 
    </foreach> 
    </target> 

< नामस्थान > तत्व आवश्यक है के लिए XPath csproj फ़ाइल में हल करने की - ध्यान दें कि यह VS2008 के लिए है, और वीएस2005 में कुछ अलग की आवश्यकता हो सकती है।