我目前正在使用 .NET Upgrade Assistant 作为基础将我的 WPF 项目从 .NET Framework 4.8 迁移到 .NET 6,然后手动修复剩余的问题。
我的所有项目都有一组共享库,其中一个包含标准类和一些自定义UserControl. 将此特定库迁移到 .NET 6 时,该库引用的框架是Microsoft.NETCore.App和Microsoft.WindowsDesktop.App。问题是当我尝试在另一个项目中使用这个库时,我收到以下警告:
警告 MSB3277 发现不同版本的“WindowsBase”之间存在无法解决的冲突。
“WindowsBase,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”和“WindowsBase,Version=6.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”之间存在冲突。
选择“WindowsBase,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”是因为它是主要的,而“WindowsBase,Version=6.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”不是。
查看该库引用的两个框架引用的 WindowsBase,我发现Microsoft.NETCore.App引用了 WindowsBase v4.0.0.0,而Microsoft.WindowsDesktop.App引用了 WindowsBase v6.0.0.0。
我该如何解决这个问题?
我的应用程序需要 ping 网络中所有可能的 IP 地址。由于 IP 列表很大(大约 4000 个条目),我决定异步执行 ping 以加快进程。我最初编写的代码似乎工作正常,但不知何故,当我昨天尝试它时,它不再按预期工作(也许在一些 .NET 更新之后?我真的不知道)。
下面是我的代码的工作原理:从 IP 地址列表中,我创建了一个任务列表(每个 IP 一个),然后将任务列表传递给 WhenAll 以等待所有 ping 请求完成。问题是,有时 WhenAll 会无限期地等待(我用调试器检查过,我看到传递给 WhenAll 的一些任务始终处于“等待激活”状态)。奇怪的是,有时(在 3 次测试中大约有 2 次)它按预期工作并且所有任务都完成了。
这是我使用的代码:
public static async Task<List<PingReply>> PingAsync(List<IPAddress> ips, int timeout)
{
var pingTasks = ips.Select(ip =>
{
using (Ping ping = new Ping())
{
return ping.SendPingAsync(ip, timeout);
}
});
var results = await Task.WhenAll(pingTasks);
return results.ToList();
}
Run Code Online (Sandbox Code Playgroud)
关于问题可能是什么的任何提示?