Я пишу пользовательскую цель MSBuild, которая заменяет некоторые из <PackageReference>
на <ProjectReference>
при определенных условиях.
У меня следующая цель msbuild:
<Target Name="ApplyProjectRedirects"
BeforeTargets="_GenerateDotnetCliToolReferenceSpecs;_GenerateProjectRestoreGraphPerFramework;_GenerateRestoreGraphWalkPerFramework;CollectPackageReferences;BeforeResolveReferences;ResolveAssemblyReferences"
AfterTargets="PaketRestore">
<ItemGroup>
<!-- remove packages we are redirecting to projects, and include the projects -->
<PackageReference Remove="@(ExcludePackageReferences)" />
<ProjectReference Include="@(IncludeProjectPaths)" />
</ItemGroup>
<ItemGroup>
<!-- include the packages in visual studio 'nuget' display, so we know what we redirected -->
<PackageReference Include="@(ExcludePackageReferences)">
<ExcludeAssets>all</ExcludeAssets>
</PackageReference>
</ItemGroup>
</Target>
И ссылки на мои проекты невидимы в Visual Studio Dependencies.Однако проект компилируется, как задумано.
Я обнаружил, что <ItemGroup>
с <PackageReference>
внутри цели соблюдается, когда цель запускается до CollectPackageReferences
.Однако я не смог заполнить <ProjectReference>
какой-либо целью, даже первой.
Как Visual Studio заполняет зависимости проектами решений?