2012-02-08 11 views
5

Ho un file .il che posso compilare senza problemi. Posso fortemente chiamarlo e così senza problemi. Ma non sono in grado di impostare la versione del file tramite l'attributo come mi aspetterei. Come posso impostare FileVersion per un assembly quando si utilizza ilasm?ILASM non imposta FileVersion

Se faccio un viaggio di andata e ritorno ottengo sempre un file .res che contiene solo dati binari che non sono leggibili. Cosa c'è dentro questo file di ricerca e posso modificarlo?

Il codice non funziona

.assembly myAssembly 
{ 
    .custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = { string('1.2.3.4') } 

risposta

9

Il problema può essere risolto utilizzando il file .res. Non è sufficiente fare un viaggio di andata e ritorno con ildasma e ilasmo. Il file IL non fa riferimento al file .res. Ho dovuto aggiungerlo alla chiamata ilasm manualmente. I dati nel file di ricerca sembravano contenere le informazioni che sono scritte nell'intestazione PE che è ok per me.

La riga di comando finale necessario era

ilasm test.il /dll /res:test.res 

io ancora non so che cosa è esattamente all'interno del file res ma posso Exhange con le informazioni dei metadati di qualsiasi altro assemlby che creo manualmente e poi decompilare per sostituire i metadati dell'assemblaggio originale di cui ho bisogno.

Sembra che non molte persone stiano facendo queste cose.

+1

Ogni programmatore C/C++ esegue questa operazione. Il modo più semplice per creare il file .res è con un progetto C++ fittizio. Si modifica il file .rc, a mano o utilizzando l'editor di risorse nell'IDE C++. Lo strumento SDK rc.exe lo converte in .res –

+0

Grazie non ho pensato che VS possa effettivamente modificare la risorsa Version nell'editor binario. È bello sapere che il ilasm non usa un arcano formato binario. –

Problemi correlati