如何将.NET程序集注册为COM组件?

39

我已经为本地机器上的工作流程创建了一个类库并进行了构建。我将完整的解决方案移动到了Tridion服务器,并尝试使用regasm.exe工具在服务器上注册程序集,如下所示:

C:\User\XYZ\Desktop\>RegAsm \codebase F:\Workflow\WorkflowHandler/bin/debug/WorkflowHandler.dll

我遇到了以下错误:

无法加载 'F:\Workflow\WorkflowHandler/bin/debug/WorkflowHandler.dll',因为它不是一个有效的 .NET 程序集。

我的服务器详情如下:

64位,Windows Server 2008 R2企业版,已安装.NET Framework 4。


可能是32位与64位的问题吗?可能是远程系统没有安装.NET 4.0吗? - reuben
这是一个64位服务器,安装了.NET 4,并且我在框架4中构建了类库。 - Jey
你知道你在 "\codebase" 上的斜杠方向是错误的,对吧?它应该是 "/codebase"(不带引号)。 - reuben
是的,我也尝试过这样做(F:\ Workflow> RegAsm / codebase F:/ workflow / workflowhandler / bin / debug / workflowhandler.dll),仍然出现相同的错误。并尝试将“/”更改为“\”,仍然出现相同的错误。并尝试在“”之间提供dll路径,仍然出现相同的错误。在我的类库解决方案中,我使用解决方案属性创建了强名称,并在assemblyinfo.cs文件中设置了com visible =“true”,除此之外没有做任何事情。 - Jey
2个回答

79

你确定在调用exe文件名时,环境变量中的路径包含了正确的RegAsm吗?你必须调用正确版本的RegAsm才能正常工作,即.NET 4的32位或64位版本。

尝试指定完整路径:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /codebase F:\Workflow\WorkflowHandler\bin\debug\WorkflowHandler.dll
或者
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe /codebase F:\Workflow\WorkflowHandler\bin\debug\WorkflowHandler.dll

我还注意到你程序集的路径中有一些 / 字符,而不是 \。请确保输入正确的路径。


非常感谢,我之前使用了错误的RegAsm.exe,现在我已经成功注册了。我该如何检查已注册的程序集是否在正确的位置?它是否真正被注册了? - Jey
如果没有出现故障,它应该已经成功注册了。如果您的计算机上安装了Visual Studio,您可以尝试向COM组件添加引用,看看它是否显示在列表中。否则,您可以编写VBScript并尝试在其中实例化COM组件。 - Damir Arh
谢谢。我在64位机器上使用Framework64 RegAsm时出了问题,当我使用32位的时候它就可以工作了。一定是32位的dll :) - Peter Morris
1
太好了!我启动了错误的Visual Studio命令提示符,如果我明确引用了.NET 2.0 regasm,它第一次就能工作。谢谢。 - Jay Imerman

2
我将会用我的方案来扩展已接受的回答。
首先,我遇到了“AnyCPU”的问题(我必须与COM互操作,因此我这样做),所以我将平台限制为x86和x64。我希望在构建过程中注册组件,因此我将其作为后构建事件执行:
if $(PlatformName) == x64 (
    set RegAsm=$(MSBuildFrameworkToolsPath64)regasm.exe
) else (
    set RegAsm=$(MSBuildFrameworkToolsPath)regasm.exe
)

echo Creating TypeLib
"%RegAsm%" /tlb "$(TargetPath)"
echo Registering Component
"%RegAsm%" "$(TargetPath)"

注意:这可能不适用于ia64。如果你必须让它在其中一个上工作,那么你面临的问题比这个更大,哈哈。 :-)
最初的回答:注意:这种方法可能不适用于ia64。但是,如果你必须在这些设备上使用它,那么你的问题肯定比这个更加严重。:-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接