Troubleshooting FIM: Could not load file or assembly

Overview / Purpose/ Goal

A Full Import and Full Synchronization single step run profile was generating 499 synchronization errors.  We clicked on the hyperlink for the error, and then details to review the stack trace.

STACK TRACE
System.IO.FileNotFoundException: Could not load file or assembly ‘<NAME OF DLL>, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. File name: <NAME OF DLL>, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'    at <DLL CLASS BREAKDOWN>.MapAttributesForImport(Rule rule, CSEntry csentry, MVEntry mventry)    at <DLL CLASS BREAKDOWN>.MapAttributesForImport(String FlowRuleName, CSEntry csentry, MVEntry mventry)

 

So the first thing that was noticed was that this was a 3rd party DLL.  Troubleshooting the issue, the following steps were executed:

1.      Validated that the 3rd Party Rules Extension DLL, was in the <FIM INSTALL PATH>\2010\Synchronization Service\Extensions folder.

2.      Reviewed the Metaverse Extension in the Options dialog, and discovered that we had a Metaverse Router DLL.

3.      Utilized a tool called Process Monitor, which assisted in isolating the issue.

 

Process Monitor Steps

1.      Downloaded and Extracted Process Monitor

2.      Process Monitor starts logging immediately on the launch of the tool

3.      Preview one of the objects throwing the error

4.      Once the error occurred, stop Process Monitor by clicking on the Magnifying Glass on the button bar

5.      From the Filter menu, select Filter

6.      In the Filter dialog, select Path, then contains, then type the name of the DLL in question.

7.      Click the Add button to include the DLL, and filter to just that DLL.

8.      Click the Ok Button

9.      Your process monitor log will filter down to anything containing the name of the DLL in the Path column.  In my scenario, it appears like the below picture.  We had four file locations that were checked, and in each case, we received PATH NOT FOUND or NAME NOT FOUND

10.   Based on this information, we checked the locations, and in-deed the file did not exist. 

Resolution

To resolve the issue, we simply:

1.      Placed the DLL into the first directory referenced

2.      Stopped the Synchronization Service in the Services MMC

3.      Start the Synchronization Service in the Services MMC

4.      Tested with success

See Also

FIM Landing Page: Resource Wiki and Troubleshooter Wiki Index