Razor / MVC3 kullanarak AssemblyVersion'ı bir web sayfasına alma sorunu


104

AssemblyInfo sürüm verilerini MVC3 sitemdeki her sayfanın altbilgisine koymak için _Layout.cshtml dosyamdaki bir altbilgide aşağıdaki kodu kullanıyorum. Ancak:

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

Sadece altbilgiye yazdırılır:

Revision 0.0.0.0

Aşağıdakileri kullanarak "Montaj Yürütülüyor" için tüm montaj bilgilerini görüntülemek için görünümü değiştirdiğimde

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

Aşağıdakileri yazdıran:

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

Bu, "Yürütme Meclisi" nin benim ana uygulamam olmadığını, görünümün kendisinin olduğunu gösteriyor.

Yalnızca tek tek görünümler için değil, GERÇEK uygulama için montaj bilgilerini nasıl edinebilirim?

Yanıtlar:


218

cshtml / vbhtml, montaj için dinamik derlemedir.

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

buna ne dersin?


15
Ve @GetType(YourApplicationNamespace.MvcApplication).Assembly.GetName.Versiontüm VB.NETer'lar için. İkimiz de.
edhubbell

Ayrıca övgülerimi de paylaşmalıyım - "qa için uygulamada revizyon numarasını göster" hikayemin üst kısımları [assembly: AssemblyVersion ("1.0. *")] İle birlikte güzel görünümlü bir yapı numarası alıyorum. Harika çalışıyor.
nocarrier

4
WebAPI siteleri için: @typeof(YourDefaultNamespace.WebApiApplication).Assembly.GetName().Version. Varsayılan ad alanı olmadan bile çalışabilir:@typeof(WebApiApplication).Assembly.GetName().Version
Cristian Diaconescu

@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version.ToString(3)merak eden varsa montaj versiyonunun 4 parçasından 3'ünü döndürür. 0 ile 4 arasında değişebilir.
Mafii

1
dotnet core 2.1'de bu benim için çalışıyor: @{Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;}o zaman<h1>Ver. @version</h1>
Leonard AB

16

Bu yardımcıyı kullanmak benim için çalışıyor:

    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

Bu benim için çalışıyor. Türü açıkça belirtmeye gerek kalmadan.

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

5

Projede bir tipin montajını almanız gerekiyor:

typeof(MyType).Assembly.Whatever

MyTypeMVC projesinin kendisinde herhangi bir tür nerede (örneğin, bir kontrolör veya model veya MvcApplicationsınıf)


Bu aslında kabul edilen IMO'dan daha iyi bir cevaptır, çünkü uygulamanızın montajının bir parçası olan bir Tip aradığınızı açıkça ortaya koymaktadır. Sorunun nedenini daha iyi açıklıyor.
Jim

4

Takepara'nın cevabını genişleterek, bir MVC Razor Görünümünden AssemblyInformationalVersionAttribute'u almak için bir astar istiyorsanız:

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

1

GetCallingAssembly () kullanmayı deneyebilirsiniz. Çağrı yığınının yeterince yüksek olup olmadığından emin değilim, ancak Razor aslında her görünüm için bir montaj oluşturduğundan, uygulamanızın görünüm derlemesi için çağıran derleme olmasının nedeni duruyor.


Get Calling meclisi ağaçta bir seviye yukarı çıkıyor ... hala işe yaramıyor.
Jay Stevens

1

bir api denetleyicisi için bunu diğer yanıtlara göre kullandım

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

0

Benim sorunum, daha sonra ad alanını yeniden adlandırmam ve yukarıdaki hatayı almamdı. Sorun, Views \ Web.config dosyasındaki eski ad alanı başvurusuydu. Ben onu değiştirmek zorunda Project.WebAPI17içinCompany.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

Aşağıdaki gibi Name özelliğini kullanarak elde edebilirsiniz:

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

Aradığın şey bu mu?


-1

Home Controller'a gidin ve şu kodu kopyalayın:

ActionResultDize Olarak Yeniden Adlandır

public string Index()

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

run view
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.