Для этого вы использовали бы ключ строгого имени в своих сборках.
Сначала убедитесь, что вызывающая сборка (сборка A) имеет строгое имя со знаком (это можно сделать на экране свойств проекта на вкладке Подписывание)
Следующий код извлекает ключ строгого имени из вызывающей сборки.
internal static StrongName GetStrongName(Evidence evidence)
{
foreach (var e in evidence)
{
if (e is StrongName)
{
return (StrongName)e;
}
}
throw new ArgumentException();
}
Самый простой способ - подписать обе сборки одним и тем же StrongName, а затем убедиться, что Assembly.GetCallingAssembly (). Evidence и Assembly.GetExecutingAssembly (). Доказательства подписаны одним и тем же StrongName.
var callerKey = GetStrongName(Assembly.GetCallingAssembly().Evidence).PublicKey;
var execKey = GetStrongName(Assembly.GetExecutingAssembly().Evidence).PublicKey;
if (callerKey != execKey)
{
throw new UnauthorizedAccessException("The strong name of the calling assembly is invalid.");
}
Это может быть нецелесообразно для реализации поверх существующей кодовой базы, но взгляните на LinFu AOP , вы должны иметь возможность реализовать атрибут, который может быть присоединен к классам, которые необходимо проверять на допустимость вызывающий.