├── .gitattributes
├── .github
└── workflows
│ ├── comment-cherry-pick.yml
│ ├── pull.yml
│ └── update-downloads.yml
├── .gitignore
├── .jenkins
├── deploy.groovy
├── release.groovy
└── staging.groovy
├── CONTRIBUTING.md
├── DISCLAIMER
├── LICENSE
├── PRIVACY_POLICY.md
├── README.md
├── SharedFiles
├── Commands.vsct
└── Twinpack.png
├── THIRD_PARTY_LICENSES.txt
├── Twinpack.15
├── Properties
│ └── AssemblyInfo.cs
├── Twinpack.15.csproj
└── Twinpack.15.snk
├── Twinpack.17
├── Properties
│ └── AssemblyInfo.cs
├── Twinpack.17.csproj
└── Twinpack.17.snk
├── Twinpack.Net
└── Twinpack.Net.csproj
├── Twinpack.NodeJs
├── package.json
└── src
│ ├── example.js
│ └── twinpack.js
├── Twinpack.iss
├── Twinpack.sln
├── TwinpackCli.Net
├── Commands
│ ├── AbstractCommand.cs
│ ├── AddCommand.cs
│ ├── ConfigCommand.cs
│ ├── DownloadCommand.cs
│ ├── ListCommand.cs
│ ├── PullCommand.cs
│ ├── PushCommand.cs
│ ├── RemoveCommand.cs
│ ├── RestoreCommand.cs
│ ├── SearchCommand.cs
│ ├── SetVersionCommand.cs
│ └── UpdateCommand.cs
├── Program.cs
├── Properties
│ └── launchSettings.json
└── TwinpackCli.Net.csproj
├── TwinpackCli.Windows
├── App.config
├── Commands
│ ├── AbstractCommand.cs
│ ├── AddCommand.cs
│ ├── ConfigCommand.cs
│ ├── DownloadCommand.cs
│ ├── ListCommand.cs
│ ├── PullCommand.cs
│ ├── PushCommand.cs
│ ├── RemoveCommand.cs
│ ├── RestoreCommand.cs
│ ├── SearchCommand.cs
│ ├── SetVersionCommand.cs
│ └── UpdateCommand.cs
├── Program.cs
├── Properties
│ └── AssemblyInfo.cs
└── TwinpackCli.Windows.csproj
├── TwinpackCore
├── Commands
│ ├── AbstractCommand.cs
│ ├── AddCommand.cs
│ ├── ConfigCommand.cs
│ ├── DownloadCommand.cs
│ ├── ListCommand.cs
│ ├── PullCommand.cs
│ ├── PushCommand.cs
│ ├── RemoveCommand.cs
│ ├── RestoreCommand.cs
│ ├── SearchCommand.cs
│ ├── SetVersionCommand.cs
│ └── UpdateCommand.cs
├── Configuration
│ ├── Config.cs
│ ├── ConfigFactory.cs
│ └── ConfigPlcFactory.cs
├── Core
│ ├── AutomationInterface.cs
│ ├── AutomationInterface4024.cs
│ ├── AutomationInterfaceHeadless.cs
│ ├── CancelableTask.cs
│ ├── IAutomationInterface.cs
│ ├── MessageFilter.cs
│ ├── PackageServerCollection.cs
│ ├── SynchronizationContextAwaiter.cs
│ ├── TwinpackService.cs
│ └── VisualStudio.cs
├── DirectoryExtension.cs
├── Exceptions
│ └── Exceptions.cs
├── LibraryReader.cs
├── Models
│ ├── PackageItem.cs
│ ├── Plc.cs
│ ├── PlcLibrary.cs
│ ├── PlcVersion.cs
│ ├── Project.cs
│ ├── Solution.cs
│ └── SourceRepositories.cs
├── Protocol
│ ├── Api.cs
│ ├── Authentication.cs
│ ├── IPackageServer.cs
│ ├── Native
│ │ ├── CachedHttpClient.cs
│ │ └── TwinpackServer.cs
│ ├── Nuget
│ │ ├── BeckhoffServer.cs
│ │ └── NugetServer.cs
│ ├── PackagingServer.cs
│ ├── PackagingServerFactory.cs
│ └── PackagingServerRegistry.cs
├── TwinpackCore.projitems
├── TwinpackCore.shproj
└── app.config
├── TwinpackRegistry
├── App.config
├── Commands
│ ├── Command.cs
│ ├── DumpCommand.cs
│ ├── PullCommand.cs
│ └── UpdateDownloads.cs
├── IconUtils.cs
├── NLog.dll.nlog
├── Program.cs
├── Properties
│ └── AssemblyInfo.cs
├── TwinpackRegistry.cs
├── TwinpackRegistry.csproj
└── packages.config
├── TwinpackTests
├── AddPlcLibraryOptionsTest.cs
├── ConfigFactoryTest.cs
├── LibraryReaderTest.cs
├── PackageServerCollectionTest.cs
├── Properties
│ └── AssemblyInfo.cs
├── SystemTest.cs
├── TwinpackServiceTest.cs
├── TwinpackTests.csproj
├── assets
│ ├── Flat.libcat.xml
│ ├── LibCat1_All_selected.library
│ ├── LibCat4P_1_selected.library
│ ├── LibCat4_All_selected.library
│ ├── LibCat4_MyParent_selected.library
│ ├── TestSolution
│ │ ├── .Zeugwerk
│ │ │ └── libraries
│ │ │ │ └── TC3.1
│ │ │ │ ├── PlcLibrary1_1.2.3.3.library
│ │ │ │ └── PlcLibrary1_1.2.3.4.library
│ │ ├── TestLibraryProject
│ │ │ ├── TestLibraryProject.tsproj
│ │ │ └── _Boot
│ │ │ │ └── TargetDescription.xml
│ │ ├── TestProject
│ │ │ ├── Plc1
│ │ │ │ ├── POUs
│ │ │ │ │ └── MAIN.TcPOU
│ │ │ │ ├── Plc1.plcproj
│ │ │ │ ├── PlcTask.TcTTO
│ │ │ │ └── _Libraries
│ │ │ │ │ └── beckhoff automation gmbh
│ │ │ │ │ ├── tc2_standard
│ │ │ │ │ └── 3.3.3.0
│ │ │ │ │ │ └── tc2_standard.compiled-library
│ │ │ │ │ ├── tc2_system
│ │ │ │ │ └── 3.6.2.0
│ │ │ │ │ │ └── tc2_system.compiled-library
│ │ │ │ │ └── tc3_module
│ │ │ │ │ └── 3.3.23.0
│ │ │ │ │ └── tc3_module.compiled-library
│ │ │ ├── TestProject.tsproj
│ │ │ └── _Boot
│ │ │ │ └── TargetDescription.xml
│ │ ├── TestProject2
│ │ │ ├── PlcLibrary1
│ │ │ │ ├── POUs
│ │ │ │ │ └── MAIN.TcPOU
│ │ │ │ ├── PlcLibrary1.plcproj
│ │ │ │ └── _Libraries
│ │ │ │ │ └── beckhoff automation gmbh
│ │ │ │ │ ├── tc2_standard
│ │ │ │ │ └── 3.3.3.0
│ │ │ │ │ │ └── tc2_standard.compiled-library
│ │ │ │ │ ├── tc2_system
│ │ │ │ │ └── 3.6.2.0
│ │ │ │ │ │ └── tc2_system.compiled-library
│ │ │ │ │ └── tc3_module
│ │ │ │ │ └── 3.3.23.0
│ │ │ │ │ └── tc3_module.compiled-library
│ │ │ └── TestProject2.tspproj
│ │ └── TestSolution.sln
│ ├── Untitled1_4024_35_minimal_infos_123.library
│ ├── Untitled1_4024_35_minimal_infos_1234.library
│ ├── Untitled1_4024_35_minimal_infos_123_n.library
│ ├── Untitled1_4024_35_minimal_infos_123_np.library
│ ├── Untitled1_4024_35_minimal_infos_123_npa.library
│ ├── Untitled1_4024_35_minimal_infos_123_npad.library
│ ├── Untitled1_4024_35_minimal_infos_123_rnpad.library
│ ├── Untitled1_4024_53_minimal_infos_12.library
│ ├── Untitled1_4024_53_minimal_infos_123.library
│ ├── Untitled1_4024_53_minimal_infos_1234.library
│ ├── Untitled1_4026_00_minimal_infos_123.library
│ ├── Untitled1_libcat_child.library
│ ├── Untitled1_libcat_child2.library
│ ├── Untitled1_libcat_onlychild_selected.library
│ ├── Untitled2.libcat.xml
│ ├── Untitled2_libcat.library
│ ├── Untitled2_libcat_1234.library
│ ├── Untitled2_libcat_sub.library
│ ├── Untitled2_minimal_infos_libcat_1234.library
│ ├── Untitled2_minimal_infos_libcat_mine_1234.library
│ ├── Untitled2_minimal_infos_libcat_mine_theirs_1234.library
│ └── Untitled2_minimal_infos_libcat_mine_theirs_yours_1234.library
└── mocks
│ └── PackageServerMock.cs
├── TwinpackVsix.15
├── Properties
│ └── AssemblyInfo.cs
├── TwinpackVsix.15.csproj
├── packages.config
└── source.extension.vsixmanifest
├── TwinpackVsix.17
├── Properties
│ └── AssemblyInfo.cs
├── TwinpackVsix.17.csproj
└── source.extension.vsixmanifest
├── TwinpackVsixShared
├── Commands
│ ├── CatalogCommand.cs
│ ├── Command.cs
│ ├── ICommand.cs
│ ├── ModifyCommand.cs
│ ├── PublishCommand.cs
│ └── TwinpackMenuCommand.cs
├── Dialogs
│ ├── CatalogWindow.xaml
│ ├── CatalogWindow.xaml.cs
│ ├── Converters
│ │ ├── BooleanToBorderThicknessConverter.cs
│ │ ├── BooleanToInverseBooleanConverter.cs
│ │ ├── BooleanToVisibilityConverter.cs
│ │ ├── CatalogIconUrlVisibilityConverter.cs
│ │ ├── CatalogIconVisibilityConverter.cs
│ │ ├── CatalogNoIconVisibilityConverter.cs
│ │ ├── IntToVisibilityConverter.cs
│ │ ├── NullToVisibilityConverter.cs
│ │ ├── PackageVersionToBooleanConverter.cs
│ │ ├── UrlToImageConverter.cs
│ │ ├── VersionToStringConverter.cs
│ │ └── VisibilityToInverseVisibilityConverter.cs
│ ├── InputDialog.xaml
│ ├── InputDialog.xaml.cs
│ ├── LicenseWindow.xaml
│ ├── LicenseWindow.xaml.cs
│ ├── PackageVersionWindow.xaml
│ ├── PackageVersionWindow.xaml.cs
│ ├── PackagingServerDialog.cs
│ └── PackagingServerDialog.xaml
├── IconCache.cs
├── Logger
│ └── VsOutputWindowTarget.cs
├── PackagingServer.cs
├── Panels
│ └── CatalogPane.cs
├── TwinpackPackage.cs
├── TwinpackVsixShared.projitems
├── TwinpackVsixShared.shproj
├── VsixManifest.cs
└── app.config
├── Zeugwerk.bmp
├── Zeugwerk.ico
├── documentation
├── configuration.md
├── library_reader.md
└── twinpack-server.md
├── images
├── twinpack_catalog.png
├── twinpack_contextmenu.png
├── twinpack_contextmenu2.png
├── twinpack_package_servers.png
└── twinpack_publish.png
└── references.json
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 | *.tt text=crlf
6 |
7 | ###############################################################################
8 | # Set default behavior for command prompt diff.
9 | #
10 | # This is need for earlier builds of msysgit that does not have it on by
11 | # default for csharp files.
12 | # Note: This is only used by command line
13 | ###############################################################################
14 | #*.cs diff=csharp
15 |
16 | ###############################################################################
17 | # Set the merge driver for project and solution files
18 | #
19 | # Merging from the command prompt will add diff markers to the files if there
20 | # are conflicts (Merging from VS is not affected by the settings below, in VS
21 | # the diff markers are never inserted). Diff markers may cause the following
22 | # file extensions to fail to load in VS. An alternative would be to treat
23 | # these files as binary and thus will always conflict and require user
24 | # intervention with every merge. To do so, just uncomment the entries below
25 | ###############################################################################
26 | #*.sln merge=binary
27 | #*.csproj merge=binary
28 | #*.vbproj merge=binary
29 | #*.vcxproj merge=binary
30 | #*.vcproj merge=binary
31 | #*.dbproj merge=binary
32 | #*.fsproj merge=binary
33 | #*.lsproj merge=binary
34 | #*.wixproj merge=binary
35 | #*.modelproj merge=binary
36 | #*.sqlproj merge=binary
37 | #*.wwaproj merge=binary
38 |
39 | ###############################################################################
40 | # behavior for image files
41 | #
42 | # image files are treated as binary by default.
43 | ###############################################################################
44 | #*.jpg binary
45 | #*.png binary
46 | #*.gif binary
47 |
48 | ###############################################################################
49 | # diff behavior for common document formats
50 | #
51 | # Convert binary document formats to text before diffing them. This feature
52 | # is only available from the command line. Turn it on by uncommenting the
53 | # entries below.
54 | ###############################################################################
55 | #*.doc diff=astextplain
56 | #*.DOC diff=astextplain
57 | #*.docx diff=astextplain
58 | #*.DOCX diff=astextplain
59 | #*.dot diff=astextplain
60 | #*.DOT diff=astextplain
61 | #*.pdf diff=astextplain
62 | #*.PDF diff=astextplain
63 | #*.rtf diff=astextplain
64 | #*.RTF diff=astextplain
65 |
--------------------------------------------------------------------------------
/.github/workflows/comment-cherry-pick.yml:
--------------------------------------------------------------------------------
1 | name: Cherry Pick On Comment
2 | on:
3 | issue_comment:
4 | types: [created]
5 | jobs:
6 | cherry-pick:
7 | name: Cherry Pick
8 | if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/cherry-pick')
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: Checkout the latest code
12 | uses: actions/checkout@v2
13 | with:
14 | token: ${{ secrets.GITHUB_TOKEN }}
15 | fetch-depth: 0 # otherwise, you will fail to push refs to dest repo
16 | - name: Automatic Cherry Pick
17 | uses: Zeugwerk/cherry-pick-action@v1
18 | env:
19 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
20 |
--------------------------------------------------------------------------------
/.github/workflows/pull.yml:
--------------------------------------------------------------------------------
1 | name: Pull
2 | on:
3 | schedule:
4 | - cron: "0 13 * * *"
5 | workflow_dispatch:
6 | jobs:
7 | Pull:
8 | runs-on: windows-latest
9 | steps:
10 | - run: |
11 | curl.exe -s -o twinpack-registry-latest.tar.gz https://zeugwerk.dev/Tools/twinpack-registry-latest.tar.gz
12 | tar -xf twinpack-registry-latest.tar.gz
13 | ./twinpack-registry.exe pull --username "${{ secrets.ACTIONS_ZGWK_USERNAME }}" --password "${{ secrets.ACTIONS_ZGWK_PASSWORD }}" --beckhoff-username "${{ secrets.ACTIONS_BECKHOFF_USERNAME }}" --beckhoff-password "${{ secrets.ACTIONS_BECKHOFF_PASSWORD }}" --token "${{ secrets.GH_TOKEN }}"
14 | shell: bash
15 |
--------------------------------------------------------------------------------
/.github/workflows/update-downloads.yml:
--------------------------------------------------------------------------------
1 | name: Update Downloads
2 | on:
3 | schedule:
4 | - cron: "0 1 * * 0"
5 | workflow_dispatch:
6 | jobs:
7 | update_downloads:
8 | runs-on: windows-latest
9 | steps:
10 | - run: |
11 | curl.exe -s -o twinpack-registry-latest.tar.gz https://zeugwerk.dev/Tools/twinpack-registry-latest.tar.gz
12 | tar -xf twinpack-registry-latest.tar.gz
13 | ./twinpack-registry.exe update-downloads --username "${{ secrets.ACTIONS_ZGWK_USERNAME }}" --password "${{ secrets.ACTIONS_ZGWK_PASSWORD }}" --token "${{ secrets.GH_TOKEN }}"
14 | shell: bash
15 |
--------------------------------------------------------------------------------
/.jenkins/deploy.groovy:
--------------------------------------------------------------------------------
1 | deploy()
2 |
--------------------------------------------------------------------------------
/.jenkins/release.groovy:
--------------------------------------------------------------------------------
1 | release()
2 |
--------------------------------------------------------------------------------
/.jenkins/staging.groovy:
--------------------------------------------------------------------------------
1 | staging()
2 |
--------------------------------------------------------------------------------
/DISCLAIMER:
--------------------------------------------------------------------------------
1 | Twinpack is a tool developed by Zeugwerk GmbH to facilitate the distribution and management of packages within the Twincat system.
2 | Zeugwerk GmbH acknowledge that Twinpack allows users to distribute their own packages through its platform.
3 | However, Zeugwerk GmbH explicitly states that it does not assume responsibility for any packages distributed by users through Twinpack.
4 |
5 | While Zeugwerk endeavors to provide a reliable and secure platform, Twinpack operates on a user-driven model where packages are
6 | created and shared by individual users. Zeugwerk GmbH does not perform extensive verification or validation of these packages,
7 | nor does it endorse or guarantee the quality, safety, or suitability of any package available through Twinpack.
8 |
9 | Users of Twinpack must exercise their own discretion and undertake thorough evaluation and testing of any packages they
10 | choose to download, install, or use. Zeugwerk GmbH shall not be held liable for any damages, losses, or adverse consequences
11 | arising from the use of packages distributed through Twinpack, including but not limited to software malfunctions,
12 | data corruption, system failures, or any other issues that may arise.
13 |
14 | By using the Twinpack and accessing packages distributed through it, users accept and agree to assume all risks associated
15 | with the use of such packages. It is strongly recommended that users employ appropriate security measures, including but not
16 | limited to utilizing antivirus software, regularly backing up data, and ensuring compatibility with their specific system requirements.
17 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Twinpack
2 |
3 | The Twinpack Package Manager is a powerful and user-friendly package management tool for TwinCAT libraries. It is designed to empower the TwinCAT community by enabling sharing and distribution of libraries. It acts as a versatile platform similarly to NuGet (but with a PLC touch), allowing users to efficiently manage and deploy their custom-built modules.
4 |
5 |
6 |

7 |
8 |
9 | Twinpack currently supports the following package sources
10 |
11 | 1. [Twinpack server](https://zeugwerk.dev/Zeugwerk_Framework/Documentation/snapshot/userguide/twinpack/twinpack_quickstart.html#using-a-package): Zeugwerk hosts open source libraries for and from everyone who is interested for free. Additionally this server type supports special features for Zeugwerk customers like feature branches.
12 | 1. [Nuget Server](https://zeugwerk.dev/Zeugwerk_Framework/Documentation/snapshot/userguide/twinpack/twinpack_nuget_package.html): Everyone can host his own NuGet server and create packages to consume them from the on premises server.
13 | 1. [Beckhoff Library Repository](https://zeugwerk.dev/Zeugwerk_Framework/Documentation/snapshot/userguide/twinpack/twinpack_beckhoffrepository.html): Since TwinCAT 4026, Beckhoff provides a public repository for their libraries. Twinpack can connect this repositories and integrate them seamlessly into the IDE.
14 |
15 | The full project documentation, including a quickstart guide for **Twinpack**, is available at the following at [Project Documentation](https://zeugwerk.dev/Zeugwerk_Framework/Documentation/snapshot/userguide/twinpack/twinpack_quickstart.html)
16 |
17 | Visit the link to get detailed instructions on setting up and using the project.
18 |
19 | ## Quicklinks
20 | - [Download latest Release](https://github.com/Zeugwerk/Twinpack/releases/latest)
21 | - [Twinpack-Registry](https://github.com/Zeugwerk/Twinpack-Registry) for automatic publishing of your library on Twinpack by "pulling" them from your GitHub releases
22 | - [Registration](https://zeugwerk.dev/wp-login.php?action=register), only needed to "push" package, i.e. if you want to publish packages manually or with CI
23 | - [Contact us](mailto:info@zeugwerk.at)
24 |
25 |
26 | ## Further information
27 |
28 | 🌟 Make sure to follow this project by leaving a star or simply follow us, to always get notified if a newer version of Twinpack is released.
29 |
30 | 📺 We have also created a short introductionary video on how to install and use Twinpack
31 | - [Share TwinCAT libraries with Twinpack](https://youtu.be/xvJG9BRN610?si=RMMIPcdtMAoHkyGW)
32 |
--------------------------------------------------------------------------------
/SharedFiles/Twinpack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zeugwerk/Twinpack/8a2224c24e4559735309f10f6a595ec9e9ff5a5a/SharedFiles/Twinpack.png
--------------------------------------------------------------------------------
/THIRD_PARTY_LICENSES.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zeugwerk/Twinpack/8a2224c24e4559735309f10f6a595ec9e9ff5a5a/THIRD_PARTY_LICENSES.txt
--------------------------------------------------------------------------------
/Twinpack.15/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die einer Assembly zugeordnet sind.
8 | [assembly: AssemblyTitle("Twinpack")]
9 | [assembly: AssemblyDescription("Package manager for TwinCAT libraries")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Zeugwerk GmbH")]
12 | [assembly: AssemblyProduct("Twinpack")]
13 | [assembly: AssemblyCopyright("Copyright © Zeugwerk GmbH 2023")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 | [assembly: AssemblyKeyFile("Twinpack.15.snk")]
17 |
18 | // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
19 | // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
20 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
21 | [assembly: ComVisible(false)]
22 |
23 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
24 | [assembly: Guid("3d96f91e-afe2-4b62-bbcb-b2546aaa932e")]
25 |
26 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
27 | //
28 | // Hauptversion
29 | // Nebenversion
30 | // Buildnummer
31 | // Revision
32 | //
33 | // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
34 | // indem Sie "*" wie unten gezeigt eingeben:
35 | // [assembly: AssemblyVersion("1.0.*")]
36 | //[assembly: AssemblyVersion("1.0.0.0")]
37 | //[assembly: AssemblyFileVersion("1.0.0.0")]
38 |
--------------------------------------------------------------------------------
/Twinpack.15/Twinpack.15.snk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zeugwerk/Twinpack/8a2224c24e4559735309f10f6a595ec9e9ff5a5a/Twinpack.15/Twinpack.15.snk
--------------------------------------------------------------------------------
/Twinpack.17/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die einer Assembly zugeordnet sind.
8 | [assembly: AssemblyTitle("Twinpack.17")]
9 | [assembly: AssemblyDescription("Package manager for TwinCAT libraries")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Zeugwerk GmbH")]
12 | [assembly: AssemblyProduct("Twinpack.17")]
13 | [assembly: AssemblyCopyright("Copyright © Zeugwerk GmbH 2023")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 | [assembly: AssemblyKeyFile("Twinpack.17.snk")]
17 |
18 | // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
19 | // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
20 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
21 | [assembly: ComVisible(false)]
22 |
23 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
24 | [assembly: Guid("9607f8b7-e76a-452c-87f0-e804bae4e92f")]
25 |
26 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
27 | //
28 | // Hauptversion
29 | // Nebenversion
30 | // Buildnummer
31 | // Revision
32 | //
33 | // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
34 | // indem Sie "*" wie unten gezeigt eingeben:
35 | // [assembly: AssemblyVersion("1.0.*")]
36 | //[assembly: AssemblyVersion("1.0.0.0")]
37 | //[assembly: AssemblyFileVersion("1.0.0.0")]
38 |
--------------------------------------------------------------------------------
/Twinpack.17/Twinpack.17.snk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zeugwerk/Twinpack/8a2224c24e4559735309f10f6a595ec9e9ff5a5a/Twinpack.17/Twinpack.17.snk
--------------------------------------------------------------------------------
/Twinpack.Net/Twinpack.Net.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.1
5 | enable
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Twinpack.NodeJs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "twinpack.nodejs",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "scripts": {
6 | "test": "echo \"Error: no test specified\" && exit 1"
7 | },
8 | "keywords": [],
9 | "author": "",
10 | "license": "ISC",
11 | "description": ""
12 | }
13 |
--------------------------------------------------------------------------------
/Twinpack.NodeJs/src/example.js:
--------------------------------------------------------------------------------
1 | const Twinpack = require('./twinpack');
2 |
3 | // Initialize the Twinpack library
4 | const twinpack = new Twinpack();
5 |
6 | async function runExamples() {
7 | try {
8 | console.log('\nRunning Config Command...');
9 | const configResults = await twinpack.config({
10 | types: [],
11 | sources: [],
12 | names: [],
13 | usernames: [],
14 | passwords: [],
15 | purge: true,
16 | reset: true
17 | });
18 | console.log('Config Results:', configResults);
19 |
20 | console.log('Running Search Command...');
21 | const searchResults = await twinpack.search({ searchTerm: 'ZCore', take: 5 });
22 | console.log('Search Results:', searchResults);
23 | } catch (error) {
24 | console.error('Error:', error.message);
25 | }
26 | }
27 |
28 | runExamples();
--------------------------------------------------------------------------------
/Twinpack.NodeJs/src/twinpack.js:
--------------------------------------------------------------------------------
1 | const { exec } = require('child_process');
2 |
3 | class Twinpack {
4 | constructor(executablePath = 'dotnet ../TwinpackCli.Net/bin/Debug/net8.0/twinpack.dll') {
5 | this.executablePath = executablePath;
6 | }
7 |
8 | /**
9 | * Run a command with specified arguments and parse JSON output.
10 | * @param {string} command The command to run.
11 | * @param {Object} args An object of arguments to pass.
12 | * @returns {Promise