Вам нужно определить, что именно вы имеете в виду, когда говорите «мой код» или «внешний код».
Предполагается, что «мой код» означает «код, скомпилированный в текущую сборку», а внешний код означает«код из ссылочной сборки», самый простой способ найти его для сравнения сборок.
Если у вас есть SyntaxNodeAnalysisContext context
и InvocationExpressionSyntax node
, вы найдете символ для метода, которым вы являетесьвызов следующим образом:
var symbol = context.SemanticModel.GetSymbolInfo(node, context.Cancellationtoken);
Помните, что символ может быть нулевым, поэтому проверьте это.
Теперь вы можете сравнивать сборки:
bool fromSameAssembly = context.Compilation.Assembly.Equals(symbol.ContainingAssembly);
Другойвариант посмотреть на расположение символа:
bool isInMetadata = symbol.Locations.Any(loc => loc.IsInMetadata);
bool isInSource = symbol.Locations.Any(loc => loc.IsInSource);