c# - Il tipo di interoperabilità non può essere incorporato




visual-studio-2010 visual-studio (6)

Sto creando un'applicazione web sul framework .NET 4.0 (beta2) in C #.

Quando provo a utilizzare un assembly chiamato "ActiveHomeScriptLib", ottengo il seguente errore:

Il tipo di interoperabilità 'ActiveHomeScriptLib.ActiveHomeClass' non può essere incorporato. Utilizzare invece l'interfaccia applicabile.

Quando cambio il framework alla versione 3.5, non ho errori.

Che cos'è un tipo di interoperabilità e perché si verifica solo quando utilizzo il framework 4.0?


.NET 4.0 consente di incorporare assiemi di interoperabilità primari (o meglio i bit necessari) nell'assieme in modo che non sia necessario distribuirli insieme all'applicazione.

Per qualsiasi motivo, questo assembly non può essere incorporato, ma sembra che non sia un problema per te. Basta aprire la scheda Proprietà per l'assembly in Visual Studio 2010 e impostare "Incorpora tipi di interoperabilità" su "False".

EDIT: vedi anche la answer Michael Gustus, rimuovendo il suffisso Class dai tipi che stai usando.


Come Jan Mi ci è voluto un po 'per ottenerlo .. = S Quindi per chiunque sia accecato dalla frustrazione.

  • Fare clic con il pulsante destro del mouse sull'assembly dannoso che è stato aggiunto in Solution Explorer all'interno dei riferimenti del progetto. (Nel mio caso WIA)
  • Clicca proprietà.
  • E lì dovrebbe esserci l'opzione per incorporare l'assemblaggio dell'interop.
  • Impostalo su False

Espansione sulla risposta corretta di Jon.

Il problema qui è che stai combinando la nuova funzionalità "Incorpora tipi di interoperabilità" (o NoPIA) con l'uso di un tipo di classe. La funzione "Incorpora tipi di interoperabilità" funziona essenzialmente collegando staticamente tutti i tipi da un PIA (Primary Interop Assembly) nell'assieme di riferimento rimuovendo il sovraccarico di distribuzione.

Questa funzionalità funziona alla grande per la maggior parte dei tipi in PIA, ma ha delle restrizioni. Uno di questi è che non è possibile incorporare classi (è un problema di manutenzione). Misha ha un articolo del blog dettagliato sul perché questo non è permesso


Ho avuto lo stesso problema in VB.NET 2013 con Office 2007, e questo lo ha risolto:

Progetto VB.NET 2013 VS> Puntatori> Refs> Microsoft Word 12.0 Object Lib> Incorpora tipi di interoperabilità: cambia True in False


Mi sono imbattuto in questo problema quando tiravo giù un progetto TFS sul mio computer locale. Presumibilmente, stava funzionando benissimo sulla macchina del ragazzo che l'ha scritta. Ho semplicemente cambiato questo ...

WshShellClass shellClass = new WshShellClass();

A questo...

WshShell shellClass = new WshShell();

Ora funziona come un campione!


Nella maggior parte dei casi, questo errore è il risultato del codice che tenta di creare un'istanza di un oggetto COM. Ad esempio, ecco un pezzo di codice che avvia Excel:

Excel.ApplicationClass xlapp = new Excel.ApplicationClass();

In genere, in .NET 4 è sufficiente rimuovere il suffisso "Classe" e compilare il codice:

Excel.Application xlapp = new Excel.Application();

Una spiegazione MSDN è here .





c#-4.0