Skip to content

Instantly share code, notes, and snippets.


Ben Villalobos BenVillalobos

View GitHub Profile
BenVillalobos /
Last active Feb 24, 2021
How MSBuild Manifest Resource Naming Works

Manifest Resource Names and You!

For explicit information on how resource names are chosen, see this dotnet docs issue.

This gist is meant to be a slightly higher level explanation on how resource names are used. Mostly I'm just documenting as much context as possible before I forget.

So we start with some Foo.resx

That Foo.resx will get passed to a few tasks in different forms throughout the build.

Relevant tasks:

BenVillalobos /
Last active May 26, 2020
Known values for TargetFrameworkIdentifier

[5/21 4:03 PM] David Kean The format is; [Identifier], Version=v[Version], Profile=[Profile] where profile is optional.

Valid identifier values off the top my head:




BenVillalobos /
Created Jul 21, 2020
Debugging Node Communication in MSBuild

Debugging Node Communication in MSBuild

To capture logs of how MSBuild nodes talk to each other:

  2. Set MSBUILDDEBUGPATH=<some_folder_path>
  3. Run your scenario
  4. The node communication traces should exist in the folder you specified.
View Commits Where I learned Something
Turning chars into its integer hex representation:
More insight on how MSBuild logging works:
Comment explaining default excludes in sdk-style projects:
BenVillalobos /
Last active Aug 10, 2021
Inline UsingTask Template
<UsingTask TaskName="Foo.Bar" TaskFactory="RoslynCodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">
      <AnnotatedProjects ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
      <ParentProjectPlatform ParameterType="System.String" Required="true" />
      <PlatformLookupTable ParameterType="System.String" Required="false" />
      <AssignedProjectsWithPlatform ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="true" />
      <Using Namespace="System.Collections.Generic"/>