Я добавил задачу в свою сборку следующим образом:
Код: Выделить всё
Код: Выделить всё
error MSB4018: System.MissingMethodException->Microsoft.Build.Framework.BuildException.GenericBuildTransferredException: Method not found: 'System.Threading.Tasks.Task`1 System.Net.Http.Json.HttpClientJsonExtensions.GetFromJsonAsync(System.Net.Http.HttpClient, System.String, System.Text.Json.Serialization.Metadata.JsonTypeInfo`1, System.Threading.CancellationToken)'.
Код: Выделить всё
MyTask task = new MyTask();
task.BuildEngine = new BuildEngine();
task.Execute();
Чтобы найти причину этого, я попробовал и исследовал следующие вещи:
- Клонировал репозиторий исходного кода пакета NuGet и изменил проекты на .NET10 вместо .NET9 и использовал свою собственную сборку пакета NuGet. Это не устранило проблему, и исключение MissingMethodException по-прежнему выдается.
- Запустите Process Monitor sysinternals, чтобы узнать, какие библиотеки DLL загружаются во время выполнения задачи во время сборки. Я увидел, что файл C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.1\System.Net.Http.Json.dll загружен правильно, и загрузил этот файл в ILSpy, чтобы проверить, действительно ли метод существует в этой сборке, и он существует.
- Сравнил подпись метода GetFromJsonAsync в .NET9 и .NET10 и похоже, нет разницы в подписи, даже атрибут параметра для параметра requestUri один и тот же.
- Добавлен обработчик событий в AppDomain.CurrentDomain.AssemblyLoad, который просто регистрирует, какая сборка загружена, и сборка System.Net.Http.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 регистрируется как загруженный (подтверждая то, что уже указано в Process Monitor).
- Просмотрел IL-код метода в пакете NuGet, чтобы узнать, какой метод на самом деле вызывается: вызов класса [System.Runtime]System.Threading.Tasks.Task`1 [System.Net.Http.Json]System.Net.Http.Json.HttpClientJsonExtensions::GetFromJsonAsync(класс [System.Net.Http]System.Net.Http.HttpClient, строка, класс [System.Text.Json]System.Text.Json.Serialization.Metadata.JsonTypeInfo`1, тип значения [System.Runtime]System.Threading.CancellationToken). Мне кажется, что он хочет вызвать метод из сборки System.Net.Http.Json, как и ожидалось.
Код: Выделить всё
MSBuild version 18.0.5+e22287bf1 for .NET Framework
18.0.5.56406
Подробнее здесь: https://stackoverflow.com/questions/798 ... dexception
Мобильная версия