Problema ao obter o AssemblyVersion em uma página da Web usando o Razor / MVC3

Eu estou usando o seguinte código em um rodapé no meu arquivo _Layout.cshtml para colocar os dados de versão AssemblyInfo no rodapé de cada página no meu site MVC3. Contudo:

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

Apenas imprime no rodapé:

 Revision 0.0.0.0 

Quando modifiquei a exibição para exibir todas as informações de assembly da “Execução da Montagem” usando o seguinte

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

Que imprime o seguinte:

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

Isso mostra que o “Executing Assembly” não é o meu aplicativo principal, é a visão em si.

Como obtenho as informações de assembly para o aplicativo ACTUAL, não apenas as visualizações individuais?

O cshtml / vbhtml é uma compilation dinâmica para a assembly.

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

que tal agora?

Usando este ajudante funciona para mim:

  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("{0} v{1}.{2}.{3} ({4})", product.Product, version.Major, version.Minor, version.Build, version.Revision)); } else { return new HtmlString(""); } } 

Isso funciona para mim. Sem precisar mencionar explicitamente o tipo.

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

Você precisa obter a assembly de um tipo no projeto:

 typeof(MyType).Assembly.Whatever 

Onde MyType é qualquer tipo no próprio projeto MVC (por exemplo, um controlador ou modelo, ou a class MvcApplication )

Expandindo a resposta do takepara, se você quiser um liner para obter o AssemblyInformationalVersionAttribute de um MVC Razor View:

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

Você pode tentar usar o GetCallingAssembly (). Eu não tenho certeza se isso é alto o suficiente para a pilha de chamadas ou não, mas como o Razor realmente cria um assembly para cada visualização, é lógico que seu aplicativo seria o assembly de chamada para o assembly de exibição.

Meu problema foi que eu tinha renomeado o namespace depois e recebi o erro acima. O problema era a antiga referência de namespace no Views \ Web.config. Eu tive que mudar de Project.WebAPI17 para Company.Project.WebAPI17

               

Vá para o Home Controller e copie este código:

Renomear ActionResult para String

 public string Index() return typeof(Controller).Assembly.GetName().Version.ToString() ; run view 

Você pode obtê-lo usando a propriedade Name como abaixo:

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

é isso que você está procurando?