Ich habe die Aufgabe auf folgende Weise zu meinem Build hinzugefügt:
Code: Select all
Code: Select all
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)'.
Code: Select all
MyTask task = new MyTask();
task.BuildEngine = new BuildEngine();
task.Execute();
Um die Ursache dafür zu finden, habe ich Folgendes versucht und untersucht:
- Klonen Sie das NuGet-Paketquell-Repository und ändern Sie die Projekte so, dass sie auf .NET10 statt auf .NET9 abzielen, und verwenden Sie meinen benutzerdefinierten NuGet-Paketbuild. Dadurch wurde das Problem nicht behoben und die MissingMethodException wird immer noch ausgelöst.
- Führen Sie den Prozessmonitor von sysinternals aus, um zu sehen, ob welche DLLs während der Ausführung der Aufgabe während eines Builds geladen werden. Ich habe gesehen, dass die Datei C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.1\System.Net.Http.Json.dll korrekt geladen wurde, und habe diese Datei in ILSpy geladen, um zu sehen, ob die Methode tatsächlich in dieser Assembly vorhanden ist, und das ist der Fall.
- Verglichen die Signatur der GetFromJsonAsync-Methode in .NET9 und .NET10 und es scheint nicht so zu sein Es kann einen Unterschied in der Signatur geben, sogar das Parameterattribut für den Parameter requestUri ist dasselbe.
- Es wurde ein Ereignishandler zu AppDomain.CurrentDomain.AssemblyLoad hinzugefügt, der nur protokolliert, welche Assembly geladen wird, und die Assembly wird als vorhanden protokolliert geladen (bestätigt, was Process Monitor bereits angegeben hat).
- Sehen Sie sich die IL der Methode im NuGet-Paket an, um zu sehen, welche Methode tatsächlich aufgerufen wird: call class [System.Runtime]System.Threading.Tasks.Task`1 [System.Net.Http.Json]System.Net.Http.Json.HttpClientJsonExtensions::GetFromJsonAsync(class [System.Net.Http]System.Net.Http.HttpClient, string, class [System.Text.Json]System.Text.Json.Serialization.Metadata.JsonTypeInfo`1, valuetype [System.Runtime]System.Threading.CancellationToken). Es scheint mir, dass die Methode wie erwartet aus der System.Net.Http.Json-Assembly aufgerufen werden soll.
Code: Select all
MSBuild version 18.0.5+e22287bf1 for .NET Framework
18.0.5.56406
Mobile version