annotate Source/Reflection/Emit/AssemblyBuilderHelper.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.Configuration.Assemblies;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Reflection.Emit;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Security;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using System.Threading;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 namespace BLToolkit.Reflection.Emit
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 /// A wrapper around the <see cref="AssemblyBuilder"/> and <see cref="ModuleBuilder"/> classes.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 /// <include file="Examples.CS.xml" path='examples/emit[@name="Emit"]/*' />
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 /// <include file="Examples.VB.xml" path='examples/emit[@name="Emit"]/*' />
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 /// <seealso cref="System.Reflection.Emit.AssemblyBuilder">AssemblyBuilder Class</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 /// <seealso cref="System.Reflection.Emit.ModuleBuilder">ModuleBuilder Class</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public class AssemblyBuilderHelper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 /// Initializes a new instance of the <see cref="AssemblyBuilderHelper"/> class
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 /// with the specified parameters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 /// <param name="path">The path where the assembly will be saved.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 public AssemblyBuilderHelper(string path) : this(path, null, null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 /// Initializes a new instance of the <see cref="AssemblyBuilderHelper"/> class
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 /// with the specified parameters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 /// <param name="path">The path where the assembly will be saved.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 /// <param name="version">The assembly version.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 /// <param name="keyFile">The key pair file to sign the assembly.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 public AssemblyBuilderHelper(string path, Version version, string keyFile)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 if (path == null) throw new ArgumentNullException("path");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 var idx = path.IndexOf(',');
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 if (idx > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 path = path.Substring(0, idx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 if (path.Length >= 200)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 idx = path.IndexOf('`');
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 if (idx > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 var idx2 = path.LastIndexOf('.');
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 if (idx2 > 0 && idx2 > idx)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 path = path.Substring(0, idx + 1) + path.Substring(idx2 + 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 path = path.Replace("+", ".").Replace("<", "_").Replace(">", "_");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 if (path.Length >= 260)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 path = path.Substring(0, 248);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 for (var i = 0; i < int.MaxValue; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 var newPath = string.Format("{0}_{1:0000}.dll", path, i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 if (!System.IO.File.Exists(newPath))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 path = newPath;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 var assemblyName = System.IO.Path.GetFileNameWithoutExtension(path);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 var assemblyDir = System.IO.Path.GetDirectoryName(path);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 Path = path;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 _assemblyName.Name = assemblyName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 if (version != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 _assemblyName.Version = version;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 if (!string.IsNullOrEmpty(keyFile))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 _assemblyName.Flags |= AssemblyNameFlags.PublicKey;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 _assemblyName.KeyPair = new StrongNameKeyPair(System.IO.File.OpenRead(keyFile));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 _assemblyName.HashAlgorithm = AssemblyHashAlgorithm.SHA1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 #if DEBUG
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 _assemblyName.Flags |= AssemblyNameFlags.EnableJITcompileTracking;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 #else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 _assemblyName.Flags |= AssemblyNameFlags.EnableJITcompileOptimizer;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 _createAssemblyBuilder = _ =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 #if SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 _assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(_assemblyName, AssemblyBuilderAccess.Run);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 #else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 _assemblyBuilder =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 string.IsNullOrEmpty(assemblyDir)?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 Thread.GetDomain().DefineDynamicAssembly(_assemblyName, AssemblyBuilderAccess.RunAndSave):
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 Thread.GetDomain().DefineDynamicAssembly(_assemblyName, AssemblyBuilderAccess.RunAndSave, assemblyDir);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 _assemblyBuilder.SetCustomAttribute(BLToolkitAttribute);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 _assemblyBuilder.SetCustomAttribute(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 new CustomAttributeBuilder(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 typeof(AllowPartiallyTrustedCallersAttribute)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 .GetConstructor(Type.EmptyTypes),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 new object[0]));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 /// Gets the path where the assembly will be saved.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 public string Path { get; private set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 private readonly AssemblyName _assemblyName = new AssemblyName();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 /// Gets AssemblyName.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 public AssemblyName AssemblyName
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 get { return _assemblyName; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 readonly Action<int> _createAssemblyBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 AssemblyBuilder _assemblyBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 /// Gets AssemblyBuilder.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 public AssemblyBuilder AssemblyBuilder
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 get
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 if (_assemblyBuilder == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 _createAssemblyBuilder(0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 return _assemblyBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 /// Gets the path where the assembly will be saved.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 public string ModulePath
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 get { return System.IO.Path.GetFileName(Path); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 private ModuleBuilder _moduleBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 /// Gets ModuleBuilder.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 public ModuleBuilder ModuleBuilder
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 get
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 if (_moduleBuilder == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 _moduleBuilder = AssemblyBuilder.DefineDynamicModule(ModulePath);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 _moduleBuilder.SetCustomAttribute(BLToolkitAttribute);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 return _moduleBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 private CustomAttributeBuilder _blToolkitAttribute;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 /// Retrieves a cached instance of <see cref="BLToolkit.TypeBuilder.BLToolkitGeneratedAttribute"/> builder.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 public CustomAttributeBuilder BLToolkitAttribute
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 get
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 if (_blToolkitAttribute == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 var at = typeof(TypeBuilder.BLToolkitGeneratedAttribute);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 var ci = at.GetConstructor(Type.EmptyTypes);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 _blToolkitAttribute = new CustomAttributeBuilder(ci, new object[0]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 return _blToolkitAttribute;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 /// Converts the supplied <see cref="AssemblyBuilderHelper"/> to a <see cref="AssemblyBuilder"/>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 /// <param name="assemblyBuilder">The <see cref="AssemblyBuilderHelper"/>.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 /// <returns>An <see cref="AssemblyBuilder"/>.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 public static implicit operator AssemblyBuilder(AssemblyBuilderHelper assemblyBuilder)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 if (assemblyBuilder == null) throw new ArgumentNullException("assemblyBuilder");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 return assemblyBuilder.AssemblyBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 /// Converts the supplied <see cref="AssemblyBuilderHelper"/> to a <see cref="ModuleBuilder"/>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 /// <param name="assemblyBuilder">The <see cref="AssemblyBuilderHelper"/>.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 /// <returns>A <see cref="ModuleBuilder"/>.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 public static implicit operator ModuleBuilder(AssemblyBuilderHelper assemblyBuilder)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 if (assemblyBuilder == null) throw new ArgumentNullException("assemblyBuilder");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 return assemblyBuilder.ModuleBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 /// Saves this dynamic assembly to disk.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 public void Save()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 if (_assemblyBuilder != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 _assemblyBuilder.Save(ModulePath);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 #region DefineType Overrides
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 /// Constructs a <see cref="TypeBuilderHelper"/> for a type with the specified name.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 /// <param name="name">The full path of the type.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 /// <returns>Returns the created <see cref="TypeBuilderHelper"/>.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 /// <seealso cref="System.Reflection.Emit.ModuleBuilder.DefineType(string)">ModuleBuilder.DefineType Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 public TypeBuilderHelper DefineType(string name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 return new TypeBuilderHelper(this, ModuleBuilder.DefineType(name));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 /// Constructs a <see cref="TypeBuilderHelper"/> for a type with the specified name and base type.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 /// <param name="name">The full path of the type.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 /// <param name="parent">The Type that the defined type extends.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 /// <returns>Returns the created <see cref="TypeBuilderHelper"/>.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 /// <seealso cref="System.Reflection.Emit.ModuleBuilder.DefineType(string,TypeAttributes,Type)">ModuleBuilder.DefineType Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 public TypeBuilderHelper DefineType(string name, Type parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 return new TypeBuilderHelper(this, ModuleBuilder.DefineType(name, TypeAttributes.Public, parent));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 /// Constructs a <see cref="TypeBuilderHelper"/> for a type with the specified name, its attributes, and base type.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 /// <param name="name">The full path of the type.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 /// <param name="attrs">The attribute to be associated with the type.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 /// <param name="parent">The Type that the defined type extends.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 /// <returns>Returns the created <see cref="TypeBuilderHelper"/>.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 /// <seealso cref="System.Reflection.Emit.ModuleBuilder.DefineType(string,TypeAttributes,Type)">ModuleBuilder.DefineType Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 public TypeBuilderHelper DefineType(string name, TypeAttributes attrs, Type parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 return new TypeBuilderHelper(this, ModuleBuilder.DefineType(name, attrs, parent));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 /// Constructs a <see cref="TypeBuilderHelper"/> for a type with the specified name, base type,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 /// and the interfaces that the defined type implements.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 /// <param name="name">The full path of the type.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 /// <param name="parent">The Type that the defined type extends.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 /// <param name="interfaces">The list of interfaces that the type implements.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 /// <returns>Returns the created <see cref="TypeBuilderHelper"/>.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 /// <seealso cref="System.Reflection.Emit.ModuleBuilder.DefineType(string,TypeAttributes,Type,Type[])">ModuleBuilder.DefineType Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 public TypeBuilderHelper DefineType(string name, Type parent, params Type[] interfaces)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 return new TypeBuilderHelper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 this,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 ModuleBuilder.DefineType(name, TypeAttributes.Public, parent, interfaces));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 /// Constructs a <see cref="TypeBuilderHelper"/> for a type with the specified name, its attributes, base type,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 /// and the interfaces that the defined type implements.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 /// <param name="name">The full path of the type.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 /// <param name="attrs">The attribute to be associated with the type.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 /// <param name="parent">The Type that the defined type extends.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 /// <param name="interfaces">The list of interfaces that the type implements.</param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304 /// <returns>Returns the created <see cref="TypeBuilderHelper"/>.</returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 /// <seealso cref="System.Reflection.Emit.ModuleBuilder.DefineType(string,TypeAttributes,Type,Type[])">ModuleBuilder.DefineType Method</seealso>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 public TypeBuilderHelper DefineType(string name, TypeAttributes attrs, Type parent, params Type[] interfaces)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 return new TypeBuilderHelper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 this,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 ModuleBuilder.DefineType(name, attrs, parent, interfaces));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 }