Pergunta

I exigem a capacidade de pré-processar um número de arquivos C # como um passo prebuild para um projeto, detectar o início de métodos, e inserir o código gerado no início do método, antes de qualquer código existente. Estou, no entanto, ter um problema detectar a abertura de um método. I inicialmente tentou uma expressão regular para corresponder, mas terminou com demasiados falsos positivos.

Gostaria de usar reflexão, mas a classe MethodInfo não faz referência o ponto na fonte original.

Editar : O que eu estou realmente tentando fazer aqui é de apoio pré-condições sobre métodos, que o código pré-condição a ser determinado por atributos no método. Meu pensamento inicial é que eu poderia olhar para o início do método, e em seguida, insira o código gerado para lidar com as pré-condições.

Existe uma maneira melhor de fazer isso? Estou aberto a criar um Visual Studio suplemento se necessário.

Este é um projeto .NET 2.0.

Felicidades

Foi útil?

Solução

PostSharp ou Mono.Cecil vai deixar você fazer isso limpa alterando o código gerado, sem entrar em escrever um parser # C que é improvável que seja core business para você. ..

Não reembolsaram qualquer coisa de conseqüência com PostSharp mas seria adivinhar a sua mais apropriado do que Mono para implementar algo como condições prévias ou AOP. Como alternativa, você pode ser capaz de fazer algo AOPy com um recipiente DI como Ninject

Mas é claro que a aplicabilidade desta ideia Depende - você não disse muito diferente do que você queria inserir código no início de métodos ...

EDIT: À luz do seu desejo de fazer pré-condições ... contratos de código no .net 4 é definitivamente nessa direção.

Que tipo de ferramenta que você tem? O que está errado com ter um único Mono.Cecil.dll DLL enviados? De qualquer maneira algo diferente de um analisador é a ferramenta para o trabalho.

Outras dicas

Eu tenho certeza que há uma maneira mais fácil, mas esta pode ser uma boa desculpa para tomar MGrammer para uma rodada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top