Ignorar dependências faltando durante ReflectionOnlyLoad

votos
17

Eu estou trabalhando em um diálogo do navegador classe simples que permite aos usuários abrir uma montagem e escolher um método estático de dentro. No entanto, existem algumas situações em que as dependências da assembleia estão faltando.

Desde que eu só preciso o nome do método e não o seu pleno protótipo, há alguma maneira de obter passado o FileNotFoundException que é gerado quando chamando Assembly.ReflectionOnlyLoadFrom ? Atualmente, estou manipulação AppDomain.ReflectionOnlyAssemblyResolve mas se eu retornar nulo quando eu fico um FileLoadException com a seguinte mensagem:

Não é possível resolver a dependência da montagem '...' porque não foi pré-carregado. Quando usando a API ReflectionOnly, conjuntos dependentes devem ser pré-carregados ou carregados, se necessário através do evento ReflectionOnlyAssemblyResolve.

Eu sei que isso deve ser possível de alguma forma, porque .NET Reflector permite ignorar as dependências não resolvidas. No entanto, eu estou começando a pensar que talvez refletor analisa as montagens manualmente em vez de carregá-lo na CLR e usando a reflexão padrão. Talvez ele usa algo como Cecil do projeto Mono.

Publicado 27/08/2009 em 07:52
fonte usuário
Em outras línguas...                            


3 respostas

votos
3

Isto irá ignorar suas dependências que estão faltando:

        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
            Assembly assembly = Assembly.ReflectionOnlyLoad("foo");
            foreach (Type t in assembly.GetTypes())
            {
                Console.WriteLine(t.FullName);
            }
        }

        static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
        {
            return System.Reflection.Assembly.ReflectionOnlyLoad(args.Name);
        }
Respondeu 15/12/2011 em 23:08
fonte usuário

votos
3

Eu tentaria Cecil se você vai estar fazendo trabalho não-trivial com montagens. Há também a MS CCI . (Eu não estou 100% de certeza qualquer um destes trabalhos com pedaços faltando, mas eles são certamente boas ferramentas neste espaço e eu ficaria surpreso se eles não deixaram)

Se você realmente precisa para chegar ao metal, você não pode bater este tutorial Asmex e amostra , que deve definitivamente trabalhar ou deixá-lo trabalhar em torno dele.

Respondeu 27/08/2009 em 08:46
fonte usuário

votos
1

Acredito que refletor faz sua própria assembleia análise / carregamento - Olhei na sua origem um tempo atrás (usando-se refletor: p) e viu um grande número de classes relacionadas com a montagem, que parecem ser analisado em uma estrutura de árvore maciça.

Você pode sempre enviar e-mail Portão Vermelho / Rutz Loeder e pedir-lhes para a confirmação definitiva. :)

Respondeu 27/08/2009 em 08:27
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more