Skip to content

Commit 271ac3e

Browse files
committed
Fix CS0006 race in PEInterface multi-target build
Conditional ItemGroups on $(TargetFramework) hid manager ProjectReferences from the outer multi-target evaluation (where $(TargetFramework) is empty), so parallel IDE schedulers (Rider, VS) could start PEInterface's inner builds before Chocolatey/PowerShell/Scoop/WinGet (or Apt/Dnf/Pacman/etc.) finished, producing CS0006 "metadata file ... could not be found" errors. Declare every manager ProjectReference unconditionally so the project graph is correct. Use ReferenceOutputAssembly metadata to scope which TFM actually consumes which assembly, and SetTargetFramework to pin Windows-only managers (single-TFM) when consumed from the net10.0 inner build. The set of /reference assemblies passed to csc and the bin/ output per TFM are unchanged.
1 parent e290d91 commit 271ac3e

1 file changed

Lines changed: 42 additions & 13 deletions

File tree

src/UniGetUI.PackageEngine.PackageEngine/UniGetUI.PackageEngine.PEInterface.csproj

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,49 @@
2424
<ProjectReference Include="..\UniGetUI.PackageEngine.PackageManagerClasses\UniGetUI.PackageEngine.Classes.csproj" />
2525
</ItemGroup>
2626

27-
<ItemGroup Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">
28-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.PowerShell\UniGetUI.PackageEngine.Managers.PowerShell.csproj" />
29-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Scoop\UniGetUI.PackageEngine.Managers.Scoop.csproj" />
30-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.WinGet\UniGetUI.PackageEngine.Managers.WinGet.csproj" />
31-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Chocolatey\UniGetUI.PackageEngine.Managers.Chocolatey.csproj" />
27+
<!-- Windows-only managers (only target $(WindowsTargetFramework)). Declared unconditionally on Windows builds
28+
so the project graph sees them; SetTargetFramework pins them to their only TFM regardless of consumer,
29+
and ReferenceOutputAssembly disables the /reference inclusion for the net10.0 inner build. -->
30+
<ItemGroup Condition="'$(BuildSharedWindowsTargetFrameworks)' == 'true'">
31+
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.PowerShell\UniGetUI.PackageEngine.Managers.PowerShell.csproj"
32+
SetTargetFramework="TargetFramework=$(WindowsTargetFramework)">
33+
<ReferenceOutputAssembly Condition="'$(TargetFramework)' != '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
34+
</ProjectReference>
35+
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Scoop\UniGetUI.PackageEngine.Managers.Scoop.csproj"
36+
SetTargetFramework="TargetFramework=$(WindowsTargetFramework)">
37+
<ReferenceOutputAssembly Condition="'$(TargetFramework)' != '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
38+
</ProjectReference>
39+
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.WinGet\UniGetUI.PackageEngine.Managers.WinGet.csproj"
40+
SetTargetFramework="TargetFramework=$(WindowsTargetFramework)">
41+
<ReferenceOutputAssembly Condition="'$(TargetFramework)' != '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
42+
</ProjectReference>
43+
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Chocolatey\UniGetUI.PackageEngine.Managers.Chocolatey.csproj"
44+
SetTargetFramework="TargetFramework=$(WindowsTargetFramework)">
45+
<ReferenceOutputAssembly Condition="'$(TargetFramework)' != '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
46+
</ProjectReference>
3247
</ItemGroup>
3348

34-
<ItemGroup Condition="'$(TargetFramework)' != '$(WindowsTargetFramework)'">
35-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Apt\UniGetUI.PackageEngine.Managers.Apt.csproj" />
36-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Dnf\UniGetUI.PackageEngine.Managers.Dnf.csproj" />
37-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Pacman\UniGetUI.PackageEngine.Managers.Pacman.csproj" />
38-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Homebrew\UniGetUI.PackageEngine.Managers.Homebrew.csproj" />
39-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Snap\UniGetUI.PackageEngine.Managers.Snap.csproj" />
40-
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Flatpak\UniGetUI.PackageEngine.Managers.Flatpak.csproj" />
49+
<!-- Multi-target managers (Linux + Windows TFMs). Declared unconditionally so the graph is correct;
50+
ReferenceOutputAssembly disables the /reference for the Windows inner build. -->
51+
<ItemGroup>
52+
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Apt\UniGetUI.PackageEngine.Managers.Apt.csproj">
53+
<ReferenceOutputAssembly Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
54+
</ProjectReference>
55+
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Dnf\UniGetUI.PackageEngine.Managers.Dnf.csproj">
56+
<ReferenceOutputAssembly Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
57+
</ProjectReference>
58+
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Pacman\UniGetUI.PackageEngine.Managers.Pacman.csproj">
59+
<ReferenceOutputAssembly Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
60+
</ProjectReference>
61+
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Homebrew\UniGetUI.PackageEngine.Managers.Homebrew.csproj">
62+
<ReferenceOutputAssembly Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
63+
</ProjectReference>
64+
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Snap\UniGetUI.PackageEngine.Managers.Snap.csproj">
65+
<ReferenceOutputAssembly Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
66+
</ProjectReference>
67+
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Flatpak\UniGetUI.PackageEngine.Managers.Flatpak.csproj">
68+
<ReferenceOutputAssembly Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
69+
</ProjectReference>
4170
</ItemGroup>
4271

4372
<ItemGroup>
@@ -47,4 +76,4 @@
4776
<ItemGroup>
4877
<PackageReference Include="PhotoSauce.MagicScaler" Version="0.15.0" />
4978
</ItemGroup>
50-
</Project>
79+
</Project>

0 commit comments

Comments
 (0)