Excel アプリケーションで使用する .NET ベースの COM コンポーネントを開発しようとしています。Visual Studio 2012 Express を使用して、クラス ライブラリ プロジェクトを作成し、"アセンブリ COM 可視" および "COM 相互運用に登録" オプションを選択して、プロジェクトをビルドし、Excel ブックからエクスポートされたタイプ ライブラリを参照して、正常にテストしました。
問題は、DLL を他のマシンに展開するにはどうすればよいかということです。csc を使用してライブラリをコンパイルし、RegAsm /tlb に登録し (/codebase オプションの有無にかかわらず)、出力をグローバル アセンブリ キャッシュに追加しようとしました。しかし、その結果、VBA エディタの [参照設定] ダイアログにエントリがありません。タイプ ライブラリを参照して参照を設定することはできますが、オブジェクトを作成しようとするとエラー (「ActiveX オブジェクトを作成できません」) が発生します。
では、Visual Studio は何をしていて、私はしていないのでしょうか? どんな洞察も大歓迎です。
私のコード:
using System;
using System.Reflection;
using System.Runtime.InteropServices;
[assembly : AssemblyTitle("Com Test 3")]
[assembly : AssemblyVersion("1.0.0.0")]
[assembly : Guid("F2715EE7-099F-464A-994A-390D34FAE6BA")]
[assembly : ComVisible(true)]
namespace ComTest3
{
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("C416AB08-4DE4-4E73-BDC4-B49B4CEE4901")]
public interface ITestClass3
{
string TestMethod3();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("6383217C-1871-4AAA-BFA1-0CC077250DB3")]
public class ComTestClass3 : ITestClass3
{
public string TestMethod3()
{
return "TestMethod3 called on " + DateTime.Now.ToString();
}
}
}