У меня есть netstandard2.0 csproj (назовем его MyPackage), который упакован во время сборки (как указано в GeneratePackageOnBuild) в пакет nuget. Этот пакет nuget содержит пользовательские параметры и цели в каталоге сборки (поэтому ссылки на проекты получают их импортированные).
У меня есть другой проект (назовем его MyConsumer) в том же решении для тестирования MyPackage. Я хочу, чтобы MyConsumer импортировал реквизиты и цели актива сборки из MyPackage во время сборки, как если бы он использовал его как PackageReference из какого-то удаленного источника nuget.
Как мне заставить это работать (проще всего)?
Я смог сделать это с помощью очень сложного метода, когда MyConsumer добавил PackageReference в MyPackage и переопределил RestoreSources в MyConsumer, чтобы он указывал на каталог bin MyPackage. Это становится очень странным, когда выполняется сборка dotnet или сборка Visual Studio для sln, потому что метаданные проекта генерируются заранее для всех проектов во время восстановления, и, таким образом, MyPackage в этот момент не существует. Было решено добавить вложенные вызовы в MSBuild в рамках проекта MyConsumer, но затем это стало еще хуже, поскольку восстановление Visual Studio работает совершенно иначе, чем автоматическое восстановление, выполняемое сборкой dotnet.
Есть ли простой способ сделать это?
Это то, что у меня сейчас
<Project>
<Target Name="Build">
<Message Text="Running inner build" Importance="high" />
<!--
Need to call MSBuild twice, once to restore, then again to restore and build to get the restore of the Sdk to work
because of this bug in MSBuild: https://github.com/Microsoft/msbuild/issues/2455
Note the trailing Prop=1 is required to get MSBuild to invalid it's cache of the project target imports
-->
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Restore" Properties="Configuration=$(Configuration);Version=$(Version);IsInnerBuild=true;Prop=1" />
<!-- Have to use dotnet build instead of another call to MSBuild because of another bug that prevents proper imports within the same physical process -->
<Exec Command="dotnet build /p:Configuration=$(Configuration) /p:Version=$(Version) /p:IsInnerBuild=true" />
<Message Text="Finished inner build" Importance="high" />
</Target>
<Target Name="Restore" />
<Target Name="RemoveBin">
<RemoveDir Directories="bin" />
</Target>
<!-- Don't do real cleans old rebuild since it breaks MSBuild due to the same above bug -->
<Target Name="Rebuild" DependsOnTargets="RemoveBin;Build">
</Target>
</Project>