annotate Tools/BLTgen/Program.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.ComponentModel;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.IO;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Text.RegularExpressions;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using BLToolkit.TypeBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 namespace BLTgen
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 public class Arguments
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 [MapField(""), Description("source assembly location")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public string SourceAssembly;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 [MapField("B"), Description("Base type names to include (default: none). Example: /B:*EntityBase;SomeNamespace.*Base")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public string BaseTypes;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 [MapField("O"), Description("Output directory name (default: target assembly location). Example: /O:C:\\Temp")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 public string OutputDirectory;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 [MapField("I"), Description("Type names to include (default: all). Example: /I:*Accessor;SomeNamespace.*;OtherNamespace.*")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 public string Include;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 [MapField("X"), Description("Type names to exclude (default: none). Example: /X:SomeNamespace.SomeType")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 public string Exclude;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 [MapField("K"), Description("The key pair that is used to create a strong name signature for the output assembly (default: none). Example: /K:C:\\SomePath\\key.snk")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 public string KeyPairFile;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 [MapField("V"), Description("The version of the output assembly (same as source assembly by default). Example: /V:1.2.3.4")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 public string Version;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 [MapField("D"), Description("Detailed output (default: false). Example: /D")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 public string Debug;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 class Program
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 public static void Main(string[] args)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 var parsedArgs = new Arguments();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 Map.MapSourceToDestination(new StringListMapper(args), args,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 Map.GetObjectMapper(typeof(Arguments)), parsedArgs);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 WriteBanner();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 if (string.IsNullOrEmpty(parsedArgs.SourceAssembly))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 Usage();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 GenerateExtensionAssembly(parsedArgs);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 private static void GenerateExtensionAssembly(Arguments parsedArgs)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 var verbose = parsedArgs.Debug != null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 var sourceAsm = Assembly.LoadFrom(parsedArgs.SourceAssembly);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 var extensionAssemblyPath = GetOutputAssemblyLocation(sourceAsm.Location, parsedArgs.OutputDirectory);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 var extensionAssemblyVersion = parsedArgs.Version != null? new Version(parsedArgs.Version): sourceAsm.GetName().Version;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 var extensionAssemblyFolder = Path.GetDirectoryName(extensionAssemblyPath);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 if (verbose)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 Console.WriteLine("{0} =>{1}{2}", sourceAsm.Location, Environment.NewLine, extensionAssemblyPath);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 if (!string.IsNullOrEmpty(extensionAssemblyFolder) && !Directory.Exists(extensionAssemblyFolder))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 Directory.CreateDirectory(extensionAssemblyFolder);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 var typesToProcess = sourceAsm.GetExportedTypes();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 typesToProcess = FilterBaseTypes(typesToProcess, parsedArgs.BaseTypes);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 typesToProcess = FilterTypes(typesToProcess, parsedArgs.Include, true);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 typesToProcess = FilterTypes(typesToProcess, parsedArgs.Exclude, false);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 if (typesToProcess.Length > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 AppDomain.CurrentDomain.AssemblyResolve += delegate(object sender, ResolveEventArgs args)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 foreach (var asm in ((AppDomain)sender).GetAssemblies())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 if (string.Compare(asm.FullName, args.Name) == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 return asm;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 TypeFactory.SaveTypes = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 TypeFactory.SetGlobalAssembly(extensionAssemblyPath, extensionAssemblyVersion, parsedArgs.KeyPairFile);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 foreach (var t in typesToProcess)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 if (verbose)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 Console.Write(GetFullTypeName(t));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 // We cannot create accessors for generic definitions
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 if (t.IsGenericTypeDefinition)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 if (verbose)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 Console.WriteLine(" - skipping. Generic Definition");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 if (verbose)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 Console.WriteLine();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 TypeAccessor.GetAccessor(t);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 catch (Exception e)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 if (verbose)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 Console.WriteLine(e);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 TypeFactory.SaveGlobalAssembly();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 else if (verbose)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 Console.WriteLine("No types to process.");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 private static Type[] FilterBaseTypes(Type[] types, string pattern)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 if (string.IsNullOrEmpty(pattern))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 return types;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 var re = new Regex("^" + Regex.Escape(pattern).Replace("\\*", ".*").Replace(";", "$|") + "$");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 return Array.FindAll(types, delegate(Type t)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 for (var bt = t.BaseType; bt != null; bt = bt.BaseType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 if (re.Match(GetFullTypeName(bt)).Success)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 private static Type[] FilterTypes(Type[] types, string pattern, bool include)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 if (string.IsNullOrEmpty(pattern))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 return types;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 var re = new Regex("^" + Regex.Escape(pattern).Replace("\\*", ".*").Replace(";", "$|") + "$");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 return Array.FindAll(types, t => re.Match(GetFullTypeName(t)).Success == include);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 // System.Type.FullName may be null under some conditions. See
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 // http://blogs.msdn.com/haibo_luo/archive/2006/02/17/534480.aspx
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 private static string GetFullTypeName(Type t)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 var fullName = t.FullName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 if (fullName != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 return fullName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 if (t.DeclaringType != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 return GetFullTypeName(t.DeclaringType) + "+" + t.Name;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 fullName = t.Namespace;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 if (fullName != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 fullName += ".";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 fullName += t.Name;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 return fullName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 private static string GetOutputAssemblyLocation(string sourceAssembly, string outputDirectory)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 if (string.IsNullOrEmpty(outputDirectory))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 outputDirectory = Path.GetDirectoryName(sourceAssembly);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 var fileName = Path.ChangeExtension(Path.GetFileName(sourceAssembly), "BLToolkitExtension.dll");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 return Path.Combine(Path.GetFullPath(outputDirectory), fileName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 #region Usage
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 private static void WriteBanner()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 var asm = Assembly.GetExecutingAssembly();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 var descriptionAttribute = (AssemblyDescriptionAttribute)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 Attribute.GetCustomAttribute(asm, typeof (AssemblyDescriptionAttribute));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 var copyrightAttribute = (AssemblyCopyrightAttribute)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 Attribute.GetCustomAttribute(asm, typeof(AssemblyCopyrightAttribute));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 Console.WriteLine("{0}, Version {1}", descriptionAttribute.Description, asm.GetName().Version);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 Console.WriteLine(copyrightAttribute.Copyright);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 Console.WriteLine();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 private static string ExecutableName
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 get { return Path.GetFileName(new Uri(Assembly.GetEntryAssembly().EscapedCodeBase).LocalPath); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 private static string GetDescription(MemberMapper mm)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 var desc = mm.MemberAccessor.GetAttribute<DescriptionAttribute>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 return (null != desc) ? desc.Description : string.Empty;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 private static void Usage()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 var om = Map.GetObjectMapper(typeof(Arguments));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 Console.Write("Usage: {0}", ExecutableName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 foreach (MemberMapper mm in om)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 if (0 == mm.Name.Length)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 Console.Write(" <{0}>", GetDescription(mm));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 Console.Write(" /{0}:", mm.Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 Console.WriteLine();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 Console.WriteLine("Options:");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 foreach (MemberMapper mm in om)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 if (0 != mm.Name.Length)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 Console.WriteLine("\t{0}: {1}", mm.Name, GetDescription(mm));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 Console.WriteLine();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 }