38
votes

I have created a class library for a workflow on a local machine and build that. I moved the complete solution to a Tridion server and tried to register the assembly in the server using regasm.exe tool as below:

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

I got the following error:

failed to load 'F:\Workflow\WorkflowHandler/bin/debug/WorkflowHandler.dll ' because it is not a valid .NET Assembly.

My server details:

64-bit, Windows Server 2008 R2 Enterprise, and .NET Framework 4 installed.

2
Could it be a 32- vs. 64-bit issue? Could it be the remote system doesn't have .NET 4.0 installed? - reuben
its an 64 bit server, and .net 4 installed, and i built the class library in framework 4 - user1428019
You know your slash on "\codebase" is going the wrong way, right? It should be "/codebase" (without quotes). - reuben
yes, i tired like this also (F:\Workflow> RegAsm /codebase F:/workflow/workflowhandler/bin/debug/workflowhandler.dll) ,still getting the same error. and tried to change the "/" into "\", still same error. and tried to give the dll path between "", still the same error. in my class library solution, i have create the strong name using the solution properties and in assemblyinfo.cs file i had set com visible = "true" apart from that havent to any. - user1428019

2 Answers

73
votes

Are you sure you have the right RegAsm in your path since you're calling it by exe name only without specifying the full path? You must call the right version of RegAsm for it to work, i.e 32 or 64-bit version of .NET 4.

Try specifying the full path:

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

or

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

Also I noticed that in the path to your assembly you had some / characters instead of \. Make sure you're putting in the correct path.

1
votes

I'll expand on the accepted answer with my solution.

First, I ran into issues with "AnyCPU" (I have to interop with COM, hence my reason for doing this), so I limit platform to x86 and x64. I wanted it to register the component as part of the build, so I did this as a post build event:

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)"

Note: This probably won't work for ia64. If you've got to make this work for one of those, you've got bigger problems than this, though. :-)