_Layout.cshtmlファイルのフッターで次のコードを使用して、AssemblyInfoバージョンデータをMVC3サイトのすべてのページのフッターに入れています。しかしながら:
@System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()
フッターに印刷するだけです:
Revision 0.0.0.0
次を使用して「アセンブリの実行」のすべてのアセンブリ情報を表示するようにビューを変更したとき
@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
MyType
は、MVCプロジェクト自体の任意のタイプ(コントローラーやモデル、またはMvcApplication
クラスなど)です。
1つのライナーでMVC RazorビューからAssemblyInformationalVersionAttributeを取得する場合は、takeparaの答えを拡張します。
@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion
GetCallingAssembly()を使用してみてください。それが呼び出しスタックまで十分に高いかどうかはわかりませんが、Razorは実際に各ビューのアセンブリを作成するため、アプリがビューアセンブリの呼び出しアセンブリになるのは当然のことです。
私の問題は、後で名前空間の名前を変更し、上記のエラーが発生したことです。問題は、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>
Home Controllerに移動して、次のコードをコピーします。
ActionResult
の名前をStringに変更
public string Index()
return typeof(Controller).Assembly.GetName().Version.ToString() ;
run view