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


104

_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 앱에 대한 어셈블리 정보를 얻으려면 어떻게해야합니까?

답변:


218

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

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

이건 어때요?


15
그리고 @GetType(YourApplicationNamespace.MvcApplication).Assembly.GetName.Version모든 VB.NETers를 위해. 우리 둘 다.
edhubbell

또한 저의 칭찬을 공유해야합니다. [assembly : AssemblyVersion ( "1.0. *")]과 함께 "QA 용 앱에 개정 번호 표시"스토리의 맨 위는 멋진 빌드 번호를 얻었습니다. 잘 작동합니다.
nocarrier 2014 년

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
Mafii

1
dotnet core 2.1에서는 이것이 저에게 효과적입니다 : @{Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;}그때<h1>Ver. @version</h1>
Leonard AB

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클래스) 은 어디에 있습니까?


실제로 애플리케이션 어셈블리의 일부인 Type을 찾고 있음을 분명히하기 때문에 허용되는 IMO보다 더 나은 대답입니다. 일종의 문제의 원인을 더 잘 설명합니다.
Jim

4

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

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

1

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


Get Calling 어셈블리는 트리에서 한 수준 위로 올라갑니다 ... 여전히 좋지 않습니다.
Jay Stevens

1

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

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

0

내 문제는 나중에 네임 스페이스의 이름을 바꾸었고 위의 오류가 발생했습니다. 문제는 Views \ 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

아래와 같이 Name 속성을 사용하여 얻을 수 있습니다.

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

그게 당신이 찾고있는 건가요?


-1

홈 컨트롤러로 이동하여 다음 코드를 복사하십시오.

ActionResult문자열로 이름 바꾸기

public string Index()

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

run view
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.