Masalah memasukkan AssemblyVersion ke halaman web menggunakan Razor / MVC3


104

Saya menggunakan kode berikut di footer di file _Layout.cshtml saya untuk meletakkan data versi AssemblyInfo ke footer setiap halaman di situs MVC3 saya. Namun:

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

Hanya mencetak di footer:

Revision 0.0.0.0

Ketika saya mengubah tampilan untuk menampilkan semua info perakitan untuk "Majelis Pelaksana" menggunakan berikut ini

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

Yang mencetak berikut ini:

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

Ini menunjukkan bahwa "Majelis Pelaksana" bukanlah aplikasi utama saya, ini adalah tampilan itu sendiri.

Bagaimana cara mendapatkan informasi perakitan untuk aplikasi SEBENARNYA, bukan hanya tampilan individu ??

Jawaban:


218

cshtml / vbhtml adalah kompilasi dinamis untuk perakitan.

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

bagaimana dengan ini?


15
Dan @GetType(YourApplicationNamespace.MvcApplication).Assembly.GetName.Versionuntuk semua VB.NETers. Kita berdua.
edhubbell

Saya juga harus berbagi pujian saya - ini adalah bagian atas dari cerita "tampilkan nomor revisi di aplikasi untuk qa" bersama dengan [assembly: AssemblyVersion ("1.0. *")] Saya mendapatkan nomor build yang bagus. Bekerja dengan baik.
nocarrier

4
Untuk situs WebAPI: @typeof(YourDefaultNamespace.WebApiApplication).Assembly.GetName().Version. Ia bahkan dapat bekerja tanpa namespace default:@typeof(WebApiApplication).Assembly.GetName().Version
Cristian Diaconescu

@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version.ToString(3)mengembalikan 3 dari 4 bagian versi rakitan jika ada yang penasaran. Anda dapat bervariasi antara 0 dan 4.
Mafii

1
di dotnet core 2.1 ini berfungsi untuk saya: @{Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;}kemudian<h1>Ver. @version</h1>
Leonard AB

16

Menggunakan helper ini berhasil untuk saya:

    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

Ini berhasil untuk saya. Tanpa perlu menyebutkan jenisnya secara eksplisit.

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

5

Anda perlu mendapatkan perakitan tipe dalam proyek:

typeof(MyType).Assembly.Whatever

Di MyTypemana jenis apa pun dalam proyek MVC itu sendiri (misalnya, pengontrol atau model, atau MvcApplicationkelas)


Ini sebenarnya adalah jawaban yang lebih baik daripada IMO yang diterima, karena memperjelas bahwa Anda sedang mencari Jenis yang merupakan bagian dari rakitan aplikasi Anda. Semacam menjelaskan penyebab masalah dengan lebih baik.
Jim

4

Memperluas jawaban takepara, jika Anda ingin satu liner mendapatkan AssemblyInformationalVersionAttribute dari MVC Razor View:

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

1

Anda bisa mencoba menggunakan GetCallingAssembly (). Saya tidak yakin apakah itu cukup tinggi untuk tumpukan panggilan atau tidak, tetapi karena Razor benar-benar membuat rakitan untuk setiap tampilan, masuk akal bahwa aplikasi Anda akan menjadi rakitan panggilan untuk rakitan tampilan.


Get Calling assembly hanya naik satu level di pohon ... masih tidak bagus.
Jay Stevens

1

untuk pengontrol api saya menggunakan ini berdasarkan jawaban lain

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

0

Masalah saya adalah saya telah mengganti nama namespace setelah itu dan saya mendapatkan kesalahan di atas. Masalahnya adalah referensi namespace lama di Views \ Web.config. Saya harus mengubahnya dari Project.WebAPI17menjadiCompany.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

Anda bisa mendapatkannya menggunakan properti Name seperti di bawah ini:

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

apakah itu yang kamu cari?


-1

Pergi ke Home Controller dan salin saja kode ini:

Ubah nama ActionResultmenjadi String

public string Index()

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

run view
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.