我在Visual Studio 2008中创建了一个简单的类库项目,其中包含一个类,如下所示。我试图让这个类注册COM互操作,以便我可以通过非托管脚本(如vbscript或jscript)使用它。在为COM注册程序集时遇到问题
在我的项目构建属性中,我选中了“注册COM Interop”复选框。
在组装设置中,我选中了“使此组件可见”,并且我确认[assembly: ComVisible(true)]
属性存在于assembly.cs文件中。
每次构建此项目时,都会收到一个错误消息,其内容为“projectname.dll不包含任何可以为COM Interop注册的类型,而且,我还没有能够成功创建一个使用VBScript的。有谁知道,这是不正确注册?
我的VBScript中失败,在该行创建ActiveX对象... Set F = CreateObject("64BitCLTest.Class1")
。
最后,我如何才能VS中的64位区域注册此注册表而不是32位区域,以便64位进程可以使用它?
-- The Test Class--
namespace _64BitCLTest
{
[Guid("BBAA06EF-CA4C-4fe2-97CD-9B1D85ADA656")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
[ProgId("64BitCLTest.Class1")]
public class Class1
{
Class1()
{
// do nothing
}
public string Method1()
{
return "This is a return string from method 1";
}
public int Property1
{
get {return 777;}
}
}
}
这工作,但你知道如何让它注册这个程序集,以便64位进程可以调用它以及32位进程?目前我只能使用SysWOW64文件夹中的cscript创建它 – PICyourBrain 2010-07-28 17:04:34
您需要使用RegAsm的64位版本进行注册:%SYSTEMROOT%\ Microsoft.NET \ Framework64 \ v2.0.50727 \ RegAsm.exe老实说不知道如何用csproj设置来做到这一点。 – ConsultUtah 2010-07-28 17:09:15
我知道如何制作安装程序自定义操作。是否可以在我用作自定义操作的方法中从C#代码调用RegAsm? – PICyourBrain 2010-07-28 17:10:48