我们最近将一个大型解决方案从 .NET 4.8 转换为 .NET 6。它由一些 WinForms 可执行项目、类库项目和单元测试项目组成。但我们在让可执行文件在测试机器上运行时遇到了困难。我们已在该计算机上安装了 .NET 6 Desktop 运行时,但可执行文件仍然拒绝运行:
我们发现,除了桌面运行时之外,我们还安装了 ASP.NET Core 运行时后,该错误将不再出现。这令人惊讶,因为据我所知,我们的解决方案中没有使用 ASP.NET。 ProjectName.runtimeconfig.json 文件似乎包含以下内容:
{
"runtimeOptions": {
"tfm": "net6.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "6.0.0"
},
{
"name": "Microsoft.WindowsDesktop.App",
"version": "6.0.0"
},
{
"name": "Microsoft.AspNetCore.App",
"version": "6.0.0"
}
]
}
}
删除提到 Microsoft.AspNetCore.App 的部分可以在没有 ASP.NET Core 运行时的测试计算机上运行可执行文件。但为什么该文件中甚至提到了它?
这是怎么回事?难道我们的项目确实以某种方式需要 ASP.NET,也许是因为我们正在使用某些 NuGet 包?如果是这样,我们如何找出这种依赖从何而来?理想情况下,我们的应用程序应该仅依赖于 .NET 6 桌面运行时。
最佳答案
我的一位同事发现了这个问题。
多个项目文件中存在以下内容:
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
删除这些解决了问题。
根据 git 日志,该文本似乎是由转换工具(升级助手)出于某种原因生成的。
关于由于某种原因,WinForms 项目似乎依赖于 ASP.NET 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70974917/