aspirant-project / aspirant

Extensions for .NET Aspire
MIT License
57 stars 5 forks source link

Import support for IIS Express #17

Open Kralizek opened 2 months ago

Kralizek commented 2 months ago

Importing IIS Express resource from this discussion in the Aspire repo: https://github.com/dotnet/aspire/discussions/4383#discussioncomment-9674132

Kralizek commented 2 months ago

I'd like to add the possibility to choose if the X86 or X64 edition should be used.

Option 1: boolean field that selects 32/64 bits

public static IResourceBuilder<IISExpressResource> AddIISExpress(this IDistributedApplicationBuilder builder, string name, string applicationPath, bool use64Bits = true)

Option 2: similar but with an enum

public static IResourceBuilder<IISExpressResource> AddIISExpress(this IDistributedApplicationBuilder builder, string name, string applicationPath, IISExpressArch arch = IISExpressArch.X64)

public enum IISExpressArch { X64, X86 }

Option 3: take in a string with the executable path and provide the Program Files X64 and X86 as static properties that can be used.

public static readonly string ProgramFilesX64 => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "IIS Express", "iisexpress.exe");
public static readonly string ProgramFilesX86 => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "IIS Express", "iisexpress.exe");

public static IResourceBuilder<IISExpressResource> AddIISExpress(this IDistributedApplicationBuilder builder, string name, string applicationPath, string? iisExpressPath = null)
{
    ...
    iisExpressPath ?= ProgramFilesX64;
    ...
}

~Option 4~: I was considering using a builder pattern by adding an extension method, but the Command property of the ExecutableResource is read only.

public static IResourceBuilder<IISExpressResource> Use32Bits(this IResourceBuilder<IISExpressResource> builder)
{
    // ...
}

So I have no idea what's the preferred course of action.