void Run()
{
Pipeline p = GetStandardPipeline();
LinkContext context = GetDefaultContext(p);
I18nAssemblies assemblies = I18nAssemblies.All;
var custom_steps = new List <string> ();
bool resolver = false;
while (HaveMoreTokens())
{
string token = GetParam();
if (token.Length < 2)
{
Usage("Option is too short");
}
if (!(token [0] == '-' || token [1] == '/'))
{
Usage("Expecting an option, got instead: " + token);
}
if (token [0] == '-' && token [1] == '-')
{
if (token.Length < 3)
{
Usage("Option is too short");
}
switch (token [2])
{
case 'v':
Version();
break;
case 'a':
About();
break;
default:
Usage(null);
break;
}
}
switch (token [1])
{
case 'd': {
DirectoryInfo info = new DirectoryInfo(GetParam());
context.Resolver.AddSearchDirectory(info.FullName);
break;
}
case 'o':
context.OutputDirectory = GetParam();
break;
case 'c':
context.CoreAction = ParseAssemblyAction(GetParam());
break;
case 'p':
AssemblyAction action = ParseAssemblyAction(GetParam());
context.Actions [GetParam()] = action;
break;
case 's':
custom_steps.Add(GetParam());
break;
case 't':
context.KeepTypeForwarderOnlyAssemblies = true;
break;
case 'x':
foreach (string file in GetFiles(GetParam()))
{
p.PrependStep(new ResolveFromXmlStep(new XPathDocument(file)));
}
resolver = true;
break;
case 'r':
case 'a':
var rootVisibility = (token[1] == 'r')
? ResolveFromAssemblyStep.RootVisibility.PublicAndFamily
: ResolveFromAssemblyStep.RootVisibility.Any;
foreach (string file in GetFiles(GetParam()))
{
p.PrependStep(new ResolveFromAssemblyStep(file, rootVisibility));
}
resolver = true;
break;
case 'i':
foreach (string file in GetFiles(GetParam()))
{
p.PrependStep(new ResolveFromXApiStep(new XPathDocument(file)));
}
resolver = true;
break;
case 'l':
assemblies = ParseI18n(GetParam());
break;
case 'm':
context.SetParameter(GetParam(), GetParam());
break;
case 'b':
context.LinkSymbols = bool.Parse(GetParam());
break;
case 'g':
if (!bool.Parse(GetParam()))
{
p.RemoveStep(typeof(RegenerateGuidStep));
}
break;
case 'v':
context.KeepMembersForDebuggerAttributes = bool.Parse(GetParam());
break;
default:
Usage("Unknown option: `" + token [1] + "'");
break;
}
}
if (!resolver)
{
Usage("No resolver was created (use -x, -a or -i)");
}
foreach (string custom_step in custom_steps)
{
AddCustomStep(p, custom_step);
}
p.AddStepAfter(typeof(LoadReferencesStep), new LoadI18nAssemblies(assemblies));
p.Process(context);
}