|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;
using System.Configuration;
using System.Activities;
using System.Xaml;
using System.Activities.XamlIntegration;
namespace Selen.ActivityWorkflowType
{
public class CompiledActivityLoader
{
public void LoadActivities(bool clear = true)
{
this.LoadActivities(ActivityPaths.FileName, ActivityPaths.DestFileName, clear);
}
public IDictionary<string, Type> GetExecutableActivities()
{
return this.GetAllCompiledActivities(Directory.GetFiles(ActivityPaths.DestFileName, "*.dll"));
}
public IDictionary<string, Type> GetAllCompiledActivities(string[] files)
{
var activities = new Dictionary<string, Type>();
foreach (var item in files)
{
var fileName = Path.GetTempFileName();
File.Copy(item, fileName, true);
var asm = Assembly.LoadFrom(fileName);
var toAdd = asm.GetType("DynamicActivities.CompiledActivity", false);
if (toAdd != null ? typeof(ICompiledActivity).IsAssignableFrom(toAdd) : false)
{
var instance = ((ICompiledActivity)Activator.CreateInstance(toAdd));
activities.Add(instance.ActivityName, toAdd);
}
}
return activities;
}
public void LoadActivities(string fileName, string destFileName, bool clear = true)
{
if (!Directory.Exists(fileName))
{
Directory.CreateDirectory(fileName);
}
if (Directory.Exists(destFileName) && clear)
{
foreach (var item in Directory.EnumerateFiles(destFileName))
{
File.Delete(item);
}
}
else
{
Directory.CreateDirectory(destFileName);
}
foreach (var item in Directory.GetFiles(fileName, "*.dll"))
{
var copy = Path.GetTempFileName();
File.Copy(item, copy, true);
var asm = Assembly.LoadFrom(copy);
File.Copy(item, Path.Combine(destFileName, asm.GetName().Name + ".dll"), true);
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.