跳到主要内容

Building & Publishing Extensions

After defining your API services, analyze them, build them into a .pkg package, and publish to a repository for distribution.

Analyze​

Click Analyze to validate your service definitions for the selected node (project, application, or service):

  1. Fetches each service's spec from its Definition URI.
  2. Validates the spec and generates typed .NET DTOs and operation metadata.
  3. Reports status per service (Not Analyzed / Analyzed) and writes diagnostic output to the service's Logs tab.

Fix any errors before building. An indeterminate progress bar and, for multiple services, a "completed / total" tag show progress; results appear in an info bar.

Build​

Click Build to compile the extension package:

  1. Generates typed .NET DTOs from the service schemas.
  2. Compiles the assembly.
  3. Packages everything into a .pkg file at the Export Path (set in the Project Panel). If Export Path is empty, a folder picker is shown first.

When the build succeeds, a "The package has been generated" dialog shows the full .pkg path with a Copy Path button. The built package is not installed automatically — install it separately (see below).

Publishing to a Repository​

From Studio​

  1. Click Publish to Repository in the toolbar.
  2. Confirm in the Publish to Extension Repository dialog.

Publishing requires you to be signed in (from the My Account view). The package is uploaded to the Extension Repository that corresponds to your account's region; no repository URL is entered in Studio.

You will see an error if:

  • The project has not been built yet — "Build the project first before publishing."
  • You are not signed in — "You must be signed in to publish an extension. Please log in from the My Account view first."

From CLI​

# Analyze a spec AND pack it into a .pkg in one step
aeth analyze https://petstore.swagger.io/v2/swagger.json \
--type openapi --app-name "Swagger Petstore" --service-name "Petstore API" \
--namespace "MyCompany.Petstore" --out ./out

# Publish a built package to a local repository folder
aeth publish ./MyExtension.pkg --repo ./local-repo

# Publish a built package to a remote repository
aeth publish ./MyExtension.pkg --repo https://extensions.example.com

# 'package upload' is an alias for publish
aeth package upload ./MyExtension.pkg --repo https://extensions.example.com

aeth analyze (alias analyse) supports --type values: openapi/swagger, soap/wsdl, odata/csdl/edm/edmx, and grpc/proto. Optional flags: -u/--username, -p/--password, -an/--app-name, -sn/--service-name, -ns/--namespace, -o/--out/--output, --version.

aeth publish / aeth package upload accept the package path followed by -r/--repo <url>. A local path copies the file; an http(s) URL uploads it (using an API key from the URL/user-info or settings, or your signed-in bearer token).

Versioning​

Extension versions follow the format Major.Minor.Patch[.Revision]:

1.0.0 — initial release
1.1.0 — new operations added
1.1.1 — bug fix
2.0.0 — breaking changes

Set the version in the Project Panel (using Auto Version, or Version when it is off) before building. When publishing an update, the version must be strictly greater than the currently published version — this is enforced by the repository.

Installing the Built Extension​

After building, install the .pkg on another machine or share it with a teammate:

# From a local .pkg file
aeth install ./MyExtension.pkg

# From the repository, by package id
aeth install MyCompany.MyExtension --version 1.0.0

# Force re-install / overwrite
aeth install MyCompany.MyExtension --force

aeth install accepts a .pkg file or a package id, with optional --version, -r/--repo, and -f/--force.

Build Troubleshooting​

ProblemLikely CauseSolution
Compilation errorsDuplicate type namesAdjust the namespace in service/analysis settings
Schema not foundURL unreachable or file missingVerify the Definition URI
Build hangsLarge schema with many typesBuild from the CLI with --out
Publish rejectedVersion not greater than existingIncrement the version number
Publish blockedNot signed inSign in from the My Account view first

See Also​