2015-03-15 2 views
0

Во время компиляции, как я могу проверить, используется ли тип данных (и/или значение) в методе.Время компиляции: как я могу проверить, используется ли тип данных (или значение) в методе

Я пытаюсь построить живую architecture, которая поддерживает плагины.

Я хочу, чтобы компилятор выдал ошибку, если событие не создается в плагине.

Я использую VS2015 Preview.

Любые предложения?

+0

Почему вы отметили вопрос PostSharp? Вы используете это? – svick

+0

PostSharp может иметь возможность помочь во время предварительной компиляции. –

ответ

0

Этот вид проверки можно реализовать с помощью PostSharp. Это не тривиально, но проще, чем использование Mono.Cecil. SyntaxTreeVisitor и ISyntaxReflectionService - хорошая основа для реализации алгоритма анализа, который должен быть вызван от Aspect.CompileTimeValidate.

Roslyn также следует упомянуть. Он позволяет вам «расширять» C# (или VisualBasic) компилятор с помощью специальной диагностики, и он очень хорошо интегрирован с VS2015.

Отказ от ответственности: Я разработчик PostSharp.

+0

Отказ от ответственности: Я подал заявку на постсоветский евангелист. Спасибо, я буду исследовать ваши ссылки. –

0

Я не думаю, что вы можете заставить компилятор выбросить эту ошибку за вас. Возможно, вы сможете ввести дополнительный шаг сборки, который запускает консольное приложение C#, которое проверяет (используя отражение) то, что вы хотите.

+0

Может ли отразить раскрытие деталей реализации метода? –

+0

Reflection может дать вам байты, представляющие il/opcodes; это похоже на детали реализации. ;) https://msdn.microsoft.com/en-us/library/system.reflection.methodbase.getmethodbody%28v=vs.110%29.aspx Было бы проще использовать Mono.Cecil для его анализа. – sisve