Как зарегистрировать сборку.NET как COM?

Я создал библиотеку классов для рабочего процесса на локальной машине и собрал ее. Я переместил полное решение на сервер 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 установлены.

1 ответ

Решение

Вы уверены, что имеете право 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

Также я заметил, что на пути к вашей сборке у вас были некоторые / символы вместо \, Убедитесь, что вы вводите правильный путь.

Я расширю принятый ответ с моим решением.

Во-первых, у меня возникли проблемы с "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. Если вам нужно сделать эту работу для одного из них, у вас есть более серьезные проблемы, чем эта.:-)

Другие вопросы по тегам