Managing plug-in compatibility and .dll libraries

@stevebaer please let me know if I can be of any help regarding this issue. I think the mkl_avx.dll that @wcmansp mentioned is being loaded by the Intel Math Kernel Library dependent on the type of processor at runtime.

I have fixed ( hopefully but as a temporary solution ) the clash by updating intel Math Kernel to the last version (same version that Evolute uses ) and removed dependence on QT libraries.
Of course this works since the user that reported the issue is only one and I am afraid it will come up again quite often.
Last year I had another problem with Scan&Solve that links again with Intel Math Kernel Library

gerry

I’ve mentioned this issue in the ChaosGroup’s V-Ray for Rhino forum. Possibly they, or those who contribute to that forum, will also have some thoughts.

This comes up again in a .dll conflict between the current network version of RhinoMembrane (RhinoMembrane_x64_215_net) and the latest academic version of Evolute Tools Pro (Evolute_Tools_Academic_64bit – 10/19/2015). Evolute uses the latest versions of the mkl .dlls but RhinoMembrane loads first. To get Evolute to run, the matching mkl .dlls in RhinoMembrane need to be replaced with the Evolute versions, to start, but there is also an additional complication, a .dll in RhinoMembrane that doesn’t have a corresponding update in the 10/19/2015 Evolute – mkl_vml_p4n.dll (1/22/2014). Without replacing this, RhinoMembrane will only launch in Demo mode. To get both to work, the RhinoMembrane version of mkl_vml_p4n needs to be replaced by an updated version; Evolute included one in their prior release (7/15/2015) although they don’t use it in the 10/19 release.

Hi all, apologies for reviving this thread, but I believe I am facing the same issue described here, specifically:

I have installed the ArchiCad-Grasshopper Live Connection plugin, which comes with an instance of the Newtonsoft.JSON.dll [1], and I’m testing out the (now deprecated) Leafcutter plugin for reading/writing to Google Sheets, which also comes with a Newtonsoft.JSON.dll [2].

When both these JSON assemblies are present with the Grasshopper libraries folder structure, Rhino crashes once Grasshopper is loaded and starts loading in the assemblies. This error message is thrown to the desktop:

	 System::Windows::Forms::Application::ThreadException event occured

	 SENDER: System.Threading.Thread

	 EXCEPTION: System.MissingMethodException
	 MESSAGE: Method not found: 'System.String Newtonsoft.Json.JsonConvert.SerializeObject(System.Object, Newtonsoft.Json.JsonSerializerSettings)'.
	 SOURCE: ArchiCADConnection
	 CALL STACK
	    at ArchiCAD.AC_Utility.Object.Serialize_Remoting(Object obj)
	    at ArchiCAD.Commands.AC_SendDocumentName.<Execute>d__0.MoveNext()
	 --- End of stack trace from previous location where exception was thrown ---
	    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
	    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
	    at ArchiCAD.AC_DocumentManager.<SendDocumentName>d__20.MoveNext()
	 --- End of stack trace from previous location where exception was thrown ---
	    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
	    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
	    at ArchiCAD.AC_DocumentManager.<Instances_CanvasCreated>d__c.MoveNext()
	 --- End of stack trace from previous location where exception was thrown ---
	    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

And I’m running these versions:

- Windows 10 Fall Creators, .NET Framework 4.7.1
- Rhino SR14 64-Bit (5.14.522.8390, 05/22/2017)
- Grasshopper 0.9.0076
- ArchiCad 21 5010 INT FULL
- Grasshopper-ARCHICAD_Connection-21-INT-5011-1.0

I do not plan to actually implement the Leafcutter plugin. That said, I would still appreciate a solution for how to deal with this seeming conflict of assemblies.

Cheers,

Anders

[1] This one: Newtonsoft.JSON.dll.zip (205.1 KB)
[2] This one: Newtonsoft.Json.dll.zip (142.2 KB)

@stevebaer, do you have info how to handle this case?

For what it’s worth: I deleted the dll that came with Leafcutter [1], and replaced it with the one from the ArchiCad-GH Live Connection, which seems to resolve the problem. That said, these assembly conflicts do seem potentially quite problematic.

[1] I will be looking into implementing the newer Google API’s (.NET and Python) for communicating with Google Sheets, so if anyone has any experience with these I’m all ears :wink:

Leafcutter comes with a bunch of. dll-s. Which one should I delete or change?leafcutter%20dll

Replace Newtonsoft.json.dll with the one that came with the ArchiCad plugin install, you can use Everything to locate this on your system.

Edit: Or just download it above, forgot that I had uploaded the dlls.

I copyied that dll. Unfortunatelly the the authentication does not work.

  1. Solution exception:A(z) „Newtonsoft.Json, Version=4.0.5.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed” fájl vagy szerelvény, illetve annak egyik függősége nem tölthető be. Erős nevű szerelvény szükséges. (A kivétel HRESULT-értéke: 0x80131044)

Does this problem exist in V6? Rhino 6 also ships with a version of Newtonsoft.json

Hi there I was wondering how to disable the component “warning” messages(orange), when two assemblies share common namespaces??

  1. Warning (CS0105): The using directive for ‘System.Xml’ appeared previously in this namespace (line 27)
    the script works perfectly but leaving that message bother me, Thanks!!!

Well I find the answer:

this.Component.ClearRuntimeMessages();

Hi Anders –

FYI, I was the Project Manager on Leafcutter (it was a Flux.io project). @andheum was the one-man dev team, and I recall that about 18 months after release there was a Google Auth change that rendered Leafcutter inoperable. With Flux now defunct, I’d be happy to see the project revived – perhaps Andrew can chime in here.

Cheers,
Marc

@stevebaer I am having Json dll problems again – I can get our GH plugins to work with new Newtonsoft dlls (version 12.0.2.0) if we manage our plugin ecosystem, but for some reason building an RHP that relies on Json functionality in the 12.0.0.0 release fails – Rhino 6 seems to be loading an older version and I can’t find where it is loading the dll or if it’s even possible to update it.

I’m targeting Rhino 6 SR8 in my plugins for compatibility with older installations but I’m running 6 SR13 and the problem persists.

Marc

I see – Rhino 6 ships with v10

Is there some way we can do away with this issue once and for all?? :slight_smile:

Can you just reference the Json.NET that ships with V6 and not ship that DLL? Same way you would reference RhinoCommon

1 Like

Here’s what I did – I am building the RHP for both Rhino 5 + 6, so I matched my JSON version to the one that 6 ships with (10.0.3) – this seems to be the best solution and so far works with 6 (haven’t tested 5 yet).

I’ve also downgraded my GHA dependency to the same version. So far so good.

Thanks,
Marc

1 Like

I made a note about how I implemented the new .NET API here:

I also implemented the CPython API outside of Rhino. Was also pretty straightforward.

1 Like

Does Rhino automatically on startup load the json.net dll that ships with it? It might encourage more use of it…