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

时间:2012-07-04 04:18:30

标签: .net .net-assembly tridion

我为本地计算机上的工作流创建了一个类库并构建它。我将完整的解决方案移动到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 Enterprise和.NET Framework 4。

2 个答案:

答案 0 :(得分:65)

您确定自己的路径中有RegAsm,因为您只是在没有指定完整路径的情况下通过exe名称调用它吗?您必须调用正确版本的RegAsm才能使用它,即32位或64位版本的.NET 4。

尝试指定完整路径:

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

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

答案 1 :(得分:0)

我将在解决方案中扩展接受的答案。

首先,我遇到了“ 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。但是,如果您必须为其中之一进行这项工作,那么您将面临的问题要比这大。 :-)

相关问题