Manifest.json
Diese Datei ist die Hauptdatei eines jeden Framework Projektes beziehungsweise Paketes. Hier sind alle Komponenten und deren Abhängigkeiten dokumentiert.
Komponenten
Mögliche Komponenten sind:
Package: Dieser Eintrag referenziert ein bestimmtes NuGet-Paket als Abhängigkeit über seinen Namen innugetId. Wird beispielsweise ein TcHmiButton (ausBeckhoff.TwinCAT.HMI.Controls) im eigenen Paket genutzt, so mussBeckhoff.TwinCAT.HMI.Frameworknicht zusätzlich referenziert werden, da dies bereits das Controls-Paket übernimmt.Function: Dies registriert eine Funktion aus diesem Paket im System. Hierfür wird das Funktions-Verzeichnis (basePath) angegeben. Der Name der Beschreibungsdatei der Funktion wird alsdescriptionFileangegeben.Resource: Hierüber können zwei Arten von Ressourcen eingebunden werden, JavaScript-Dateien und CSS-Dateien. Hierbei wird bei der Einbettung die Reihenfolge beachtet. Eine CSS-Ressource, welche in der Manifest-Datei zwischen zwei Controls steht, wird also auch genau zwischen den CSS-Dateien dieser beiden Controls eingebunden.
Bei CSS Dateien kann zusätzlich (ab Version 1.12.752.0) noch ein Theme-Name angegeben werden. In diesem Falle wird die Datei nur eingebunden, wenn ein Theme mit dem entsprechenden Namen aktiv ist, ähnlich wie das bei Control-CSS-Dateien möglich ist.Control: Dies registriert ein Control aus diesem Paket im System. Hierfür wird das Control-Verzeichnis (basePath) angegeben. Der Name der Beschreibungsdatei des ControlsDescription.jsonsollte nicht verändert werden.
Toolbar Kategorie
Weiterhin können Sie hier über den Eintrag toolboxCategory festlegen, wo ein Control in der VisualStudio Toolbar erscheint.
Beckhoff.TwinCAT.HMI:200wird in der KategorieSystemhinterlegt.Beckhoff.TwinCAT.HMI:201wird in der KategorieBeckhoffhinterlegt.Beckhoff.TwinCAT.HMI:202wird in der Kategorie3rd partyhinterlegt.Beckhoff.TwinCAT.HMI:203wird in der KategorieLegacy (1.10)hinterlegt.- Eigene Einträge können Sie über
provideMetadata(auch für mehrere Sprachen in Visual Studio) erstellen. Siehe nachfolgendes Beispiel. - Ist keine Kategorie hier definiert, so wird der Name des Projektes selbst als Kategorie genutzt.
JavaScript Module Mapping
Werden innerhalb dieses Paketes JavaScript Module (ES Module) genutzt, so kann über den Eintrag esmoduleImports ein Importziel definiert werden.
"esmoduleImports": [
{
"imports": {
"marked": "Lib/marked.esm.js"
}
}
]Solch eine Definition kann auch für einen Unterordner unterschiedlich festgelegt werden.
"esmoduleImports": [
{
"imports": {
"marked": "Lib/marked.esm.js"
}
},
{
"moduleScope": "oldcontrolFolder",
"imports": {
"marked": "LibOld/marked.esm.js"
}
}
]Beispiel
{
"apiVersion": 1,
"modules": [
{
"type": "Package",
"nugetId": "Beckhoff.TwinCAT.HMI.Framework"
},
{
"type": "Function",
"basePath": "myFunction/",
"descriptionFile": "myFunction.function.json"
},
{
"type": "Resource",
"path": "customHelpers.js"
},
{
"type": "Control",
"basePath": "Control1/",
"descriptionFile": "Description.json",
"toolboxCategory": "MyIdentifier:200"
},
{
"type": "Resource",
"path": "PackageStyle.css"
},
{
"type": "Resource",
"path": "PackageBaseThemeStyle.css",
"theme": "Base",
},
{
"type": "Control",
"basePath": "Control2/",
"descriptionFile": "Description.json",
"toolboxCategory": "MyIdentifier:201"
}
],
"provideMetadata": {
"toolbox": {
"MyIdentifier": {
"200": "FrameworkPrj1",
"201": {
"default": "Bühnentechnik",
"de-DE": "Bühnentechnik",
"en-US": "Stagecraft",
"it-IT": "Scenotecnica",
"nl-NL": "Theatertechniek"
}
}
}
},
"$schema": ".hmiframework/Schema/Manifest.Schema.json"
}