Skip to content

[Generators] The AnalyzerConfigOptionsProvider.GetOptions does not use the proper file path #47786

@jeromelaban

Description

@jeromelaban

Version Used: VS 16.8 Pre 3

Steps to Reproduce:

  1. Add Additional items using this format:
    <CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="MyMetadata" />
    <AdditionalFiles Include=".\Resources.resw" SomeMetadata="MyMetadata" />
  1. Try getting the metadata using:
context.AnalyzerConfigOptions.GetOptions(f)
.TryGetValue("build_metadata.AdditionalFiles.MyMetadata", out var myMetadata)

Expected Behavior:
The metadata is retreived.

Actual Behavior:
The metadata is not retreived.

Workaround

The reason for this is the fact that the GenerateMSBuildEditorConfig generates configuration using a sanitized fullpath, and the path provided in AdditionalFiles is not, causing a mismatch when the .\ is present.

Here's a workaround when adding a large number of files:

	<Target Name="_CleanupRoslynAdditionalFiles" BeforeTargets="GenerateMSBuildEditorConfigFileShouldRun">
		<ItemGroup>
			<_AdditionalFilesCleanup Include="@(AdditionalFiles)" />
			<AdditionalFiles Remove="@(_AdditionalFilesCleanup)" />
			<AdditionalFiles Include="@(_AdditionalFilesCleanup->'$([System.IO.Path]::GetFullPath('%(_AdditionalFilesCleanup.Identity)'))')" />
		</ItemGroup>
	</Target>

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions