रेजर / एमवीसी 3 का उपयोग करके वेब पेज में असेंबलीव्यूशन में समस्या


104

मैं अपने MVC3 साइट में हर पृष्ठ के पाद लेख में असेंबलीइन्फो वर्जन डेटा डालने के लिए अपने _Layout.cshtml फ़ाइल में पाद लेख में निम्न कोड का उपयोग कर रहा हूं। तथापि:

@System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()

सिर्फ पाद में प्रिंट:

Revision 0.0.0.0

जब मैंने निम्नलिखित का उपयोग करके "असेंबली असेंबली" के लिए सभी विधानसभा जानकारी प्रदर्शित करने के लिए दृश्य को संशोधित किया

@System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()

जो निम्नलिखित प्रिंट करता है:

Revision App_Web__layout.cshtml.639c3968.hlogy75x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

इससे पता चलता है कि "एक्ज़ीक्यूटिंग असेंबली" मेरा मुख्य ऐप नहीं है, यह स्वयं ही दृश्य है।

मैं केवल व्यक्तिगत विचार ही नहीं, बल्कि ACTUAL ऐप के लिए विधानसभा की जानकारी कैसे प्राप्त कर सकता हूँ ??

जवाबों:


218

cshtml / vbhtml असेंबली के लिए गतिशील संकलन है।

@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version

इस बारे में कैसा है?


15
और @GetType(YourApplicationNamespace.MvcApplication).Assembly.GetName.Versionसभी VB.NETers के लिए। हम दोनों।
edhubbell

मुझे अपनी प्रशंसा भी साझा करनी होगी - मेरे "टॉप ऑफ़ द क्वीन" के लिए ऐप में संशोधन संख्या "कहानी के साथ-साथ असेंबली: असेंबलीवेरेशन (" 1.0। * ")] मुझे एक अच्छा दिखने वाला बिल्ड नंबर मिलता है। बहुत अच्छा काम करता है।
nocarrier

4
WebAPI साइटों के लिए @typeof(YourDefaultNamespace.WebApiApplication).Assembly.GetName().Version:। यह बिना डिफॉल्ट नेमस्पेस के भी काम कर सकता है:@typeof(WebApiApplication).Assembly.GetName().Version
क्रिश्चियन डियाकोन्सकु

@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version.ToString(3)असेंबली संस्करण के 4 भागों में से 3 लौटाता है अगर कोई उत्सुक है। आप 0 और 4. के बीच भिन्न हो सकते हैं
माफ़ी

1
डॉटनेट कोर 2.1 में यह मेरे लिए काम करता है: @{Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;}तब<h1>Ver. @version</h1>
लियोनार्ड एबी

16

मेरे लिए इस सहायक का उपयोग करना:

    public static HtmlString ApplicationVersion(this HtmlHelper helper)
    {
        var asm = System.Reflection.Assembly.GetExecutingAssembly();
        var version = asm.GetName().Version;
        var product = asm.GetCustomAttributes(typeof(System.Reflection.AssemblyProductAttribute), true).FirstOrDefault() as System.Reflection.AssemblyProductAttribute;

        if (version != null && product != null)
        {
            return new HtmlString(string.Format("<span>{0} v{1}.{2}.{3} ({4})</span>", product.Product, version.Major, version.Minor, version.Build, version.Revision));
        }
        else
        {
            return new HtmlString("");
        }

    }

13

यह मेरे लिए काम करता है। प्रकार का स्पष्ट उल्लेख करने की आवश्यकता के बिना।

@ViewContext.Controller.GetType().Assembly.GetName().Version

5

आपको प्रोजेक्ट में एक प्रकार की असेंबली प्राप्त करने की आवश्यकता है:

typeof(MyType).Assembly.Whatever

MyTypeMVC प्रोजेक्ट में ही कोई भी प्रकार कहां है (उदाहरण के लिए, एक नियंत्रक या मॉडल, या MvcApplicationवर्ग)


यह वास्तव में स्वीकार किए गए एक आईएमओ से बेहतर उत्तर है, क्योंकि यह स्पष्ट करता है कि आप एक प्रकार की तलाश कर रहे हैं जो आपके आवेदन की विधानसभा का हिस्सा है। सॉर्ट समस्या के कारण को बेहतर ढंग से समझाता है।
जिम

4

टेकपारा के जवाब पर विस्तार करते हुए, यदि आप एक लाइनर को असेंबली प्राप्त करना चाहते हैं

@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion

1

आप GetCallingAssembly () का उपयोग करने का प्रयास कर सकते हैं। मुझे यकीन नहीं है कि यह कॉल स्टैक अप करने के लिए पर्याप्त है या नहीं, लेकिन चूंकि रेजर वास्तव में प्रत्येक दृश्य के लिए एक विधानसभा बनाता है, यह इस कारण से खड़ा होता है कि आपका ऐप व्यू असेंबली के लिए कॉलिंग असेंबली होगा।


कॉलिंग असेंबली जाओ पेड़ में सिर्फ एक स्तर ऊपर जाता है ... फिर भी अच्छा नहीं है।
जे स्टीवंस

1

एक एपीआई नियंत्रक के लिए मैंने अन्य उत्तरों के आधार पर इसका उपयोग किया

Version = GetType().Assembly.GetName().Version.ToString()

0

मेरी समस्या यह थी कि मैंने बाद में नाम स्थान का नाम बदल दिया था और मुझे ऊपर त्रुटि मिली। समस्या दृश्य \ Web.config में पुराने नामस्थान संदर्भ थी। मैं से बदलना पड़ा Project.WebAPI17करने के लिएCompany.Project.WebAPI17

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
        <add namespace="Company.Project.WebAPI17" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

-1

आप इसे नीचे के रूप में नाम संपत्ति का उपयोग करके प्राप्त कर सकते हैं:

  @System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;

क्या यह वही है जिसको आप ढूंढ रहें थे?


-1

होम नियंत्रक पर जाएं और इस कोड को कॉपी करें:

ActionResultस्ट्रिंग का नाम

public string Index()

   return typeof(Controller).Assembly.GetName().Version.ToString() ;

run view
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.