jf dotnet
Run .NET CLI commands with Artifactory integration for dependency resolution and build information collection.
This topic covers the following tasks:
When to Use
Use jf dotnet if your .NET project uses the .NET SDK CLI (dotnet restore, dotnet build) for builds. For projects using the NuGet CLI directly, use jf nuget instead.
Prerequisites
- Run
jf dotnet-configin the project directory before the first build. - Configure a server with
jf config addorjf c add. - Authentication to Artifactory is required.
Configuration: jf dotnet-config
jf dotnet-configGenerate .NET configuration for resolving packages through Artifactory. Run this once per project before your first build.
To configure .NET for Artifactory:
Synopsis
jf dotnet-config [options]
Aliases: dotnetc
Configuration Options
| Flag | Default | Description |
|---|---|---|
--global | false | Apply configuration globally for all projects |
--server-id-resolve | — | Artifactory server ID for dependency resolution |
--repo-resolve | — | Repository for resolving packages |
--nuget-v2 | false | Use NuGet V2 protocol when restoring from Artifactory |
Configuration Examples
View Help
jf dotnet-config --helpNon-Interactive Configuration
Configure .NET with non-interactive flags:
jf dotnet-config --server-id-resolve=<server-id> --repo-resolve=<repo-name>Where:
- <server-id>: The server ID configured using
jf config add - <repo-name>: The name of the NuGet repository in Artifactory
For example:
jf dotnet-config --server-id-resolve=my-server --repo-resolve=nuget-virtualWhy Run Config First?
You must run jf dotnet-config before jf dotnet restore. The config creates .jfrog/projects/dotnet.yaml for NuGet package resolution through Artifactory. Without it, jf dotnet does not know where to fetch packages.
Shortcut: In CI/CD, pass all flags non-interactively so the config step is fully automated and reproducible.
Configuration Notes
- Run once per project: Re-run when changing the resolution repository.
- NuGet V2: Use
--nuget-v2=trueonly if your Artifactory NuGet repository is configured for the V2 protocol. Most modern setups use V3. - Alternative: For NuGet-only projects (not using .NET SDK), use
jf nugetinstead.
Expected Output
$ jf dotnet-config --server-id-resolve=my-server --repo-resolve=nuget-virtual
.NET build configuration saved successfully.
How to Verify
After running, confirm the configuration exists:
cat .jfrog/projects/dotnet.yamlBuild: jf dotnet
jf dotnetRun .NET CLI commands with Artifactory integration for dependency resolution and build information collection.
To run .NET CLI with Artifactory integration:
Synopsis
jf dotnet <dotnet-arguments> [options]
Aliases: none
Arguments
| Argument | Required | Description |
|---|---|---|
dotnet-arguments | Yes | .NET subcommand and arguments (for example, restore, build, publish) |
Build Options
| Flag | Default | Description |
|---|---|---|
--build-name | — | Build name for build information (requires --build-number) |
--build-number | — | Build number for build information (requires --build-name) |
--project | — | JFrog Artifactory project key |
--module | — | Optional module name for build information |
--allow-insecure-connections | false | Configure NuGet sources with unsecured connections (testing only). This flag is functional but does not appear in jf dotnet --help output. |
Build Examples
Restore and Build
jf dotnet restore
jf dotnet buildBuild with Build Information
jf dotnet build --build-name=<build-name> --build-number=<build-number>Where:
<build-name>is a name for the build (e.g.,my-dotnet-app)<build-number>is a number or identifier for the build run (e.g.,1)
For example:
jf dotnet build --build-name=my-dotnet-app --build-number=1Important Notes
- dotnet vs nuget:
jf dotnetwraps the .NET CLI (which includes NuGet functionality). Usejf dotnetfor .NET SDK-style projects andjf nugetfor traditional NuGet-only projects. - .NET commands: All standard .NET CLI commands work (
restore,build,publish,test,pack, and others). - Build-info: Use
--build-nameand--build-number, then publish withjf rt build-publish.
CI/CD Example (GitHub Actions)
# .github/workflows/build.yml
steps:
- uses: actions/checkout@v4
- name: Setup JFrog CLI
uses: jfrog/setup-jfrog-cli@v4
env:
JF_URL: ${{ vars.JF_URL }}
JF_ACCESS_TOKEN: ${{ secrets.JF_ACCESS_TOKEN }}
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Configure .NET
run: jf dotnet-config --server-id-resolve=setup-jfrog-cli-server --repo-resolve=nuget-virtual
- name: Restore packages
run: jf dotnet restore --build-name=my-dotnet-app --build-number=${{ github.run_number }}
- name: Build
run: jf dotnet build
- name: Publish build info
run: jf rt build-publish my-dotnet-app ${{ github.run_number }}Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
no config file was found | jf dotnet-config was not run | Run jf dotnet-config in the project directory |
404 on jf dotnet restore | Resolution repository does not exist or name is wrong | Verify --repo-resolve matches an existing NuGet virtual repository in Artifactory |
| 401 / 403 errors | Invalid credentials or insufficient permissions | Re-run jf config add with a valid access token |
| NuGet V2 protocol errors | Artifactory repo uses V2 but config defaults to V3 | Set --nuget-v2=true in jf dotnet-config |
Build-info not collected for dotnet test | The test command uses --no-restore implicitly | Run jf dotnet restore separately with build-info flags before jf dotnet test |
Enable debug logging: export JFROG_CLI_LOG_LEVEL=DEBUG
Related Topics
- Build Tools Overview — Capabilities matrix and tool reference
- Native Mode — Supported packages with Native Mode
Updated 8 days ago
