Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <#@ template debug="true" language="C#" hostSpecific="true" #>
- <#@ output extension=".cs" #>
- <#@ assembly name="System.Core.dll" #>
- <#@ import namespace="System.Reflection" #>
- <#@ import namespace="System.IO" #>
- <#@ import namespace="System.Linq" #>
- <#
- string assemblyFile = @"bin\Debug\CloningGenerator.exe";
- Assembly assembly = LoadProjectAssembly(assemblyFile);
- var deepCloneables = assembly.GetTypes()
- .Where(x => !x.IsInterface
- && x.Name != "DeepCloneable"
- && x.GetInterfaces().Any(y => y.Name == "IDeepCloneable"));
- #>
- namespace CloningGenerator {
- <#
- foreach (var t in deepCloneables)
- {
- #>
- public partial class <#= t.Name #>
- {
- }
- <#
- }
- #>
- }
- <# Cleanup(); #>
- <#+
- private string outputDir;
- private Assembly LoadProjectAssembly(string assemblyFile) {
- if (!Path.IsPathRooted(assemblyFile))
- assemblyFile = Path.Combine(Path.GetDirectoryName(Host.TemplateFile), assemblyFile);
- outputDir = Path.GetDirectoryName(assemblyFile);
- if (!File.Exists(assemblyFile))
- throw new ArgumentException(string.Format("Project assembly file could not be located at {0}.", assemblyFile));
- AppDomain.CurrentDomain.AssemblyResolve += ResolveAssembly;
- return Assembly.Load(File.ReadAllBytes(assemblyFile));
- }
- private void Cleanup() {
- AppDomain.CurrentDomain.AssemblyResolve -= ResolveAssembly;
- }
- private Assembly ResolveAssembly(object sender, ResolveEventArgs args) {
- string dependency = Path.Combine(outputDir, args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll");
- if (File.Exists(dependency))
- return Assembly.Load(File.ReadAllBytes(dependency));
- return null;
- }
- #>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement