StrongNameKeyPair GetAssemblyKeyPair(string outputFile)
{
var attribute = GetAssemblyAttribute("System.Reflection.AssemblyKeyNameAttribute");
if (Parameters.KeyContainer != null)
{
if (attribute != null)
Warnings.Add(CompilerWarningFactory.HaveBothKeyNameAndAttribute(attribute));
if (Parameters.KeyContainer.Length != 0)
return new StrongNameKeyPair(Parameters.KeyContainer);
}
else if (attribute != null)
{
var asmName = ((StringLiteralExpression)attribute.Arguments[0]).Value;
if (asmName.Length != 0) //ignore empty AssemblyKeyName values, like C# does
return new StrongNameKeyPair(asmName);
}
string fname = null;
string srcFile = null;
attribute = GetAssemblyAttribute("System.Reflection.AssemblyKeyFileAttribute");
if (Parameters.KeyFile != null)
{
fname = Parameters.KeyFile;
if (attribute != null)
Warnings.Add(CompilerWarningFactory.HaveBothKeyFileAndAttribute(attribute));
}
else if (attribute != null)
{
fname = ((StringLiteralExpression)attribute.Arguments[0]).Value;
if (attribute.LexicalInfo != null)
srcFile = attribute.LexicalInfo.FileName;
}
if (!string.IsNullOrEmpty(fname))
{
if (!Path.IsPathRooted(fname))
fname = ResolveRelative(outputFile, srcFile, fname);
using (FileStream stream = File.OpenRead(fname))
{
//Parameters.DelaySign is ignored.
return new StrongNameKeyPair(stream);
}
}
return null;
}