{"id":"54316362-5734-4dc5-b1cf-76fda4afdac3","shortId":"x4Cppm","kind":"skill","title":"addin-operations","tagline":"TIA Portal Add-In development in Visual Studio Code: creating Add-In C# projects, adding Add-In templates, compiling and debugging Add-Ins, converting Add-Ins from older TIA Portal versions and configuring Add-In project parameters.","description":"# TIA Portal Add-In Development — Visual Studio Code\n\nSource: TIA Portal Add-In Development Tools Manual (11/2025)\n\n## Scope\n\nAdd-In development in VS Code using C# and the dotnet Add-In SDK.\nDo not mix with Python wrapper calls.\n\n---\n\n## Reference files\n\nLoad ONLY the reference file(s) relevant to the task. Do not load all files at once.\n\n| Reference file | Load when the task involves |\n|---|---|\n| `references/api-surface.md` | Choosing provider/add-in types; VCI or CAx workflow item types; workflow-to-assembly mapping |\n| `references/api-menus.md` | Building context menu structures; action items; submenus; selection handling |\n| `references/api-permissions.md` | Starting external processes; handling ProcessStartPermission |\n| `references/assembly-references.md` | Adding PLC software, block, or tag access to an Add-In csproj |\n| `references/attribute-helper.md` | Reading/writing engineering object attributes via `GetAttributeInfos` or `SetAttributes` |\n| `references/threading-and-callbacks.md` | Showing any WinForms UI from an Add-In; understanding status callback constraints |\n| `references/runtime-gotchas.md` | Assembly location resolution failures; NuGet/GAC errors; SplitContainer sizing crashes |\n| `references/skeleton.md` | Starting a new context-menu Add-In from scratch |\n\nFor tasks spanning multiple areas, load all relevant reference files before generating code.\n\n---\n\n## Execution pattern\n\n1. Pick the Add-In type → run `dotnet new <template>` (see template table below)\n2. Decide which TIA Portal objects the Add-In must access; if PLC/SW/HW → load `references/assembly-references.md`\n3. Implement `BuildContextMenuItems` — status callback returns `MenuStatus.Enabled`, guard logic goes in the action callback\n4. For any UI: follow the two-phase collect/show pattern → load `references/threading-and-callbacks.md`\n5. Before distributing: compile with \"Run build task\", debug with F5\n\n---\n\n## Task: Create new Add-In C# project\n\n### Procedure\n\n1. Open the Windows command prompt with administrator privileges.\n2. (Optional) Navigate to the desired project location, or use the `--output` parameter.\n3. Run:\n\n   ```\n   dotnet new addin-project [options]\n   ```\n\n### Essential parameters\n\n| Parameter | Long form | Short | Description |\n|-----------|-----------|-------|-------------|\n| output | --output | -o | Project folder. If not specified, project is created in the current directory. |\n| name | --name | -n | Project name. If not specified, the parent directory name is used. |\n| Namespace | --Namespace | -N | C# namespace. Default is derived from output directory or project name. |\n| TIAAccess | --TIAAccess | -TI | Authorization level: `ReadWrite` (default) or `ReadOnly`. |\n\n### Example\n\n```\ndotnet new addin-project -o C:\\MyAddIns\\MyFirstAddIn -n MyAddinProject -N MyAddinNamespace -TI ReadWrite\n```\n\n### Additional parameters\n\nThe following parameters can also be set at creation time but are **editable later in `Config.xml`** inside the project directory: Author, Description, AddInVersion, ProductName, ProductId, ProductVersion, UnrestrictedAccess, JustificationComment.\n\n### Result\n\nA new project is created containing the framework for an empty Add-In that can be built.\nThe project directory contains `Config.xml` for changing parameters after creation.\n\n---\n\n## Task: Add an Add-In template to existing project\n\n### Procedure\n\n1. Open the Windows command prompt with administrator privileges.\n2. Navigate to the project directory (or use `--output`).\n3. Run:\n\n   ```\n   dotnet new <Add-In-Type> [-o <output dir>] [-n <name>] [-N <namespace>]\n   ```\n\nReplace `<Add-In-Type>` with the short name from the table below.\n\n### Available templates\n\n**addin-project-tree-menu** — TIA Portal Project-Tree Context Menu Add-In\nAdds custom entries to the right-click menu of the project tree.\nUse cases: automating operations on blocks, tag tables, or devices; batch-exporting selected items; running custom validations on project tree objects.\n\n**addin-project-library-tree-menu** — TIA Portal Project-Library-Tree Context Menu Add-In\nAdds custom entries to the right-click menu of the project library tree.\nUse cases: custom library management operations; automated copying or versioning of library types; bulk operations on library elements.\n\n**addin-global-library-tree-menu** — TIA Portal Global-Library-Tree Context Menu Add-In\nAdds custom entries to the right-click menu of a global library.\nUse cases: synchronizing global library content with external systems; enforcing naming conventions across library elements; automated library maintenance tasks.\n\n**addin-devices-and-networks-menu** — TIA Portal Devices and Networks Context Menu Add-In\nAdds custom entries to the right-click menu of the hardware and network editor.\nUse cases: automated network configuration; bulk device parameter changes; generating device reports or hardware bills of materials.\n\n**addin-vci-editor** — TIA Portal VCI Editor Add-In\nAdds entries to the workspace area of the Version Control Interface workspace editor. These entries are always visible and should contain general-purpose functions. For repository-specific operations, use the VCI Import or VCI Export templates instead.\nUse cases: general version control utilities; workspace status overview; custom reporting on versioned items.\n\n**addin-vci-import-workflow** — TIA Portal VCI Import Add-In\nExtends the VCI import workflow with custom shortcut menu entries and enhanced drag-and-drop/synchronization from the workspace area into the project. Can only be used if selected as the import Add-In in the Add-In configuration view.\nUse cases: custom import validation; automated conflict resolution during import; post-import processing of files and directories.\n\n**addin-vci-export-workflow** — TIA Portal VCI Repository Export Add-In\nExtends the VCI export workflow with custom shortcut menu entries and enhanced drag-and-drop/synchronization from the project into the workspace area. Can only be used if selected as the Version Control Add-In in the workspace editor.\nUse cases: custom export rules and filtering; automated commit operations; pre-export validation and packaging.\n\n**addin-cax-export-import-workflow** — TIA Portal CAX Export Import Add-In\nAdds custom functions to be executed after a CAx export or import operation in TIA Portal. Enables further interaction with the TIA Portal based on exported or imported data, or with external applications. Export operations are always write-protected. Must be selected as the default Add-In for the \"CAx data exchange\" workflow in the Add-In configuration.\nUse cases: post-export data transformation for external CAx tools; automated validation of imported CAx data; synchronization with external engineering databases.\n\n### Note — Icons and multilingual texts\n\n- You can add icons to the context menu entries for Add-Ins.\n- Add-Ins can detect the current TIA Portal language, allowing you to display context menu texts, workflow names, and feedback messages in the matching language.\n\nExamples for icons and multilingual texts can be found in the corresponding templates.\n\n### Result\n\nAll classes and methods needed for programming the selected Add-In type are inserted into the project. You can directly implement the desired functionalities.\n\n---\n\n## Task: Compile Add-Ins\n\n### Procedure\n\n1. In VS Code, open Terminal → \"Run build task\".\n2. The program compiles. Status messages appear at the bottom of the terminal.\n\n### Result\n\nIf compilation succeeds, the `.addin` file is created in the `bin` directory of the project.\n\n> **Important:** Test your Add-Ins thoroughly before distributing them. You can use the mass rollout mechanism of the TIA Portal to distribute Add-Ins in your organization. Additional information is available in the TIA Portal information system.\n\n---\n\n## Task: Debug Add-Ins\n\n### Procedure\n\n1. Set breakpoints anywhere in your program code.\n2. From the Run menu, select \"Start debugging\" (or press F5).\n   TIA Portal starts automatically.\n3. In TIA Portal, confirm the \"Debug Add-In\" message with \"Yes\" or \"Yes, all\".\n\n### Result\n\nYou can now step through your program code using the debug functions of Visual Studio Code.\nThe Add-In remains activated until you close the TIA Portal.\n\n> **Note:** It is not necessary to copy the `.addin` file to a specific Add-In folder for debugging.\n\n---\n\n## Task: Convert Add-Ins from older TIA Portal versions\n\n### Context\n\nThe Add-In assembly has been split into several segmented assemblies.\nAutomatic conversion of older Add-Ins is therefore not possible — manual adjustments are required.\n\n### Procedure\n\n1. **Update assembly references:**\n   Remove the old reference to `Siemens.Engineering.AddIn.dll` and add references to the new segmented assemblies.\n\n2. **Update API implementations:**\n   If your Add-In uses any of the following APIs, update their implementations according to the current procedure:\n   - Feedback API\n   - Progress API\n   - MessageBox API","tags":["addin","operations","totally","integrated","claude","czarnak","agent-skills","claude-code","claude-code-plugin","claude-skills","codex","codex-cli"],"capabilities":["skill","source-czarnak","skill-addin-operations","topic-agent-skills","topic-claude-code","topic-claude-code-plugin","topic-claude-skills","topic-codex","topic-codex-cli","topic-codex-plugin","topic-gemini","topic-gemini-cli","topic-gemini-cli-extension","topic-gemini-extension","topic-mcp"],"categories":["totally-integrated-claude"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Czarnak/totally-integrated-claude/addin-operations","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Czarnak/totally-integrated-claude","source_repo":"https://github.com/Czarnak/totally-integrated-claude","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 9 github stars · SKILL.md body (8,976 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:08:29.517Z","embedding":null,"createdAt":"2026-05-18T13:13:57.378Z","updatedAt":"2026-05-18T19:08:29.517Z","lastSeenAt":"2026-05-18T19:08:29.517Z","tsv":"'/synchronization':797,871 '1':221,298,473,1098,1181,1307 '11/2025':65 '2':235,307,482,1107,1189,1325 '3':251,320,491,1204 '4':265 '5':278 'access':154,246 'accord':1343 'across':650 'action':136,263 'activ':1242 'ad':20,148 'add':7,16,22,29,33,43,50,60,68,80,158,178,202,225,243,293,446,463,466,522,524,574,576,623,625,671,673,714,716,779,815,820,853,890,924,926,973,984,1016,1025,1028,1077,1095,1140,1160,1178,1212,1239,1263,1271,1281,1296,1318,1332 'add-in':6,15,21,28,32,42,49,59,67,79,157,177,201,224,242,292,445,465,521,573,622,670,713,778,814,819,852,889,923,972,983,1024,1027,1076,1094,1139,1159,1177,1211,1238,1262,1270,1280,1295,1331 'addin':2,325,391,510,560,609,658,706,770,843,913,1125,1257 'addin-cax-export-import-workflow':912 'addin-devices-and-networks-menu':657 'addin-global-library-tree-menu':608 'addin-oper':1 'addin-project':324,390 'addin-project-library-tree-menu':559 'addin-project-tree-menu':509 'addin-vci-editor':705 'addin-vci-export-workflow':842 'addin-vci-import-workflow':769 'addinvers':427 'addit':403,1165 'adjust':1303 'administr':305,480 'allow':1037 'also':409 'alway':732,962 'anywher':1184 'api':1327,1339,1349,1351,1353 'appear':1113 'applic':958 'area':210,721,801,878 'assembl':129,185,1283,1290,1309,1324 'attribut':165 'author':381,425 'autom':539,596,653,690,829,903,998 'automat':1203,1291 'avail':507,1168 'base':949 'batch':548 'batch-export':547 'bill':702 'bin':1131 'block':151,542 'bottom':1116 'breakpoint':1183 'build':132,284,1105 'buildcontextmenuitem':253 'built':451 'bulk':603,693 'c':18,75,295,367,394 'call':89 'callback':182,255,264 'case':538,591,639,689,756,825,897,988 'cax':122,914,920,934,977,996,1002 'chang':458,696 'choos':117 'class':1068 'click':531,583,632,680 'close':1245 'code':13,55,73,218,1101,1188,1228,1236 'collect/show':274 'command':302,477 'commit':904 'compil':25,281,1093,1110,1122 'config.xml':420,456 'configur':41,692,822,986 'confirm':1208 'conflict':830 'constraint':183 'contain':439,455,736 'content':643 'context':133,199,519,571,620,668,1020,1041,1278 'context-menu':198 'control':725,759,888 'convent':649 'convers':1292 'convert':31,1269 'copi':597,1255 'correspond':1064 'crash':193 'creat':14,290,345,438,1128 'creation':413,461 'csproj':160 'current':348,1033,1346 'custom':525,553,577,592,626,674,764,787,826,861,898,927 'data':954,978,992,1003 'databas':1008 'debug':27,286,1176,1196,1210,1231,1267 'decid':236 'default':369,384,971 'deriv':371 'descript':334,426 'desir':312,1090 'detect':1031 'develop':9,52,62,70 'devic':546,659,665,694,698 'direct':1087 'directori':349,360,374,424,454,487,841,1132 'display':1040 'distribut':280,1144,1158 'dotnet':78,229,322,388,493 'drag':794,868 'drag-and-drop':793,867 'drop':796,870 'edit':417 'editor':687,708,712,728,895 'element':607,652 'empti':444 'enabl':942 'enforc':647 'engin':163,1007 'enhanc':792,866 'entri':526,578,627,675,717,730,790,864,1022 'error':190 'essenti':328 'exampl':387,1053 'exchang':979 'execut':219,931 'exist':470 'export':549,752,845,851,858,899,908,915,921,935,951,959,991 'extend':781,855 'extern':143,645,957,995,1006 'f5':288,1199 'failur':188 'feedback':1047,1348 'file':91,96,106,110,215,839,1126,1258 'filter':902 'folder':339,1265 'follow':269,406,1338 'form':332 'found':1061 'framework':441 'function':740,928,1091,1232 'general':738,757 'general-purpos':737 'generat':217,697 'getattributeinfo':167 'global':610,617,636,641 'global-library-tre':616 'goe':260 'guard':258 'handl':140,145 'hardwar':684,701 'icon':1010,1017,1055 'implement':252,1088,1328,1342 'import':749,772,777,784,813,827,833,836,916,922,937,953,1001,1136 'in':30,34,1026,1029,1096,1141,1161,1179,1272,1297 'inform':1166,1173 'insert':1081 'insid':421 'instead':754 'interact':944 'interfac':726 'involv':115 'item':124,137,551,768 'justificationcom':432 'languag':1036,1052 'later':418 'level':382 'librari':562,569,588,593,601,606,611,618,637,642,651,654 'load':92,104,111,211,249,276 'locat':186,314 'logic':259 'long':331 'mainten':655 'manag':594 'manual':64,1302 'map':130 'mass':1150 'match':1051 'materi':704 'mechan':1152 'menu':134,200,513,520,532,564,572,584,613,621,633,662,669,681,789,863,1021,1042,1193 'menustatus.enabled':257 'messag':1048,1112,1214 'messagebox':1352 'method':1070 'mix':85 'multilingu':1012,1057 'multipl':209 'must':245,966 'myaddin':395 'myaddinnamespac':400 'myaddinproject':398 'myfirstaddin':396 'n':352,366,397,399,496,497 'name':350,351,354,361,377,502,648,1045 'namespac':364,365,368 'navig':309,483 'necessari':1253 'need':1071 'network':661,667,686,691 'new':197,230,291,323,389,435,494,1322 'note':1009,1249 'nuget/gac':189 'o':337,393,495 'object':164,240,558 'old':1313 'older':36,1274,1294 'open':299,474,1102 'oper':3,540,595,604,745,905,938,960 'option':308,327 'organ':1164 'output':318,335,336,373,490 'overview':763 'packag':911 'paramet':46,319,329,330,404,407,459,695 'parent':359 'pattern':220,275 'phase':273 'pick':222 'plc':149 'plc/sw/hw':248 'portal':5,38,48,58,239,515,566,615,664,710,775,848,919,941,948,1035,1156,1172,1201,1207,1248,1276 'possibl':1301 'post':835,990 'post-export':989 'post-import':834 'pre':907 'pre-export':906 'press':1198 'privileg':306,481 'procedur':297,472,1097,1180,1306,1347 'process':144,837 'processstartpermiss':146 'productid':429 'productnam':428 'productvers':430 'program':1073,1109,1187,1227 'progress':1350 'project':19,45,296,313,326,338,343,353,376,392,423,436,453,471,486,511,517,535,556,561,568,587,804,874,1084,1135 'project-library-tre':567 'project-tre':516 'prompt':303,478 'protect':965 'provider/add-in':118 'purpos':739 'python':87 'reading/writing':162 'readon':386 'readwrit':383,402 'refer':90,95,109,214,1310,1314,1319 'references/api-menus.md':131 'references/api-permissions.md':141 'references/api-surface.md':116 'references/assembly-references.md':147,250 'references/attribute-helper.md':161 'references/runtime-gotchas.md':184 'references/skeleton.md':194 'references/threading-and-callbacks.md':170,277 'relev':98,213 'remain':1241 'remov':1311 'replac':498 'report':699,765 'repositori':743,850 'repository-specif':742 'requir':1305 'resolut':187,831 'result':433,1066,1120,1220 'return':256 'right':530,582,631,679 'right-click':529,581,630,678 'rollout':1151 'rule':900 'run':228,283,321,492,552,1104,1192 'scope':66 'scratch':205 'sdk':82 'see':231 'segment':1289,1323 'select':139,550,810,884,968,1075,1194 'set':411,1182 'setattribut':169 'sever':1288 'short':333,501 'shortcut':788,862 'show':171 'siemens.engineering.addin.dll':1316 'size':192 'skill' 'skill-addin-operations' 'softwar':150 'sourc':56 'source-czarnak' 'span':208 'specif':744,1261 'specifi':342,357 'split':1286 'splitcontain':191 'start':142,195,1195,1202 'status':181,254,762,1111 'step':1224 'structur':135 'studio':12,54,1235 'submenus':138 'succeed':1123 'synchron':640,1004 'system':646,1174 'tabl':233,505,544 'tag':153,543 'task':101,114,207,285,289,462,656,1092,1106,1175,1268 'templat':24,232,468,508,753,1065 'termin':1103,1119 'test':1137 'text':1013,1043,1058 'therefor':1299 'thorough':1142 'ti':380,401 'tia':4,37,47,57,238,514,565,614,663,709,774,847,918,940,947,1034,1155,1171,1200,1206,1247,1275 'tiaaccess':378,379 'time':414 'tool':63,997 'topic-agent-skills' 'topic-claude-code' 'topic-claude-code-plugin' 'topic-claude-skills' 'topic-codex' 'topic-codex-cli' 'topic-codex-plugin' 'topic-gemini' 'topic-gemini-cli' 'topic-gemini-cli-extension' 'topic-gemini-extension' 'topic-mcp' 'transform':993 'tree':512,518,536,557,563,570,589,612,619 'two':272 'two-phas':271 'type':119,125,227,602,1079 'ui':174,268 'understand':180 'unrestrictedaccess':431 'updat':1308,1326,1340 'use':74,316,363,489,537,590,638,688,746,755,808,824,882,896,987,1148,1229,1334 'util':760 'valid':554,828,909,999 'vci':120,707,711,748,751,771,776,783,844,849,857 'version':39,599,724,758,767,887,1277 'via':166 'view':823 'visibl':733 'visual':11,53,1234 'vs':72,1100 'window':301,476 'winform':173 'workflow':123,127,773,785,846,859,917,980,1044 'workflow-to-assembl':126 'workspac':720,727,761,800,877,894 'wrapper':88 'write':964 'write-protect':963 'yes':1216,1218","prices":[{"id":"87e3f637-1756-45a1-aadf-ae09a527cdf5","listingId":"54316362-5734-4dc5-b1cf-76fda4afdac3","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Czarnak","category":"totally-integrated-claude","install_from":"skills.sh"},"createdAt":"2026-05-18T13:13:57.378Z"}],"sources":[{"listingId":"54316362-5734-4dc5-b1cf-76fda4afdac3","source":"github","sourceId":"Czarnak/totally-integrated-claude/addin-operations","sourceUrl":"https://github.com/Czarnak/totally-integrated-claude/tree/main/skills/addin-operations","isPrimary":false,"firstSeenAt":"2026-05-18T13:13:57.378Z","lastSeenAt":"2026-05-18T19:08:29.517Z"}],"details":{"listingId":"54316362-5734-4dc5-b1cf-76fda4afdac3","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Czarnak","slug":"addin-operations","github":{"repo":"Czarnak/totally-integrated-claude","stars":9,"topics":["agent-skills","claude-code","claude-code-plugin","claude-skills","codex","codex-cli","codex-plugin","gemini","gemini-cli","gemini-cli-extension","gemini-extension","mcp","mcp-server","siemens","skills","tia-openness","tia-portal"],"license":"mit","html_url":"https://github.com/Czarnak/totally-integrated-claude","pushed_at":"2026-05-08T03:14:15Z","description":"A Claude Code plugin for Siemens TIA Portal engineering automation.","skill_md_sha":"635506f7af9650909ace17ccbae99b65108bb654","skill_md_path":"skills/addin-operations/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Czarnak/totally-integrated-claude/tree/main/skills/addin-operations"},"layout":"multi","source":"github","category":"totally-integrated-claude","frontmatter":{"name":"addin-operations","description":"TIA Portal Add-In development in Visual Studio Code: creating Add-In C# projects, adding Add-In templates, compiling and debugging Add-Ins, converting Add-Ins from older TIA Portal versions and configuring Add-In project parameters."},"skills_sh_url":"https://skills.sh/Czarnak/totally-integrated-claude/addin-operations"},"updatedAt":"2026-05-18T19:08:29.517Z"}}