La idea es tener una aplicación con un solo archivo ejecutable que, a pesar del tamaño, puede ser un archivo muy grande.
Estoy usando la "implementación de archivo único y ejecutable" de .NET 6.0 con el siguiente comando:
publish {csproj.FullName} -c Release -r win-x64 -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true --self-contained true -p:IncludeAllContentForSelfExtract=true -p:EnableCompressionInSingleFile=truePero cuando los archivos son demasiado grandes, como más de 4 GB, no puedo publicar debido al siguiente error:
C:\Program Files\dotnet\sdk\6.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(898,5): error MSB4018: System.ArgumentException: Stream length minus starting position is too large to hold a PEImage. (Parameter 'peStream') C:\Program Files\dotnet\sdk\6.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(898,5): error MSB4018: at System.Reflection.Internal.StreamExtensions.GetAndValidateSize(Stream stream, Int32 size, String streamParameterName) C:\Program Files\dotnet\sdk\6.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(898,5): error MSB4018: at System.Reflection.PortableExecutable.PEReader..ctor(Stream peStream, PEStreamOptions options, Int32 size)¿Alguna idea de cómo arreglarlo? U otra alternativa para aplicar esta idea.
Después de algunas investigaciones, hay una limitación en C# que no permite que un solo archivo tenga más de 4 gb.
Así que la alternativa que he elegido es utilizar cremalleras autoextraíbles.
El que he elegido es 7Zip. Usando su SDK , puedo comprimir mis archivos en un solo archivo y luego crear un zip autoextraíble que tiene el .exe para la ejecución del archivo y funciona como se esperaba.