[c#] Razor / MVC3를 사용하여 AssemblyVersion을 웹 페이지로 가져 오는 데 문제가 있습니다.

_Layout.cshtml 파일의 바닥 글에 다음 코드를 사용하여 AssemblyInfo 버전 데이터를 MVC3 사이트의 모든 페이지 바닥 글에 넣습니다. 하나:

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

바닥 글에 인쇄합니다.

Revision 0.0.0.0

다음을 사용하여 “Executing Assembly”에 대한 모든 어셈블리 정보를 표시하도록보기를 수정했을 때

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

다음을 인쇄합니다.

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

이것은 “Executing Assembly”가 내 메인 앱이 아니라 뷰 자체임을 보여줍니다.

개별 뷰뿐만 아니라 ACTUAL 앱에 대한 어셈블리 정보를 얻으려면 어떻게해야합니까?



답변

cshtml / vbhtml은 어셈블리에 대한 동적 컴파일입니다.

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

이건 어때요?


답변

이 도우미를 사용하면 저에게 효과적입니다.

    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("");
        }

    }


답변

이것은 나를 위해 작동합니다. 유형을 명시 적으로 언급 할 필요가 없습니다.

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


답변

프로젝트에서 유형의 어셈블리를 가져와야합니다.

typeof(MyType).Assembly.Whatever

MyTypeMVC 프로젝트 자체의 모든 유형 (예 : 컨트롤러, 모델 또는 MvcApplication클래스) 은 어디에 있습니까?


답변

하나의 라이너가 MVC Razor 뷰에서 AssemblyInformationalVersionAttribute를 가져 오려면 takepara의 답변을 확장합니다.

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


답변

GetCallingAssembly ()를 사용해 볼 수 있습니다. 이것이 호출 스택에서 충분히 높은지 확실하지 않지만 Razor는 실제로 각 뷰에 대한 어셈블리를 생성하기 때문에 앱이 뷰 어셈블리에 대한 호출 어셈블리가되는 이유가됩니다.


답변

API 컨트롤러의 경우 다른 답변을 기반으로 사용했습니다.

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