Sự cố khi đưa AssemblyVersion vào một trang web bằng Razor / MVC3


104

Tôi đang sử dụng mã sau ở chân trang trong tệp _Layout.cshtml của mình để đưa dữ liệu phiên bản AssemblyInfo vào chân trang của mọi trang trong trang web MVC3 của tôi. Tuy nhiên:

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

Chỉ in ở chân trang:

Revision 0.0.0.0

Khi tôi sửa đổi dạng xem để hiển thị tất cả thông tin lắp ráp cho "Lắp ráp thực thi" bằng cách sử dụng như sau

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

Bản in nào sau đây:

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

Điều này cho thấy rằng "Hội đồng thực thi" không phải là ứng dụng chính của tôi, đó là chính chế độ xem.

Làm cách nào để lấy thông tin lắp ráp cho ứng dụng ACTUAL, không chỉ các chế độ xem riêng lẻ ??

Câu trả lời:


218

cshtml / vbhtml là trình biên dịch động sang hợp ngữ.

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

Còn cái này thì sao?


15
@GetType(YourApplicationNamespace.MvcApplication).Assembly.GetName.Versioncho tất cả các VB.NETers. Cả hai chúng ta.
edhubbell 10/12/12

Tôi cũng phải chia sẻ lời khen ngợi của mình - phần đầu câu chuyện "hiển thị số bản sửa đổi trong ứng dụng cho qa" cùng với [assembly: AssemblyVersion ("1.0. *")] Tôi nhận được một số bản dựng đẹp mắt. Hoạt động tuyệt vời.
nocarrier

4
Đối với các trang web WebAPI: @typeof(YourDefaultNamespace.WebApiApplication).Assembly.GetName().Version. Nó thậm chí có thể làm việc mà không có không gian tên mặc định:@typeof(WebApiApplication).Assembly.GetName().Version
Cristian Diaconescu

@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version.ToString(3)trả lại 3 trong 4 phần của phiên bản lắp ráp nếu ai tò mò. Bạn có thể thay đổi từ 0 đến 4
Mafii

1
trong dotnet core 2.1, điều này phù hợp với tôi: @{Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;}sau đó<h1>Ver. @version</h1>
Leonard AB

16

Sử dụng trình trợ giúp này phù hợp với tôi:

    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

Điều này làm việc cho tôi. Mà không cần phải đề cập rõ ràng đến loại.

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

5

Bạn cần phải có được tập hợp của một loại trong dự án:

typeof(MyType).Assembly.Whatever

Đâu MyTypelà bất kỳ kiểu nào trong chính dự án MVC (ví dụ: bộ điều khiển hoặc mô hình hoặc MvcApplicationlớp)


Đây thực sự là một câu trả lời tốt hơn câu trả lời được chấp nhận IMO, vì nó cho thấy rõ ràng rằng bạn đang tìm kiếm một Loại là một phần của cụm ứng dụng của bạn. Sắp xếp giải thích nguyên nhân của vấn đề tốt hơn.
Jim,

4

Mở rộng câu trả lời của takepara, nếu bạn muốn một lớp lót để lấy AssemblyInformationalVersionAttribute từ Chế độ xem Razor MVC:

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

1

Bạn có thể thử sử dụng GetCallingAssembly (). Tôi không chắc liệu điều đó có đủ cao lên ngăn xếp cuộc gọi hay không, nhưng vì Razor thực sự tạo một assembly cho mỗi chế độ xem, nên có lý do rằng ứng dụng của bạn sẽ là bộ phận gọi cho cụm chế độ xem.


Lắp ráp Nhận Gọi chỉ tăng một cấp trong cây ... vẫn không ổn.
Jay Stevens

0

Vấn đề của tôi là tôi đã đổi tên không gian tên sau đó và tôi gặp lỗi ở trên. Vấn đề là tham chiếu không gian tên cũ trong Views \ Web.config. Tôi đã phải thay đổi nó từ Project.WebAPI17thànhCompany.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>

0

cho một bộ điều khiển api, tôi đã sử dụng cái này dựa trên các câu trả lời khác

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

-1

Bạn có thể lấy nó bằng cách sử dụng thuộc tính Name như sau:

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

Có phải đó là những gì bạn đang tìm kiếm?


-1

Đi tới Bộ điều khiển gia đình và chỉ cần sao chép mã này:

Đổi tên ActionResultthành chuỗi

public string Index()

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

run view
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.