ASP.NET Core 应用程序中对“Microsoft.WindowsDesktop.App”的意外要求

问题描述 投票:0回答:1

最近对 ASP.NET Core (.NET 6.0) API 应用程序的 Visual Studio 解决方案进行的更改导致需要

"Microsoft.WindowsDesktop.App"
,框架条目被添加到
.runtimeconfig.json
文件中,但我不明白为什么。这是服务器部署的问题。

更改的重要部分是添加一个新的类库,在主 Web 应用程序项目中引用和使用。

新的

.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"
      }
    ],
    "configProperties": {
      "System.GC.Server": true,
      "System.Reflection.NullabilityInfoContext.IsSupported": true,
      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
    }
  }
}

网络应用程序

.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0-windows</TargetFramework>
    ...
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="*" Version="*" />
    ...
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\DataStuff.SqlData\DataStuff.SqlData.csproj" />
    ...
  </ItemGroup>

</Project>

新的类库

DataStuff.SqlData.csproj
:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    ...
  </PropertyGroup>

  <ItemGroup>
    <None Remove="Scripts\*.sql" />
    ...
  </ItemGroup>

  <ItemGroup>
    <EmbeddedResource Include="Scripts\*.sql" />
    ...
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Data.SqlClient" Version="5.1.5" />
  </ItemGroup>

</Project>

新班级:

using Microsoft.Data.SqlClient;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace DataStuff.SqlData
{
    public class SqlSetup
    {
        public SqlSetup(string stringVal)
        {   //...
        }

        public async Task RunSetup()
        {   //...
        }
    }
}

SqlSetup
已在 Web 应用程序服务集合中注册,并在 IHostedService
中被称为

“启动任务”
    public async Task StartAsync(CancellationToken cancellationToken)
    {   // ...
        await sqlSetup.RunSetup();
    }

SqlSetup.cs
一样,
DataStuff.SqlData
项目还包含一些带有 SQL 脚本的嵌入式文本文件。
SqlSetup.RunSetup
使用
SqlCommand
来运行这些脚本。


调查:

  • 我查看了项目依赖项,但找不到与“Windows 桌面”相关的任何内容。
  • 我尝试退回到存储库的先前修订/提交并重新实施更改
    • 并且
      Microsoft.WindowsDesktop.App
      不存在构建输出(也不存在构建服务器上的最新构建,在最新版本之前 - 它所在的位置)。
    • 再次添加新的
      DataStuff.SqlData
      类库并在应用程序中使用时,果然,
      Microsoft.WindowsDesktop.App
      再次出现。
    • 只需再次删除类库的使用,方便清除
      Microsoft.WindowsDesktop.App
  • 相当多的谷歌搜索
  • 使用一些依赖/反编译工具来尝试找到任何线索
  • 我能找到的与“桌面”最接近的东西是
    Dependencies
    >
    Analyzers
    下的网络应用程序项目中的分析器:
    • System.Windows.Forms.Analyzers
    • System.Windows.Forms.Analyzers.CSharp

我不确定分析器是否直接影响构建输出。似乎没有办法删除它们 - 至少在 VS 中很容易。我怀疑它们在那里,因为由于项目 TFM 的 windows 部分,它们

潜在
可能有用,尽管目标始终是
net6.0-windows
- 因为这是一个重要包的支持目标 - 并且这在过去从未导致过
Microsoft.WindowsDesktop.App
要求。


任何解决此问题的帮助将不胜感激。这可能只是清楚地跟踪目标和依赖项所需的运行时的指导。

谢谢。

.net-6.0 asp.net-core-6.0 runtime-configuration
1个回答
0
投票

今天我在 App.runtimeconfig.json 中也遇到了额外的 Microsoft.WindowsDesktop.App 要求。事实证明,这是在我将 Microsoft.EntityFrameworkCore.SqlServer 更新到几天前发布的 7.0.16 后发生的。将版本恢复到 7.0.15 使 Microsoft.WindowsDesktop.App 要求消失。

看起来 Microsoft.EntityFrameworkCore.SqlServer 7.0.16 引入了一些 7.0.15 没有的新软件包。依赖项是:

Microsoft.EntityFrameworkCore.SqlServer 7.0.16
> Microsoft.Data.SqlClient 5.1.4
>> Microsoft.Identity.Client 4.56.0
>>> Microsoft.Identity.Client.NativeInterop 0.13.8 [new]
>>> Microsoft.Web.WebView2 1.0.864.35 [new]
> Azure.Identity 1.10.3
>> Microsoft.Identity.Client.Extensions.Msal 4.56.0
>>> System.IO.FIleSystem.AccessControl 5.0.0 [new]

特别有趣的是,Microsoft.Identity.Client 4.56.0的依赖项是:

  • 对于net6.0:
    • Microsoft.IdentityModel.Abstractions (>= 6.22.0)
  • 适用于net6.0-windows7.0
    • Microsoft.Identity.Client.NativeInterop (>= 0.13.8)
    • Microsoft.IdentityModel.Abstractions (>= 6.22.0)
    • Microsoft.Web.WebView2 (>= 1.0.864.35)

碰巧我也使用net6.0-windows作为目标框架。所以我猜测 Microsoft.Identity.Client.NativeInterop 或 Microsoft.Web.WebView2 一定是添加 Microsoft.WindowsDesktop.App 要求的 nuget,尽管我不知道如何确定。

© www.soinside.com 2019 - 2024. All rights reserved.