Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@
@(CustomAdditionalCompileOutputs)"
Returns="@(CscCommandLineArgs)"
DependsOnTargets="$(CoreCompileDependsOn);_BeforeVBCSCoreCompile">

<!-- Embed EditorConfigFiles into the binary log. This is done here (inside CoreCompile rather than
a static ItemGroup) to ensure EditorConfigFiles added by analyzer packages in
BeforeTargets="CoreCompile" targets (e.g. NetAnalyzers, CodeStyle) are captured. -->
<ItemGroup>
<EmbedInBinlog Include="@(EditorConfigFiles)" />
</ItemGroup>

<!-- These two compiler warnings are raised when a reference is bound to a different version
than specified in the assembly reference version number. MSBuild raises the same warning in this case,
so the compiler warning would be redundant. -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@
@(CustomAdditionalCompileOutputs)"
Returns="@(VbcCommandLineArgs)"
DependsOnTargets="$(CoreCompileDependsOn);_BeforeVBCSCoreCompile">

<!-- Embed EditorConfigFiles into the binary log. This is done here (inside CoreCompile rather than
a static ItemGroup) to ensure EditorConfigFiles added by analyzer packages in
BeforeTargets="CoreCompile" targets (e.g. NetAnalyzers, CodeStyle) are captured. -->
<ItemGroup>
<EmbedInBinlog Include="@(EditorConfigFiles)" />
</ItemGroup>

<PropertyGroup>
<_NoWarnings Condition="'$(WarningLevel)' == '0'">true</_NoWarnings>
<_NoWarnings Condition="'$(WarningLevel)' == '1'">false</_NoWarnings>
Expand Down
44 changes: 44 additions & 0 deletions src/Compilers/Core/MSBuildTaskTests/DotNetSdkTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -654,5 +654,49 @@ public void TestGlobalConfigsCanBeManuallyAdded()
"mycustom.config"
}));
}

[ConditionalFact(typeof(DotNetSdkAvailable))]
public void TestEditorConfigFilesAddedByAnalyzerPackagesAreEmbeddedInBinlog()
{
// Simulate the behavior of analyzer packages (e.g., NetAnalyzers, CodeStyle) that add
// EditorConfigFiles in a target that runs BeforeTargets="CoreCompile". Verify those files
// are included in @(EmbedInBinlog) so they are captured in the binary log.
var srcFile = ProjectDir.CreateFile("lib1.cs").WriteAllText("class C { }");
var analyzerGlobalConfig = ProjectDir.CreateFile("analyzer.globalconfig").WriteAllText("""
is_global = true
some_prop = some_val
""");

VerifyValues(
customProps: """
<PropertyGroup>
<!-- Disable automatic discovery and MSBuild EditorConfig generation for deterministic results -->
<DiscoverEditorConfigFiles>false</DiscoverEditorConfigFiles>
<DiscoverGlobalAnalyzerConfigFiles>false</DiscoverGlobalAnalyzerConfigFiles>
<GenerateMSBuildEditorConfigFile>false</GenerateMSBuildEditorConfigFile>
</PropertyGroup>
""",
customTargets: $"""
<!-- Simulate an analyzer package (e.g. NetAnalyzers) adding an EditorConfigFile
in a target that runs before CoreCompile. -->
<Target Name="AddAnalyzerPackageEditorConfigFile" BeforeTargets="CoreCompile">
<ItemGroup>
<EditorConfigFiles Include="{analyzerGlobalConfig.Path}" />
</ItemGroup>
</Target>
""",
targets: new[]
{
"CoreCompile"
},
expressions: new[]
{
"@(EmbedInBinlog)"
},
expectedResults: new[]
{
analyzerGlobalConfig.Path
});
}
}
}
29 changes: 29 additions & 0 deletions src/Compilers/Core/MSBuildTaskTests/TargetTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,35 @@ public void GenerateEditorConfigIsPassedToTheCompiler()
Assert.Single(items);
}

[Fact]
[WorkItem("https://github.com/dotnet/roslyn/issues/82721")]
public void GenerateEditorConfigIsEmbeddedInBinlog()
{
XmlReader xmlReader = XmlReader.Create(new StringReader($"""
<Project>
<Import Project="Microsoft.Managed.Core.targets" />

<ItemGroup>
<CompilerVisibleProperty Include="prop" />
</ItemGroup>
</Project>
"""));

var instance = CreateProjectInstance(xmlReader);

bool runSuccess = instance.Build(target: "GenerateMSBuildEditorConfigFile", GetTestLoggers());
Assert.True(runSuccess);

var editorConfigItems = instance.GetItems("EditorConfigFiles");
var embedInBinlogItems = instance.GetItems("EmbedInBinlog");
Assert.Single(editorConfigItems);

var embeddedEditorConfig = embedInBinlogItems.Single(item => item.EvaluatedInclude == editorConfigItems.Single().EvaluatedInclude);
var fileContents = File.ReadAllText(embeddedEditorConfig.EvaluatedInclude);
Assert.Contains("is_global = true", fileContents);
Assert.Contains("build_property.prop", fileContents);
}

[Fact]
public void AdditionalFilesAreAddedToNoneWhenCopied()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,9 @@ private static void EmitTestHelperTargets(
<!-- Overwrite CoreCompile target to avoid triggering the compiler -->
<Target Name=""CoreCompile""
DependsOnTargets=""$(CoreCompileDependsOn);_BeforeVBCSCoreCompile"">
<ItemGroup>
<EmbedInBinlog Include=""@(EditorConfigFiles)"" />
</ItemGroup>
</Target>
<Target Name=""InitializeSourceControlInformation""/>
Expand Down
Loading