{"id":3624,"date":"2020-04-03T17:26:24","date_gmt":"2020-04-03T16:26:24","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=3624"},"modified":"2020-04-03T10:27:23","modified_gmt":"2020-04-03T09:27:23","slug":"dotnet-core-reflection-load-assembly","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/dotnet-core-reflection-load-assembly\/","title":{"rendered":"DotNet core Reflection load assembly"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\n\nnamespace LoadClassInfo\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += CurrentDomain_ReflectionOnlyAssemblyResolve;\n            Assembly.ReflectionOnlyLoadFrom(@\"C:\\Program Files (x86)\\Uniconta\\Uniconta.Common.dll\");\n            Assembly assembly = Assembly.ReflectionOnlyLoadFrom(@\"C:\\Program Files (x86)\\Uniconta\\Uniconta.WindowsAPI.dll\");\n\n            var types = new List&lt;Type>();\n            Type t;\n\n            t = assembly.GetType(\"Uniconta.ClientTools.DataModel.DebtorOfferClient\");\n            if (t != null)\n                types.Add(t);\n\n            t = assembly.GetType(\"Uniconta.ClientTools.DataModel.DebtorOfferLineClient\");\n            if (t != null)\n                types.Add(t);\n\n            t = assembly.GetType(\"Uniconta.ClientTools.DataModel.DebtorOrderClient\");\n            if (t != null)\n                types.Add(t);\n\n            t = assembly.GetType(\"Uniconta.ClientTools.DataModel.DebtorOrderLineClient\");\n            if (t != null)\n                types.Add(t);\n\n            var sb = new StringBuilder();\n            foreach (var type in types)\n            {\n                var publicProps = type.GetProperties(BindingFlags.Instance | BindingFlags.Public);\n                sb.AppendLine($\"public class {type.Name}\");\n                sb.AppendLine(\"{\");\n                foreach (var prop in publicProps)\n                {\n                    var propType = prop.PropertyType;\n                    var propTypeName = prop.PropertyType.Name;\n                    if (propType.GenericTypeArguments.Length > 0) {\n                        propTypeName = $\"{prop.PropertyType.Name}&lt;{string.Join(\",\", propType.GenericTypeArguments.Select(gt => gt.Name))}>\";\n                    }\n                    propTypeName = propTypeName.Replace(\"`1\", \"\");\n                    sb.AppendLine($\"  public {propTypeName} {prop.Name};\");\n                }\n                sb.AppendLine(\"}\");\n            }\n\n            Console.WriteLine(sb.ToString());\n        }\n\n        static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)\n        {\n            try\n            {\n                return Assembly.ReflectionOnlyLoad(args.Name);\n            }\n            catch (FileNotFoundException)\n            {\n                try\n                {\n                    var path = Path.GetDirectoryName(args.RequestingAssembly.Location);\n                    path = Path.Combine(path, args.Name);\n                    return Assembly.ReflectionOnlyLoadFrom(path);\n                }\n                catch (Exception) { }\n            }\n            catch (Exception) { }\n            return null;\n        }\n    }\n}\n<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3624","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/3624","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=3624"}],"version-history":[{"count":1,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/3624\/revisions"}],"predecessor-version":[{"id":3625,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/3624\/revisions\/3625"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=3624"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=3624"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=3624"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}