Кажется, у меня проблема с ProjectReference Include
(в настоящее время на VS 2019 и VS 2017), когда целью является NET 4.6.1 и используются рабочие или веб-роли, а также пакеты, такие как System.Runtime.CompilerServices.Unsafe
.Результатом является сбой во время выполнения, который не может быть загружен некоторым типом, таким как ReadOnlySpan
, если зависимая библиотека / пакет Nuget или код использует его напрямую или функции, такие как AsSpan
.
Переход в пакеты Nuget изамена ref
пакетов на lib
исправляет проблему.Я быстро попытался исправить цель, как предложено в https://github.com/xamarin/xamarin-android/issues/1162#issuecomment-359475008,, но она не работает.MSBuild сообщает
Цель "_ResolveAssemblies", указанная в атрибуте AfterTargets в "\ ReplaceRefAssemblies.targets (2,39)", не существует в проекте и будет игнорироваться.
Что, кажется, указывает на то, что конкретный AfterTargets
из _ResolveAssemblies
не существует.Пытаясь просмотреть MSBuild Structured Log Viewer
Я также не могу найти подходящую альтернативу.Отсюда возникает вопрос: где я мог бы принудительно ссылать сборки на их фактические аналоги lib?Или, в качестве альтернативы, есть другой способ решения проблемы (в общем случае?
. Об этом есть открытая проблема GH по адресу https://github.com/Microsoft/msbuild/issues/2776#issuecomment-487363546, где я также записал наблюдения.
<Project>
<Target Name="ReplaceRefAssemblies" AfterTargets="_ResolveAssemblies">
<ItemGroup>
<ResolvedAssembliesFixedWindows Include="@(ResolvedAssemblies->Replace('\ref\','\lib\'))" />
<ResolvedAssembliesFixedUnix Include="@(ResolvedAssemblies->Replace('/ref/','/lib/'))" />
<ResolvedAssembliesFixed Include="@(ResolvedAssembliesFixedWindows)" Condition="@(ResolvedAssembliesFixedWindows) != @(ResolvedAssemblies)" />
<ResolvedAssembliesFixed Include="@(ResolvedAssembliesFixedUnix)" Condition="@(ResolvedAssembliesFixedUnix) != @(ResolvedAssemblies)" />
<ResolvedAssemblies Condition="'@(ResolvedAssembliesFixed->Count())' > 0" Remove="@(ResolvedAssemblies)" />
<ResolvedAssemblies Include="@(ResolvedAssembliesFixed)" />
</ItemGroup>
</Target>
</Project>