Sharpmake icon indicating copy to clipboard operation
Sharpmake copied to clipboard

Fix crash when using AdditionalManifestFiles on 32-bit Windows targets

Open usernameak opened this issue 6 months ago • 0 comments

Fixes a crash that appears when you add additional manifest files while targeting 32-bit Windows. The crash is caused by EnvironmentVariableResolver for that platform being null.

[ERROR]                                              
Error:                                               
Object reference not set to an instance of an object.
        While running D:\src\Sharpmake\Sharpmake.Application\bin\Debug\net6.0\Sharpmake.Application.exe
        @06/20/2025 04:16:31: Exception message (level 0):
        Error encountered while generating HelloWorld.HelloWorldProject
        Inner exception message (level 1):
        Object reference not set to an instance of an object.

        Stack trace:
        Inner exception stack trace (level 1):
   at Sharpmake.Generators.FastBuild.Bff.CmdLineConvertIncludePathsFunc(IGenerationContext context, Resolver resolver, String include, String prefix) in D:\src\Sharpmake\Sharpmake.Generators\FastBuild\Bff.cs:line 1558
   at Sharpmake.Generators.VisualStudio.ProjectOptionsGenerator.<>c__DisplayClass18_0.<GenerateManifestToolOptions>b__4(String p) in D:\src\Sharpmake\Sharpmake.Generators\VisualStudio\ProjectOptionsGenerator.cs:line 1912
   at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()
   at System.String.Join(String separator, IEnumerable`1 values)
   at Sharpmake.Generators.VisualStudio.ProjectOptionsGenerator.GenerateManifestToolOptions(IGenerationContext context, ProjectOptionsGenerationContext optionsContext) in D:\src\Sharpmake\Sharpmake.Generators\VisualStudio\ProjectOptionsGenerator
.cs:line 1914
   at Sharpmake.Generators.VisualStudio.ProjectOptionsGenerator.GenerateOptions(IGenerationContext context, ProjectOptionGenerationLevel level) in D:\src\Sharpmake\Sharpmake.Generators\VisualStudio\ProjectOptionsGenerator.cs:line 97
   at Sharpmake.Generators.VisualStudio.Vcxproj.GenerateConfOptions(GenerationContext context) in D:\src\Sharpmake\Sharpmake.Generators\VisualStudio\Vcxproj.cs:line 350
   at Sharpmake.Generators.VisualStudio.Vcxproj.GenerateImpl(GenerationContext context, IList`1 generatedFiles, IList`1 skipFiles) in D:\src\Sharpmake\Sharpmake.Generators\VisualStudio\Vcxproj.cs:line 363
   at Sharpmake.Generators.VisualStudio.Vcxproj.Generate(Builder builder, Project project, List`1 configurations, String projectFile, List`1 generatedFiles, List`1 skipFiles) in D:\src\Sharpmake\Sharpmake.Generators\VisualStudio\Vcxproj.cs:line 
144
   at Sharpmake.Generators.GeneratorManager.Generate(Builder builder, Project project, List`1 configurations, String projectFile, List`1 generatedFiles, List`1 skipFiles) in D:\src\Sharpmake\Sharpmake.Generators\GeneratorManager.cs:line 103     
   at Sharpmake.Builder.GenerateProjectFile(Object arg) in D:\src\Sharpmake\Sharpmake\Builder.cs:line 1302
        Root stack trace (level 0):
   at Sharpmake.Application.Program.CreateBuilderAndGenerate(BaseBuildContext buildContext, Argument parameters, Boolean generateDebugSolution) in D:\src\Sharpmake\Sharpmake.Application\Program.cs:line 481
   at Sharpmake.Application.Program.GenerateAll(BaseBuildContext buildContext, Argument parameters) in D:\src\Sharpmake\Sharpmake.Application\Program.cs:line 520
   at Sharpmake.Application.Program.Main() in D:\src\Sharpmake\Sharpmake.Application\Program.cs:line 307

1 errors, 0 warnings

To reproduce, use this (assuming [project.SourceRootPath]\app.manifest points to a valid manifest file location) and try generating targeting Win32 (not Win64) platform:

conf.Options.Add(Options.CSharp.GenerateManifests.Enabled);
conf.AdditionalManifestFiles.Add(@"[project.SourceRootPath]\app.manifest");

usernameak avatar Jun 20 '25 02:06 usernameak