Domanda

Ho un progetto che utilizza la generazione di codice dinamico per creare una classe proxy. Questa classe di proxy utilizza le classi interne del progetto (in modo che i dettagli di implementazione non siano esposti) e quindi utilizzo l'internalsVisibleto con il nome del mio gruppo generato dinamicamente. Questo ha funzionato bene fino a poco tempo fa, quando il mio cliente ha imposto il requisito che tutti gli assiemi spediti fossero forti.

Il problema sorge perché, al fine di utilizzare l'internalsvisibleto con un'assemblea forte, le assemblee a cui riferimenti devono essere anche con un nome forte e devi fornire una chiave pubblica. Dove mi blocco è come fornire un nome forte per l'assemblaggio generato dinamicamente. Ecco cosa ho fatto finora:

  1. Ho creato una nuova coppia di chiavi per assiemi dinamici, in modo che il .snk possa essere spedito con il prodotto (ovviamente non vogliamo spedire il .snk utilizzato per firmare il resto dei gruppi di progetto.)
  2. Ho estratto il publickey e ho aggiornato il mio interno Visibleto per utilizzare il nuovo Dynamic PublicKey per le assemblee referenziate dinamicamente.
  3. Ho tentato di firmare gli assemblaggi generati dinamicamente come questo:

        var name = new AssemblyName("ProxyBuilderAssembly");
        var attributes = new CustomAttributeBuilder[1];
        attributes[0] =
            new CustomAttributeBuilder(typeof(AssemblyKeyFileAttribute).GetConstructor(new[] {typeof(string)}),
                                       new object[] {"Dynamic.snk"});
        _assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.RunAndSave, attributes);
        _module = _assembly.DefineDynamicModule("ProxyBuilderAssembly", "ProxyBuilderAssembly.dll");
    

Sfortunatamente non funziona e ho avuto difficoltà a trovare alcuna documentazione su come dovrebbe funzionare. Qualcuno sa come firmare un assemblaggio generato dinamicamente in modo che possa avere accesso tramite interni Visibleto? Posso solo rendere pubbliche le classi necessarie, ma ciò finisce per perdere dettagli sull'implementazione che sarebbero meglio lasciati incapsulati.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top