Hi Dojo!
I'm working in a new driver wich uses a nuget package and I'm including it as namespace in a QAction:
using System.IO.BACnet;
And as dll import in the QAction declaration:
<QAction id="2" dllImport="BACnet.dll" name="Bacnet_read" encoding="csharp" triggers="4">
I have also have checked the "Automatically generate Class Library code"
DIS compiles fine but when a run the element I have a reference error.
(9,17): error CS0234: The type or namespace name 'BACnet' does not exist in the namespace 'System.IO' (are you missing an assembly reference?)
I have follow this article but I can't find the generated dll in the dlls folder:
Any idea?
Thanks in advance!
Hi Manuel
Do note that proper NuGet support only works in DataMiner 10.1 (DataMiner 10.0.10).
In the upcoming release of DIS (2.39) (September) it will be possible to have proper NuGet support when developing. When publishing a script or protocol, it will retrieve the necessary dlls and create a dmapp/dmprotocol package and deploy that on the DataMiner.
When saving the compiled version of a script/protocol (e.g.: Save Compiled Protocol As...) it will now have the option to save it as a dmapp/dmprotocol. Previously (DIS 2.38) it would save the xml and create a folder called Dlls beside it with the necessary dlls. These needed to be manually stored in the ProtocolScripts folder.
Do note that not all NuGets will be supported yet. NuGets with native code for example is not supported as the internal structure of the NuGet is different.
But for most cases there should be no issues.
Hi Manuel
Please check if the required DLLs are present in the Skyline DataMiner/ProtocolScripts/DllImport folder. When DIS compiles the Automation script or protocol, it will extract the required DLLs from the NuGets and save them alongside the protocol.xml/script.xml. To make sure elements using such a protocol can work correctly, those folders with DLLs need to be placed in the Skyline DataMiner/ProtocolScripts/DllImport folder.
More information about this topic can be found on DataMiner Docs: Consuming NuGet packages
Hope this will help you out.
Kind regards
Hi Manuel
As an alternative, the DLLs should also be present in the MyProtocol/packages folder.
Kind regards
Hi Michiel, Yes, I have copied it from that folder to Skyline DataMiner/ProtocolScripts/DllImport folder with the same result.
Is necesary to restart the DMA after that?
Hi Manuel, I don’t think restarting the DMA is necessary. Restarting the element should do the trick if I’m not mistaken.
Kind regards
Hi Michiel, I finally fixed it by copying the dlls directly from the global packages folder due to the folder structure not being the same as in the solution package folder as explained in this post:
https://community.dataminer.services/question/dis-dll-import-paths-with-nuget-packages/?hilite=nuget
It could be interesting to add this issue to the nuget integration guide:
https://docs.dataminer.services/develop/TOOLS/TOONuGet/Consuming_NuGet.html
Thanks for the support!
Hi Michiel, thanks for your reply.
The problem here is that DIS doesn’t seem to build the DLL folders, so I can’t copy them to the Skyline DataMiner/ProtocolScripts/DllImport folder. The MyProtocol/Dlls folder is empty.