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



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

C:UserXYZDesktop>RegAsm codebase F:WorkflowWorkflowHandler/bin/debug/WorkflowHandler.dll

我收到以下错误:

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

我的服务器详细信息:

64 位,Windows Server 2008 R2 Enterprise 和 .NET Framework 4 已安装。

您确定路径中有正确的RegAsm,因为您仅通过 exe 名称调用它而不指定完整路径?必须调用正确版本的 RegAsm 才能正常工作,即 .NET 4 的 32 位或 64 位版本。

尝试指定完整路径:

c:WindowsMicrosoft.NETFrameworkv4.0.30319RegAsm.exe /codebase F:WorkflowWorkflowHandlerbindebugWorkflowHandler.dll

c:WindowsMicrosoft.NETFramework64v4.0.30319RegAsm.exe /codebase F:WorkflowWorkflowHandlerbindebugWorkflowHandler.dll

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

我将用我的解决方案扩展公认的答案。

首先,我遇到了"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。但是,如果您必须为其中之一工作,那么您会遇到比这更大的问题。:-)

最新更新