C3D.Extensions.Networking.PortAllocator
0.1.8
dotnet add package C3D.Extensions.Networking.PortAllocator --version 0.1.8
NuGet\Install-Package C3D.Extensions.Networking.PortAllocator -Version 0.1.8
<PackageReference Include="C3D.Extensions.Networking.PortAllocator" Version="0.1.8" />
<PackageVersion Include="C3D.Extensions.Networking.PortAllocator" Version="0.1.8" />
<PackageReference Include="C3D.Extensions.Networking.PortAllocator" />
paket add C3D.Extensions.Networking.PortAllocator --version 0.1.8
#r "nuget: C3D.Extensions.Networking.PortAllocator, 0.1.8"
#:package C3D.Extensions.Networking.PortAllocator@0.1.8
#addin nuget:?package=C3D.Extensions.Networking.PortAllocator&version=0.1.8
#tool nuget:?package=C3D.Extensions.Networking.PortAllocator&version=0.1.8
C3D.Extensions.Networking.PortAllocator
Network port allocator for use with unit tests, playwright, aspire, etc.
Based on code originally from CZEMacLeod/C3D.Extensions.Playwright.AspNetCore and CZEMacLeod/C3D.Extensions.Aspire
Specifically, this library provides a way to allocate ports for testing purposes, ensuring that the ports are available and not in use by other applications.
It avoids ports which are blacklisted by common browsers such as firefox and chromium, avoiding requiring the use of network.security.ports.banned.override
or --explicitly-allowed-ports
options.
Installation
You can install the package via NuGet:
dotnet add package C3D.Extensions.Networking.PortAllocator
Usage
To use the port allocator, you can create an instance of PortAllocator
and call the GetRandomFreePort
method to get an available port.
using C3D.Extensions.Networking;
var portAllocator = new PortAllocator();
int port = portAllocator.GetRandomFreePort();
Console.WriteLine($"Allocated port: {port}");
PortAllocator
supports dependency injection, so you can register it in your Startup.cs
or Program.cs
file:
using C3D.Extensions.Networking;
services.AddSingleton<PortAllocator>();
You can then inject PortAllocator
into your classes and use it to allocate ports as needed.
When using dependency injection, actions will be logged using the ILogger<PortAllocator>
interface, which you can configure in your application.
You can also just use the default instance provided by the PortAllocator.Instance
property:
using C3D.Extensions.Networking;
int port = PortAllocator.Instance.GetRandomFreePort();
There is also a constructor that allows you to specify the seed used for the random port generation.
You can also specify a range of ports to search for available ports:
int port = portAllocator.GetRandomFreePort(8000,9000); // Allocates a port between 8000 and 9000 inclusive
There are also utility methods to check if a port is available or to free it again:
if (portAllocator.TryMarkPortAsUsed(12345)) {
// Port 12345 is now marked as used
// Do some work with the port
portAllocator.MarkPortAsFree(12345); // Free the port when done
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 is compatible. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.8
- CommunityToolkit.Diagnostics (>= 8.4.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.7)
-
.NETStandard 2.0
- CommunityToolkit.Diagnostics (>= 8.4.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.7)
-
net8.0
- CommunityToolkit.Diagnostics (>= 8.4.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.7)
-
net9.0
- CommunityToolkit.Diagnostics (>= 8.4.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.7)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.