0

I want to create a Script Task to load data from MongoDB to SQL Server.

I am using Visual Studio 2017 and target SQL Server version is 2017.

The default target .NET Version of the script task based on the above is 4.5, therefore I got the 2.3 version, which was the latest to target 4.5

In order to get the dlls, I first used NuGet to download the packages and then copied the following dlls:

MongoDB.Driver.dll
MongoDB.Driver.Core.dll
MongoDB.Bson.dll

I followed instructions from here: http://codeingaddiction.blogspot.com/2011/06/how-to-add-strong-name-to-existing-dll_16.html

In order to produce strong named dlls.

Finally, I added the dlls on GAC on the following path

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools

I then created a script task and manually added the 3 dlls.

My test code is the following:

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Core;
using MongoDB.Bson.Serialization;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{

    public override void PreExecute()
    {
        base.PreExecute();
    }

    public override void PostExecute()
    {
        base.PostExecute();

    }

    public override void CreateNewOutputRows()
    {

        MongoClient client = new MongoClient("mongodb://dgm-mongodbdev-01.development.dc.opap:27017");
    IMongoDatabase database = client.GetDatabase("sportsbetting-staging");
    IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("event");
    collection.Find<BsonDocument>(null).Limit(3);
    Console.WriteLine(collection);

    }

 }

Trying to build gives the following error:

Severity    Code    Description Project File    Line    Suppression State
Error       The type 'IAsyncCursorSource<>' is defined in an assembly that is not referenced.         You must add a reference to assembly 'MongoDB.Driver.Core, Version=2.3.0.157, Culture=neutral, PublicKeyToken=null'.  

MongoDb Core Driver does not have any additional dependencies that I may have missed. For 4.5 version of .NET the only dependency is MongoDB.Bson which is added as a reference.

The only article I have found for SSIS script task is this: https://arcanecode.com/2014/01/14/importing-mongodb-data-using-ssis-2012/

Which is obsolete because it used the version 1.x of the driver.

Any ideas? The message seems misleading because it seems clear that I am not missing any dependency.

rpd
  • 462
  • 1
  • 9
  • 24
  • i find it easier to use a console app when using external references. Check to see if it works there. – KeithL Apr 29 '20 at 16:35

1 Answers1

0

Finally, my answer was provided on the following post:

How to fix "Referenced assembly does not have a strong name" error?

Apparently,

MongoDB.Driver.Core.dll
MongoDB.Driver.dll

Have reference to

MongoDB.Bson.dll

Therefore, the public key token had to be added on the il files before re-assembling

rpd
  • 462
  • 1
  • 9
  • 24