Quick tip: Interop type *xxx* cannot be embedded. Use the applicable interface instead.

We are in the process of upgrading a site of one of our clients from CS 2009 to CS 11.2. The project contains some custom pipeline components and while compiling these I got the following error messages:

error CS1752: Interop type 'CommerceServer.Core.Runtime.DictionaryClass' cannot be embedded. Use the applicable interface instead.

and

error CS0143: The type 'CommerceServer.Core.Runtime.DictionaryClass' has no constructors defined

The line that gave the error was this line:

return new CommerceServer.Core.Runtime.DictionaryClass();

It turns out this is quite easy to solve.

Here is an explanation of what is happening: http://blogs.msdn.com/b/mshneer/archive/2009/12/07/interop-type-xxx-cannot-be-embedded-use-the-applicable-interface-instead.aspx

Solution is either:

  • Take of the Class suffix or
  • Don't embed the interop assemblies by changing this in the project reference;

Many thanks to Ben Taylor of Enticify, which by the way is a great addition to Commerce Server.