私はC#で.NET 4.0フレームワーク(beta2)でWebアプリケーションを作成しています。
"ActiveHomeScriptLib"というアセンブリを使用しようとすると、次のエラーが発生します。
相互運用型 'ActiveHomeScriptLib.ActiveHomeClass'は埋め込めません。代わりに適切なインターフェースを使用してください。
フレームワークをバージョン3.5に変更しても、エラーは発生しません。
相互運用タイプとは何ですか。また、4.0フレームワークを使用した場合にのみこれが発生するのはなぜですか?
.NET 4.0では、プライマリ相互運用機能アセンブリ(または、必要な部分)をアセンブリに埋め込むことができるため、アプリケーションと一緒に配置する必要はありません。
何らかの理由で、この総会を埋め込むことはできません - しかし、それはあなたにとって問題ではないように思えます。 Visual Studio 2010でアセンブリの[プロパティ]タブを開き、[相互運用型の埋め込み]を[False]に設定するだけです。
編集:あなたが使っている型からClass
接尾辞を削除して、Michael Gustusの answer も見てください。
ほとんどの場合、このエラーはCOMオブジェクトをインスタンス化しようとするコードの結果です。たとえば、これはExcelを起動するコードの一部です。
Excel.ApplicationClass xlapp = new Excel.ApplicationClass();
通常、.NET 4では、 'Class'サフィックスを削除してコードをコンパイルするだけです。
Excel.Application xlapp = new Excel.Application();
MSDNの説明は ここ です。
Janのようにそれはそれを得るために私に時間がかかりました.. = Sだからフラストレーションで目がくらんでいる人のために。
Jonの正解を拡大します。
ここでの問題は、あなたが新しい "組み込み相互運用機能タイプ"(またはNoPIA)機能をクラスタイプの使用と組み合わせているということです。 「相互運用型の埋め込み」機能は、基本的にすべての型をPIA(プライマリ相互運用機能アセンブリ)から参照元アセンブリに静的にリンクして、展開のオーバーヘッドをなくすことによって機能します。
この機能はPIAのほとんどのタイプに最適ですが、制限があります。そのうちの1つは、クラスを埋め込むことができないということです(これはサービスの問題です)。 Mishaはなぜこれが許されないのかについての詳細なブログ記事を持っています。
解決策を得た
参照に移動し、あなたが "偽"または "真"にオプション "埋め込み相互運用機能の種類"を得るでしょう希望のdllを右クリック。
私はこの問題に遭遇し、TFSプロジェクトを自分のローカルマシンにダウンロードしました。伝えられるところでは、それはそれを書いた男のマシン上でうまく働いていました。私は単にこれを変更しました...
WshShellClass shellClass = new WshShellClass();
これに….
WshShell shellClass = new WshShell();
今、それはチャンピオンのように働いています!
私はOffice 2007とVB.NET 2013で同じ問題を抱えていた、そしてこれはそれを解決した:
VS 2013 VB.NETプロジェクト>小道具> Refs> Microsoft Word 12.0 Object Lib> Interopタイプの埋め込み:TrueをFalseに変更
http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307
このエラーは、新しいプロジェクトで参照されているTestStand API相互運用機能アセンブリの[相互運用タイプの埋め込み]プロパティのデフォルト値がtrueであるために発生します。このエラーを解決するには、次の手順を実行してEmbed Interop Typesプロパティの値をFalseに変更します。ソリューションエクスプローラのプロジェクトの参照セクションでTestStand Interop Assembly参照を選択します。プロパティブラウザでEmbed Interop Typesプロパティを見つけ、値をFalseに変更します。
Visual Studio 2017バージョン15.8では、PackageReferencesyntaxを使用できるようになりました Visual Studio Extensibility(VSIX)プロジェクトでNuGetパッケージを参照できるようになりました。これにより、NuGetパッケージについての推論がはるかに簡単になり、VSSDK全体を含む完全なメタパッケージを持つことになります。
NuGetパッケージの下にインストールすると、EmbedInteropTypesの問題が解決します。
インストールパッケージMicrosoft.VisualStudio.SDK.EmbedInteropTypes