WeiXinMPSDK icon indicating copy to clipboard operation
WeiXinMPSDK copied to clipboard

console app生成错误runtime framework

Open Caskia opened this issue 5 years ago • 3 comments

首先感谢你们对该项目的维护。

问题描述

创建控制台应用程序,引用WxOpen包,编译后查看runtimeconfig.json文件生成了错误的Runtime Framework。

造成该错误的原因是在 xxx.netcore3.csproj 文件中编译条件为netcoreapp3.0时,都默认带上了Framework Microsoft.AspNetCore.App

<ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp3.0' ">
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="System.Xml.XmlDocument" Version="4.3.0" />
    <PackageReference Include="System.Xml.XPath.XmlDocument" Version="4.3.0" />
  </ItemGroup>
该问题的影响
  • 当为控制台程序的时候,必须要引入AspNetCore的Sdk,而非NetCore的Sdk造成包过大。
  • 如果想实现一个后台应用程序,那么该程序也必须是作为网站应用来运行
  • 具体区别可以参照该文档
期待结果
{
  "runtimeOptions": {
    "tfm": "netcoreapp3.0",
    "framework": {
      "name": "Microsoft.NetCore.App",
      "version": "3.0.0"
    }
  }
}
实际结果
{
  "runtimeOptions": {
    "tfm": "netcoreapp3.0",
    "framework": {
      "name": "Microsoft.AspNetCore.App",
      "version": "3.0.0"
    }
  }
}
重现问题步骤(如果可以)
  1. 创建控制台应用程序
  2. 安装Senparc.Weixin.WxOpen
  3. 编译应用程序
  4. 查看xxx.runtimeconfig.json文件
微信官方文档 URL
微信官方文档快照(直接复制关键内容到下方)
发现问题的模块
  • [ ] Senparc.Weixin 版本:
  • [ ] Senparc.Weixin.MP 版本:
  • [ ] Senparc.Weixin.MP.MVC 版本:
  • [ ] Senparc.Weixin.Open 版本: ~- [ ] Senparc.Weixin.QY 版本:~
  • [ ] Senparc.Weixin.Work 版本:
  • [x] Senparc.Weixin.WxOpen 版本:
  • [ ] Senparc.Weixin.Cache.Redis 版本:
  • [ ] Senparc.Weixin.Cache.Memcached 版本:
  • [ ] 其他模块:
模块对应的 .net 版本
  • [ ] .net 3.5
  • [ ] .net 4.0
  • [ ] .net 4.5
  • [ ] .net standard 2.0
  • [ ] .net core 1.x
  • [ ] .net core 2.x
  • [x] .net core 3.x
开发环境
  • [ ] Visual Studio 2015
  • [ ] Visual Studio 2017
  • [x] Visual Studio 2019
  • [ ] Visual Studio Code
  • [ ] 其他:
缓存环境
  • [x] 服务器内存缓存(默认)
  • [ ] Redis 版本:
  • [ ] Memcached 版本:
  • [ ] 其他:
系统环境
  • [ ] Windows,版本:
  • [x] Linux,版本:
  • [ ] Mac,版本:
  • [ ] 其他:

Caskia avatar Dec 06 '19 16:12 Caskia

1、光就 WxOpen 本身确实没有这个引用也可以运行,不过最终的基类 CO2NET 在一些网络的 Request 上面是有做一些处理的,如果需要彻底摆脱的话,这一块就需要在底层做一个完全的分离。

2、理论上来说即使引用了,也不会影响 Console 的呈现形式吧?仍然可以是命令行的形式。

JeffreySu avatar Dec 08 '19 06:12 JeffreySu

谢谢你能够在周末进行回复。 我来讲讲我是怎么发现这个问题的。由于我的程序都是容器化的,每次新添加程序集,我都会去修改dockerfile。然后我使用vs自动生成dockerfile,因为项目是console,生成的dockerfile中的sdk会使用runtime而不是aspnet。从而导致我的程序在容器中运行失败找不到AspNetCore运行环境。侧面也说明我的程序的确需要的是AspNetCore的运行环境。

Caskia avatar Dec 08 '19 06:12 Caskia

好的,谢谢反馈,我会继续关注一下这个问题。

JeffreySu avatar Dec 08 '19 06:12 JeffreySu