I build un assembly che fa riferimento a una DLL di interoperabilità COM. Se incorporo i tipi di interoperabilità COM impostando Incorpora tipi di intervallo su Vero nelle proprietà del riferimento (VS2010), in fase di esecuzione si verifica un errore "l'oggetto non contiene una definizione per get_Range". Se i tipi di interoperabilità COM non sono incorporati, non si verifica alcun errore.Excel get_Range mancante quando l'assembly di interoperabilità è incorporato in .NET 4.0
Qualcuno sa perché un metodo particolare, Worksheet.get_Range dovrebbe essere omesso o come aggirare questo o avere altri approfondimenti rilevanti? Dovrei essere grato per qualsiasi aiuto.
La DLL di interoperabilità contiene un riferimento a Worksheet.get_Range (oggetto, [oggetto]). Usando il reflector sul mio assembly chiamante non si fa menzione di get_Range sotto Worksheet.
L'assembly di interoperabilità che sto incorporando è generato da Excel9.olb. Non sto utilizzando le PIA poiché l'applicazione ha come target più versioni di Excel.
MIke, grazie per il vostro aiuto. L'approccio a parametro singolo non ottiene un errore di run-time ed è ovviamente una buona soluzione. Ho inviato una segnalazione di bug a Microsoft 530769. – mikemay
https://connect.microsoft.com/VisualStudio/feedback/details/530769/get-range-method-missing-with-embedded-interop-assembly?wa=wsignin1.0 – mikemay
Ah, giusto, ho postato un link errato nel mio commento precedente, grazie per averlo corretto. La discussione è molto interessante e ha un senso. Ma, posso chiederlo, non è la soluzione più semplice per usare semplicemente la sintassi 'worksheet.Range [" A1 "]' invece del più vecchio 'worksheet.get_Range (" A1 ", Type.Missing)" ora che sei usando C# 4.0? Hai trovato una curiosità molto interessante, ma per quanto riguarda il fissaggio per il tuo codice, sembrerebbe più semplice e meglio usare semplicemente la nuova sintassi - che è più facile da leggere in ogni caso (in base alla progettazione!). –