Troubleshooting
Building & deploying
Troubleshooting
Build and deploy problems that stop a plugin from loading, each with its cause and fix.
Read the plugin log first
The platform writes plugin activity to the Control Center Log tab under the
Plugins category: a summary line at startup (how many plugins loaded and what they
registered), a line for every reload with the number of types it registered, and a line for every load
or registration error, naming the DLL or type. Check it before anything else.
Skipped types do not produce errors. A type that fails a discovery rule (not public, no
suitable constructor, no recognised contract) is skipped without an error line: the DLL loads, but
the type is not cataloged, so the log shows fewer types than you expected. Load errors (a malformed
DLL, a missing dependency) do produce error lines.
Common symptoms & fixes
| Symptom | Likely cause & fix |
|---|---|
| Plugin does not appear, no error in the log | The type failed a discovery rule. It must be public, concrete (not
abstract, an interface or an open generic), have a constructor the platform can call,
and implement a recognised contract. See Discovery
rules. |
Plugin builds but no Plugins log line mentions it |
The DLL is not in the folder the platform reads. Check the deploy path in the build log against
Documents\SabrTrader\Plugins, and check that SabrTraderPluginsFolder is not
set to another folder in your project. A DLL in a subfolder, or one
named like a built-in plugin assembly, is not loaded. See
Where to deploy. |
| An indicator is listed, but a strategy or drawing tool from the same DLL is not | Strategies and drawing tools need a real public parameterless constructor; a constructor whose parameters all have defaults does not count for them. Strategies must also be top-level (not nested) classes. |
| "Could not load file or assembly <X>" | A third-party dependency is missing. Copy that DLL into the plugin folder next to your plugin. See Third-party dependencies. |
A reference to a SabrTrader.* assembly fails to load |
Your plugin was compiled against a newer SDK than the platform ships. Build against the SDK version that matches your platform release, or update the platform. |
MissingMethodException or TypeLoadException from an SDK type |
Your plugin was compiled against an SDK version whose API differs from the platform's. Rebuild against the matching SDK version. |
| Plugin fails to load with a framework error | Wrong target framework. Build for net10.0. |
| A rebuild does not take effect | Check the log for a reload line. If the reload failed, the previous build stays registered and the log names the error. A running strategy keeps its build until it stops, and a connected venue switches at its next connect. See The build and reload loop. |
| The log is full of lines about DLLs that are not plugins | You copied the whole bin folder. Keep only your DLL, its PDB and the third-party
libraries the platform does not ship. |
Quick checklist
When a plugin does not show up, go through these in order:
- Is the type
publicand concrete, with a constructor the platform can call, and does it implement a recognised contract? - Is your DLL directly in
Documents\SabrTrader\Plugins(the real Documents folder, not a subfolder), with a file name of its own? - Does the plugin target
net10.0and an SDK version that matches the platform? - Does the Control Center Log tab show a
Pluginsline for your DLL, and does it name an error?
Still stuck? The Troubleshooting & FAQ page covers
problems after loading: an indicator that renders nothing, a strategy that gets no callbacks, a venue
that is not listed, and more.