{"id":573,"date":"2025-10-26T11:27:20","date_gmt":"2025-10-26T10:27:20","guid":{"rendered":"https:\/\/www.silverice.it\/IpercubeTechWP1\/?page_id=573"},"modified":"2025-10-26T11:28:11","modified_gmt":"2025-10-26T10:28:11","slug":"getframeworkinfo","status":"publish","type":"page","link":"https:\/\/www.silverice.it\/IpercubeTechWP1\/ipercube-utilities\/assembly-info\/getframeworkinfo\/","title":{"rendered":"Get Framework Info"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Retrieves the target .NET Framework version of a given assembly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The function first attempts to read the\u00a0<em>TargetFrameworkAttribute<\/em>\u00a0to determine the framework. If the attribute is not present (e.g., in assemblies built before .NET 4.0), it falls back to inspecting the version of the referenced\u00a0<strong>mscorlib<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:75%\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column page-snippet is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Geist-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-Geist-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">VB<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>    Public Function GetFrameworkInfo(Assembly As Assembly) As String\n\n        Dim frameWork As String = String.Empty\n\n        'Try to get TargetFrameworkAttribute\n        Dim attributes() As Object = Assembly.GetCustomAttributes(GetType(TargetFrameworkAttribute), False)\n        If attributes.Length > 0 Then\n            Dim tfa As TargetFrameworkAttribute = CType(attributes(0), TargetFrameworkAttribute)\n            frameWork = tfa.FrameworkName\n        Else\n            'For assemblies compiled with versions previous .NET 4.0, analyse the referenced mscorlib\n            Dim referencedAssemblies() As AssemblyName = Assembly.GetReferencedAssemblies()\n            Dim mscorlibRef As AssemblyName = referencedAssemblies.FirstOrDefault(Function(a) a.Name = \"mscorlib\")\n            If mscorlibRef IsNot Nothing Then\n                frameWork = mscorlibRef.Version.ToString()\n            End If\n        End If\n\n        Return frameWork.Replace(\",\", \", \").Replace(\"=v\", \" \").Replace(\".NET\", \".NET \")\n    End Function<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">Public Function <\/span><span style=\"color: #DCDCAA\">GetFrameworkInfo<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">Assembly<\/span><span style=\"color: #D4D4D4\"> As <\/span><span style=\"color: #4EC9B0\">Assembly<\/span><span style=\"color: #D4D4D4\">) As <\/span><span style=\"color: #4EC9B0\">String<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">Dim<\/span><span style=\"color: #9CDCFE\"> frameWork <\/span><span style=\"color: #D4D4D4\">As <\/span><span style=\"color: #4EC9B0\">String<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #DCDCAA\">String<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #569CD6\">Empty<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #6A9955\">&#39;Try to get TargetFrameworkAttribute<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">Dim<\/span><span style=\"color: #9CDCFE\"> attributes<\/span><span style=\"color: #D4D4D4\">() As <\/span><span style=\"color: #4EC9B0\">Object<\/span><span style=\"color: #D4D4D4\"> = Assembly.<\/span><span style=\"color: #DCDCAA\">GetCustomAttributes<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">GetType<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">TargetFrameworkAttribute<\/span><span style=\"color: #D4D4D4\">),<\/span><span style=\"color: #569CD6\"> False<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #C586C0\">If<\/span><span style=\"color: #D4D4D4\"> attributes.<\/span><span style=\"color: #9CDCFE\">Length<\/span><span style=\"color: #D4D4D4\"> &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">Then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">Dim<\/span><span style=\"color: #9CDCFE\"> tfa <\/span><span style=\"color: #D4D4D4\">As <\/span><span style=\"color: #4EC9B0\">TargetFrameworkAttribute<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #DCDCAA\">CType<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">attributes<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">),<\/span><span style=\"color: #9CDCFE\"> TargetFrameworkAttribute<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #9CDCFE\">frameWork<\/span><span style=\"color: #D4D4D4\"> = tfa.FrameworkName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #C586C0\">Else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #6A9955\">&#39;For assemblies compiled with versions previous .NET 4.0, analyse the referenced mscorlib<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">Dim<\/span><span style=\"color: #9CDCFE\"> referencedAssemblies<\/span><span style=\"color: #D4D4D4\">() As <\/span><span style=\"color: #4EC9B0\">AssemblyName<\/span><span style=\"color: #D4D4D4\"> = Assembly.<\/span><span style=\"color: #DCDCAA\">GetReferencedAssemblies<\/span><span style=\"color: #D4D4D4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">Dim<\/span><span style=\"color: #9CDCFE\"> mscorlibRef <\/span><span style=\"color: #D4D4D4\">As <\/span><span style=\"color: #4EC9B0\">AssemblyName<\/span><span style=\"color: #D4D4D4\"> = referencedAssemblies.<\/span><span style=\"color: #DCDCAA\">FirstOrDefault<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #569CD6\">Function<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">a<\/span><span style=\"color: #D4D4D4\">) a.<\/span><span style=\"color: #9CDCFE\">Name<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;mscorlib&quot;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #C586C0\">If<\/span><span style=\"color: #D4D4D4\"> mscorlibRef IsNot<\/span><span style=\"color: #569CD6\"> Nothing<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">Then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #9CDCFE\">frameWork<\/span><span style=\"color: #D4D4D4\"> = mscorlibRef.Version.<\/span><span style=\"color: #DCDCAA\">ToString<\/span><span style=\"color: #D4D4D4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #C586C0\">End If<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #C586C0\">End If<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #C586C0\">Return<\/span><span style=\"color: #D4D4D4\"> frameWork.<\/span><span style=\"color: #DCDCAA\">Replace<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;,&quot;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&quot;, &quot;<\/span><span style=\"color: #D4D4D4\">).<\/span><span style=\"color: #DCDCAA\">Replace<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;=v&quot;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&quot; &quot;<\/span><span style=\"color: #D4D4D4\">).<\/span><span style=\"color: #DCDCAA\">Replace<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;.NET&quot;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&quot;.NET &quot;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">End Function<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Retrieves the target .NET Framework version of a given assembly. The function first attempts to read the\u00a0TargetFrameworkAttribute\u00a0to determine the framework. If the attribute is not present (e.g., in assemblies built before .NET 4.0), it falls back to inspecting the version of the referenced\u00a0mscorlib.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":545,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-573","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.silverice.it\/IpercubeTechWP1\/wp-json\/wp\/v2\/pages\/573","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silverice.it\/IpercubeTechWP1\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.silverice.it\/IpercubeTechWP1\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.silverice.it\/IpercubeTechWP1\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silverice.it\/IpercubeTechWP1\/wp-json\/wp\/v2\/comments?post=573"}],"version-history":[{"count":4,"href":"https:\/\/www.silverice.it\/IpercubeTechWP1\/wp-json\/wp\/v2\/pages\/573\/revisions"}],"predecessor-version":[{"id":577,"href":"https:\/\/www.silverice.it\/IpercubeTechWP1\/wp-json\/wp\/v2\/pages\/573\/revisions\/577"}],"up":[{"embeddable":true,"href":"https:\/\/www.silverice.it\/IpercubeTechWP1\/wp-json\/wp\/v2\/pages\/545"}],"wp:attachment":[{"href":"https:\/\/www.silverice.it\/IpercubeTechWP1\/wp-json\/wp\/v2\/media?parent=573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}