0


0

COM VB.NETはうまく機能しますが、C#は再コンパイルが必要です

COM属性を持つ単純なC#クラスがあります。

[ComClass("1DC7B465-49FA-4ad1-893E-C19657E1ED25", "F97459E6-AB37-43e6-AC57-6AE5F9A9A835", "BD9F01C7-162A-4f95-9398-C126C152B965")]
    [ComVisible(true)]
    public class Class1
    {

    }

VB6アプリケーションからこのクラスを使用する必要があります。 .NET dllのAssemblyVersionを変更するまで、うまく機能します。 次に、VB6は、再コンパイルするまで(VB6アプリケーション)、C#クラスインスタンスを作成しません(ACtiveX例外をスローします)。

VB.NETで記述されている場合、Class1を再コンパイルする必要がないのは興味深いことです。

ここでC#とVB.NETの違いは何ですか? C#をVB.NETのように動作させる方法はありますか?

2 Answer


2


最も可能性の高い違いは、2つのプロジェクトウィザードによって生成される標準のAssemblyInfo.csとAssemblyInfo.vbの違いです。 これら2つを比較して、アセンブリレベル属性のいずれかが異なるかどうかを確認できます。 ところで、私はバージョン属性に賭けるでしょう。


0


C#およびVB.NETコンパイラーによって生成されたアセンブリを調べたところ、VB.NETはComClass属性に加えてGuid属性を生成することがわかりました。 C#ではできません。 そこで、C#クラスに明示的にGuid属性を追加し、問題を解決しました。