Interop-typen kan ikke bygges inn

Jeg lager en webapplikasjon på .NET 4.0-rammeverket (beta2) i C#.

Når jeg prøver å bruke en assembly som heter "ActiveHomeScriptLib", får jeg følgende feil:

Interop type 'ActiveHomeScriptLib.ActiveHomeClass' kan ikke bygges inn. Bruk det aktuelle grensesnittet i stedet.

Når jeg endrer rammeverket til versjon 3.5, får jeg ingen feil.

Hva er en Interop Type, og hvorfor oppstår dette bare når jeg bruker 4.0-rammeverket?

Løsning

.NET 4.0 gjør det mulig å bygge inn primære interop-assemblies (eller rettere sagt, de delene du trenger) i assemblies, slik at du ikke trenger å distribuere dem sammen med applikasjonen.

Av en eller annen grunn kan ikke denne assembly-enheten bygges inn - men det høres ut som om det ikke er noe problem for deg. Det er bare å åpne fanen Egenskaper for enheten i Visual Studio 2010 og sette "Embed Interop Types" til "False".

EDIT: Se også Michael Gustus's svar, der du fjerner suffikset Class fra typene du bruker.

Kommentarer (6)

Som Jan Det tok meg en stund å skjønne det .. =S Så for alle andre som er blendet av frustrasjon.

  • Høyreklikk på den fornærmende forsamlingen som du la til i løsningsutforskeren under prosjektet References. (I mitt tilfelle WIA)
  • Klikk på egenskaper.
  • Og der skal det være et alternativ for Embed Interop Assembly.
  • Sett det til False
Kommentarer (2)

Vi utdyper Jons riktige svar.

Problemet her er at du kombinerer den nye funksjonen "Embed Interop Types" (eller NoPIA) med bruk av en klassetype. Funksjonen "Embed Interop Types" fungerer ved at alle typene fra en PIA (Primary Interop Assembly) knyttes statisk til den refererende enheten, slik at du slipper å distribuere den.

Denne funksjonen fungerer utmerket for de fleste typer i en PIA, men den har noen begrensninger. En av dem er at du ikke kan bygge inn klasser (det er et serviceproblem). Misha har en detaljert bloggartikkel om hvorfor dette ikke er tillatt.

Kommentarer (0)