Caricare un assembly dinamico e creare una variabile di questo tipo
-
22-09-2019 - |
Domanda
Sto cercando di caricare un assembly in modo dinamico e creare una variabile di questo tipo:
Assembly Ass= Assembly.LoadFrom(@"d:\abc\microsoft.office.interop.excel.dll");
foreach(Type Excel Assembly.Gettypes())
{
// here now Type contains
// Excel.nameSpace="microsoft.officce.interop.excel"
// now i need to creae an variable of type "Excel"
microsoft.officce.interop.excel.applicationClass excel= null;
// something like this
//Here Excel is my nameSpace
Excel.officce.interop.excel.applicationClass excel= null
}
Sto lavorando su questo dal passato due giorni qualsiasi aiuto come posso dichiarare la mia variabile di tipo Excel (che è il tipo ho bisogno di creare)
qualsiasi aiuto sarebbe grande grazie
Soluzione
Io non sono certo questo lavoro per quell'assemblea, ma in generale si può fare questo ottenendo il tipo dal gruppo quindi creare l'istanza utilizzando Activator.CreateInstance :
Type type = assembly.GetType("MyType");
object instanceOfMyType = Activator.CreateInstance(type);
è necessario conoscere il nome del tipo che si desidera creare ( 'Excel.Application'?)
è anche possibile ottenere il tipo direttamente dal dll se si conosce il percorso ad esso:
Activator.CreateInstance(assmblyFileName, typeName)
Non sono sicuro che questo funziona per questa assemblea come questo è un assembly di interoperabilità COM, quindi penso che potrebbe essere necessario utilizzare COM per accedervi, ma potrebbe.
EDIT:
si sta probabilmente meglio utilizzando i metodi documentati per fare questo:
applicazioni di destinazione ufficio tramite Primary Interop Assemblies dovrebbe essere un buon punto di partenza
Altri suggerimenti
Perché non aggiungere riferimento all'assembly? Anche a prima vista si dispone di un errore di ortografia, di aver scritto ufficio in microsoft.officce.interop con 2 c di che potrebbe essere il motivo per cui se è stato copiato e incollato il codice.
Ecco come io uso l'Excel COM:
using Excel = Microsoft.Office.Interop.Excel;
Excel.Application excelApp = new Excel.ApplicationClass();
Modifica:
Anche io posso vedere avete problemi di spazio dei nomi. Lo spazio dei nomi di Excel non esiste come lei ha commentato il namespace Excel prima, quindi il seguente da solo dovrebbe funzionare.
Microsoft.Office.Interop.Excel.ApplicationClass excel = null;
senza il:
Excel.officce.interop.excel.applicationClass excel= null