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

问题描述 投票:31回答:2

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

.net .net-assembly tridion
2个回答
67
投票

你确定你的路径中有正确的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

另外我注意到在你的装配路径中你有一些/字符而不是\。确保你正确的路径。


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。如果你必须为其中一个做这个工作,你会遇到比这更大的问题。 :-)

© www.soinside.com 2019 - 2024. All rights reserved.