Background
GenerateBootstrapper produces ClickOnce setup.exe / bootstrapper artifacts by delegating to the internal BootstrapperBuilder. It exposes many path inputs and an OutputPath that defaults to Directory.GetCurrentDirectory(), both of which break under multithreaded execution.
Migration scope
Known complexity factors
- Default
OutputPath = Directory.GetCurrentDirectory() must be re-derived from TaskEnvironment.ProjectDirectory
- Delegates heavy work to
BootstrapperBuilder (under src/Tasks/BootstrapperUtil/) which performs its own file I/O and XML reads — propagate TaskEnvironment or absolutize before passing
- Sets
[Output] BootstrapperComponentFiles/BootstrapperKeyFile from internal builder — preserve original-form values (Sin 1)
- Windows-only, NETFRAMEWORK-only feature path
Exit criteria
References
Background
GenerateBootstrapperproduces ClickOnce setup.exe / bootstrapper artifacts by delegating to the internalBootstrapperBuilder. It exposes many path inputs and anOutputPaththat defaults toDirectory.GetCurrentDirectory(), both of which break under multithreaded execution.Migration scope
[MSBuildMultiThreadableTask]IMultiThreadableTaskTaskEnvironment.GetAbsolutePath()for: BootstrapperItems (ItemSpec), ApplicationFile, BootstrapperKeyFile, ComponentsLocation, OutputPath, Path, SupportUrl-derived pathsTaskEnvironment.GetEnvironmentVariable()for: N/A (delegated builder may need review)TaskEnvironment.GetProcessStartInfo()for: N/AKnown complexity factors
OutputPath = Directory.GetCurrentDirectory()must be re-derived fromTaskEnvironment.ProjectDirectoryBootstrapperBuilder(undersrc/Tasks/BootstrapperUtil/) which performs its own file I/O and XML reads — propagateTaskEnvironmentor absolutize before passing[Output]BootstrapperComponentFiles/BootstrapperKeyFilefrom internal builder — preserve original-form values (Sin 1)Exit criteria
References