.NET CORE3.1实现微信小程序发送订阅消息_实用技巧

来源:脚本之家  责任编辑:小易  

http://sourceforge.net/projects/hibernate/files/hibernate3/3.3.2.GA/hibernate-distribution-3.3.2.GA-dist.tar.gz/download在这句话Problems with the download? Please use this direct link or try another mirror.点击这个direct link 或者在http://sourceforge.net/projects/hibernate/files/选择你想要的版本www.zgxue.com防采集请勿采集本网。

一、appsettings.json定义小程序配置信息

元数据自动提供 COM 中 IDL 的功能,允许将一个文件同时用于定义和实现。运行库模块 而不用担心显式封送处理或使用自定义的互用代码。 二、属性。 .NET Framewo

"WX": {  "AppId": "wx88822730803edd44",  "AppSecret": "75b269042e8b5026e6ed14aa24ba9353",  "Templates": {  "Audit": {    "TemplateId": "aBaIjTsPBluYtj2tzotzpowsDDBGLhXQkwrScupnQsM",    "PageUrl": "/pages/index/formAudit?formId={0}&tableId={1}",    "MiniprogramState": "developer",    "Lang": "zh_TW",    "Data": {        "Title": "thing6",        "Content": "thing19",        "Date": "date9"      }    }  },  "SignatureToken": "aaaaaa",  "MessageSendUrl": "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={0}",  "AccessTokenUrl": "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}"}

这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。那么,只有" 的大小--- 通过echo XXXX>/proc/sys/net/core/hot_list_length完成。再比如listen函数的

二、编写通用类加载配置

rpm -ivh libXp-1.0.0-8.1.el5.*.rpm rpm -ivh libXau-devel-1.0.1-3.1.*.rpm rpm -ivh libXp 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.

using System;using System.Text;using System.Security.Cryptography;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.Configuration.Json;namespace WXERP.Services{  /// <summary>  /// 项目公有静态类  /// </summary>  public class Common  {    /// <summary>    /// 獲取根目錄    /// </summary>    public static string AppRoot => Environment.CurrentDirectory;// AppContext.BaseDirectory;    /// <summary>    /// 獲取項目配置    /// </summary>    public static IConfiguration Configuration { get; set; }    /// <summary>    /// 加載項目配置    /// </summary>    static Common()    {      Configuration = new ConfigurationBuilder()      .Add(new JsonConfigurationSource      {        Path = "appsettings.json",        ReloadOnChange = true //当appsettings.json被修改时重新加载       })      .Build();    }    /// <summary>    /// SHA1加密    /// </summary>    /// <param name="content">需要加密的字符串</param>    /// <returns>返回40位大寫字符串</returns>    public static string SHA1(string content)    {      try      {        SHA1 sha1 = new SHA1CryptoServiceProvider();        byte[] bytes_in = Encoding.UTF8.GetBytes(content);        byte[] bytes_out = sha1.ComputeHash(bytes_in);        sha1.Dispose();        string result = BitConverter.ToString(bytes_out);        result = result.Replace("-", "");        return result;      }      catch (Exception ex)      {        throw new Exception("Error in SHA1: " + ex.Message);      }    }  }}

irst_pass retry=3 type=/g' -i /etc/pam.d/system-auth 3. 安装Oracle11g 3.1 设置 = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.w

三、编写HttpHelper请求类

rpm -ivh libXp-1.0.0-8.1.el5.*.rpm rpm -ivh libXau-devel-1.0.1-3.1.*.rpm rpm -ivh libXp-de = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.w

using System;using System.Text;using System.Net.Http;using System.Net.Http.Headers;using System.Threading.Tasks;using System.Collections.Generic;namespace WXERP.Services{  /// <summary>  /// HTTP請求輔助類  /// </summary>  public class HttpHelper  {    /// <summary>    /// post同步請求    /// </summary>    /// <param name="url">地址</param>    /// <param name="postData">數據</param>    /// <param name="contentType">application/xml、application/json、application/text、application/x-www-form-urlencoded</param>    /// <param name="headers">請求頭</param>     /// <returns></returns>    public static string HttpPost(string url, string postData = null, string contentType = null, Dictionary<string, string> headers = null)    {      using HttpClient client = new HttpClient();      if (headers != null)      {        foreach (var header in headers)        client.DefaultRequestHeaders.Add(header.Key, header.Value);      }      postData ??= "";      using HttpContent httpContent = new StringContent(postData, Encoding.UTF8);      if (contentType != null)      httpContent.Headers.ContentType = new MediaTypeHeaderValue(contentType);      HttpResponseMessage response = client.PostAsync(url, httpContent).Result;      return response.Content.ReadAsStringAsync().Result;    }    /// <summary>    /// post異步請求    /// </summary>    /// <param name="url">地址</param>    /// <param name="postData">數據</param>    /// <param name="contentType">application/xml、application/json、application/text、application/x-www-form-urlencoded</param>    /// <param name="timeOut">請求超時時間</param>     /// <param name="headers">請求頭</param>     /// <returns></returns>    public static async Task<string> HttpPostAsync(string url, string postData = null, string contentType = null, int timeOut = 30, Dictionary<string, string> headers = null)    {      using HttpClient client = new HttpClient();      client.Timeout = new TimeSpan(0, 0, timeOut);      if (headers != null)      {        foreach (var header in headers)        client.DefaultRequestHeaders.Add(header.Key, header.Value);      }      postData ??= "";      using HttpContent httpContent = new StringContent(postData, Encoding.UTF8);      if (contentType != null)        httpContent.Headers.ContentType = new MediaTypeHeaderValue(contentType);      HttpResponseMessage response = await client.PostAsync(url, httpContent);      return await response.Content.ReadAsStringAsync();    }    /// <summary>    /// get同步請求    /// </summary>    /// <param name="url">地址</param>    /// <param name="headers">請求頭</param>    /// <returns></returns>    public static string HttpGet(string url, Dictionary<string, string> headers = null)    {      using HttpClient client = new HttpClient();      if (headers != null)      {        foreach (var header in headers)        client.DefaultRequestHeaders.Add(header.Key, header.Value);      }      HttpResponseMessage response = client.GetAsync(url).Result;      return response.Content.ReadAsStringAsync().Result;    }    /// <summary>    /// get異步請求    /// </summary>    /// <param name="url"></param>    /// <param name="headers"></param>    /// <returns></returns>    public static async Task<string> HttpGetAsync(string url, Dictionary<string, string> headers = null)    {      using HttpClient client = new HttpClient();      if (headers != null)      {        foreach (var header in headers)        client.DefaultRequestHeaders.Add(header.Key, header.Value);      }      HttpResponseMessage response = await client.GetAsync(url);      return await response.Content.ReadAsStringAsync();    }  }}

子网掩码为255.255.255.0,网关192.168.1.1。 3.1 Windows2000网络设置 ? 开始?设置?控制面板  图片 3-1 ? 选择“网

四、在sqlserver下存储并获取openid,这个主要是因为提交消息并不是在微信小程序端,如果是在微信小程序上发起订阅消息,可以忽略这个步骤

Windows 7 运行环境 DirectX 9.0 and 10.0 .NET Framework 3.5 SP1 nVidia PhysX System XNA Framework Redist 3.1 OpenAL Games For Windows Live CPU Intel Core2 Du

// 创建数据库表create table TBSF_Conmmunicate_WXUser(  ID int identity(1,1) primary key,  Staff_ID varchar(10),  OpenId varchar(50),  SessionKey varchar(50),  UnionId varchar(50),  IsValid bit,)// SqlHelper数据库辅助类来自于CommunicationOperateDBUtility,可以自己编写using System.Data;using System.Text;using CommunicationOperateDBUtility;namespace WXERP.Services.CommunicationOperateDAL{  /// <summary>  /// 微信信息  /// </summary>  public class WXInforDeal  {    private SqlHelper sqlHelper = null;    /// <summary>    /// 初始化數據庫輔助對象    /// </summary>    /// <param name="con"></param>    public WXInforDeal(object con)    {      sqlHelper = new SqlHelper(con);    }    /// <summary>    /// 獲取微信登陸用戶信息    /// </summary>    /// <param name="staffIdList">工號</param>    /// <returns></returns>    public DataSet GetLoginUserInfo(string staffIdList)    {      DataSet ds = new DataSet();      StringBuilder stringBuilder = new StringBuilder();      stringBuilder.Append(" SELECT distinct OpenId FROM ");      stringBuilder.Append(" TBSF_Conmmunicate_WXUser WHERE Staff_ID IN (");      stringBuilder.Append(staffIdList);      stringBuilder.Append(")");      string strSql = stringBuilder.ToString();      sqlHelper.DBRunSql(strSql, ref ds);      return ds;    }  }}

(MDAC) 2.8 SP1 (or later) Microsoft Windows Installer 3.1 Microsoft Core XML Service 2.0 SP3 for Microsoft .NET Redistributable Runtime MSI WSE 3.0 for Microsoft .NET R

五、编写订阅消息基类模型

8 运行环境 XNA Framework Redist 3.1 OpenAL nVidia PhysX System DirectX 9.0 and 10.0 Games For Windows Live .NET Framework 3.5 SP1 [CPU] Intel Core 2 Duo 1.8

using System;using System.Data;using Newtonsoft.Json;using System.Collections.Generic;using WXERP.Services.CommunicationOperateDAL;namespace WXERP.Models{  /// <summary>  /// 訂閲消息請求模型  /// </summary>  public class SubscribeMessageModel  {    /// <summary>    /// 初始化審核訂閲消息    /// </summary>    /// <param name="dbTransOrCnn">數據庫事務</param>    /// <param name="nextAuditStaffId">下一個審核通知用戶工號</param>    public SubscribeMessageModel(object dbTransOrCnn, string nextAuditStaffId)    {      WXInforDeal wxInfoDeal = new WXInforDeal(dbTransOrCnn);      DataSet wxUserInfo = wxInfoDeal.GetLoginUserInfo(nextAuditStaffId);      if (wxUserInfo != null && wxUserInfo.Tables.Count > 0 && wxUserInfo.Tables[0].Rows.Count > 0)      {        Touser = wxUserInfo.Tables[0].Rows[0]["OpenId"].ToString();      }    }    /// <summary>    /// 消息接收者的openid    /// </summary>    [JsonProperty("touser")]    public string Touser { get; set; }    /// <summary>    /// 消息模板ID    /// </summary>    [JsonProperty("template_id")]    public string TemplateId { get; set; }    /// <summary>    /// 點擊模板卡片后的跳轉頁面,僅限本小程序内的頁面,支持帶參數(示例index?foo=bar),該字段不填則不跳轉    /// </summary>    [JsonProperty("page")]    public string Page { get; set; }    /// <summary>    /// 跳轉小程序類型:developer開發版、trial體驗版、formal正式版,默认为正式版    /// </summary>    [JsonProperty("miniprogram_state")]    public string MiniprogramState { get; set; }    /// <summary>    /// 進入小程序查看的語言類型,支持zh_CN(簡體中文)、en_US(英文)、zh_HK(繁體中文)、zh_TW(繁體中文),默認為zh_CN    /// </summary>    [JsonProperty("lang")]    public string Lang { get; set; }    /// <summary>    /// 模板内容    /// </summary>    [JsonProperty("data")]    public Dictionary<string, DataValue> Data { get; set; }  }  /// <summary>  /// 模板内容關鍵字  /// </summary>  public class DataValue  {    /// <summary>    /// 訂閲消息參數值    /// </summary>    [JsonProperty("value")]    public string Value { get; set; }  }  /// <summary>  /// 小程序訂閲消息響應模型  /// </summary>  public class SubscribeMsgResponseModel  {    /// <summary>    /// 錯誤代碼    /// </summary>    public int Errcode { get; set; }    /// <summary>    /// 錯誤信息    /// </summary>    public string Errmsg { get; set; }  }  /// <summary>  /// 小程序獲取token響應模型  /// </summary>  public class AccessTokenResponseModel  {    /// <summary>    /// 小程序訪問token    /// </summary>    public string Access_token { get; set; }    /// <summary>    /// Token過期時間,單位秒    /// </summary>    public int Expires_id { get; set; }    /// <summary>    /// Token創建時間    /// </summary>    public DateTime Create_time { get; set; }    /// <summary>    /// 刷新以後的Token    /// </summary>    public string Refresh_token { get; set; }    /// <summary>    /// 小程序用戶唯一標識,如果用戶未關注公衆號,訪問公衆號網頁也會產生      /// </summary>    public string Openid { get; set; }    /// <summary>    /// 用戶授權的作用域,使用逗號分隔    /// </summary>    public string Scope { get; set; }  }}

WindowsVista、Windows 7 [运行环境] XNA Framework Redist 3.1 OpenAL Visual C++ 2008 SP1 DirectX 9.0 and 10.0 .NET Framework 3.5 SP1 [CPU] Intel core 2 duo

六、实现消息订阅基类,下面的SetTemplateData方法根据自己的情况设置需要推送消息的内容,如果以后有其他订阅消息模板,新增一个类实现SubscribeMessageModel

JAR(详细信息可以查看相关[JIRA]SPR-9669("JIRA")中的cglib包(net.sf.cglib core 3.3.0.BUILD-SNAPSHOT对于4.x版本也是一样的: org.springframework spring-cor

using System;using System.Collections.Generic;using Newtonsoft.Json;using BestSoft.Common.Resources;using BSFWorkFlow.Common.GeneralUtility;using WXERP.Models;namespace WXERP.Services.SubscribeMessage{  /// <summary>  /// 審核訂閲消息  /// </summary>  public class AuditSubscribeMessage : SubscribeMessageModel  {    private string page;    private string lang;    private Dictionary<string, DataValue> data;    /// <summary>    /// 設置小程序OpenId    /// </summary>    /// <param name="dbTransOrCnn">數據庫事務</param>    /// <param name="nextAuditStaffId">下一個審核通知用戶工號</param>    public AuditSubscribeMessage(object dbTransOrCnn, string nextAuditStaffId)    : base(dbTransOrCnn, nextAuditStaffId)    {    }    /// <summary>    /// 消息模板ID    /// </summary>    [JsonProperty("template_id")]    public new string TemplateId => Common.Configuration["WX:Templates:Audit:TemplateId"];    /// <summary>    /// 設置小程序訂閲消息跳轉頁面    /// </summary>    /// <param name="formId"></param>    /// <param name="tableId"></param>    public void SetPageUrl(string formId, string tableId)    {      Page = string.Format(Common.Configuration["WX:Templates:Audit:PageUrl"],      formId, tableId);    }    /// <summary>    /// 點擊模板卡片后的跳轉頁面    /// </summary>    [JsonProperty("page")]    public new string Page    {      get      {        return page;      }      set      {        page = value;        return;      }    }    /// <summary>    /// 跳轉小程序類型    /// </summary>    [JsonProperty("miniprogram_state")]    public new string MiniprogramState => Common.Configuration["WX:Templates:Audit:MiniprogramState"];    /// <summary>    /// 進入小程序查看的語言類型,支持zh_CN(簡體中文)、en_US(英文)、zh_HK(繁體中文)、zh_TW(繁體中文),默認為zh_CN    /// </summary>    [JsonProperty("lang")]    public new string Lang    {      get      {        lang = Common.Configuration["WX:Templates:Audit:Lang"];        if (!string.IsNullOrEmpty(MyHttpContext.Current.Request.Headers["bsLanKind"]))        lang = MyHttpContext.Current.Request.Headers["bsLanKind"];        return lang;      }      set      {        lang = value;        return;      }    }    /// <summary>    /// 設置審核訂閲消息數據    /// </summary>    /// <param name="operation">審核動作:通過、否決、作廢、退回</param>    /// <param name="itemAuditStatus">審核狀態:1代表審核完畢</param>    /// <param name="currentWorkflowName">審核標題</param>    public void SetTemplateData(WFAuditOperation operation, WFAuditItemStatus itemAuditStatus, string currentWorkflowName)    {      string tip_msg = "";      switch (operation)      {        case WFAuditOperation.AuditPassAndAgree:          if (itemAuditStatus == WFAuditItemStatus.SuccessfulToFinishAllAudits)            tip_msg = GeneralFunction.ReplaceNullOrEmptyStr(SourcesWarehouse.GetStringSources("WFEngine_FinishAuditTip"), "您的單據已審核完成!");          else            tip_msg = GeneralFunction.ReplaceNullOrEmptyStr(SourcesWarehouse.GetStringSources("WFEngine_AuditAgreeTip"), "您有一筆新單據待審核!");        break;        case WFAuditOperation.AuditPassButDegree:          tip_msg = GeneralFunction.ReplaceNullOrEmptyStr(SourcesWarehouse.GetStringSources("WFEngine_AuditDegreeTip"), "您提交的單據等待異議!");        break;        case WFAuditOperation.AuditAbort:          tip_msg = GeneralFunction.ReplaceNullOrEmptyStr(SourcesWarehouse.GetStringSources("WFEngine_AuditAbortTip"), "您提交的單據已被作廢!");        break;        case WFAuditOperation.AuditBack:          tip_msg = GeneralFunction.ReplaceNullOrEmptyStr(SourcesWarehouse.GetStringSources("WFEngine_AuditBackTip"), "您提交的單據已被退回修正!");        break;      }      string title = Common.Configuration["WX:Templates:Audit:Data:Title"];      string content = Common.Configuration["WX:Templates:Audit:Data:Content"];      string date = Common.Configuration["WX:Templates:Audit:Data:Date"];      Dictionary<string, DataValue> data = new Dictionary<string, DataValue>()      {        {title, new DataValue{ Value= currentWorkflowName }},        {content, new DataValue{ Value= tip_msg }},        {date, new DataValue{ Value= DateTime.Now.ToShortDateString() }}      };      Data = data;    }    /// <summary>    /// 審核訂閲消息數據    /// </summary>    [JsonProperty("data")]    public new Dictionary<string, DataValue> Data    {      get      {        return data;      }      set      {        data = value;        return;      }    }  }}

7 [运行环境] XNA Framework Redist 3.1 OpenAL nVidia PhysX System DirectX 9.0 and 10.0 Games For Windows Live .NET Framework 3.5 SP1 [CPU] Intel Core 2

七、编写发送订阅消息,消息推送配置签名认证

using System;using System.Threading.Tasks;using System.Collections.Generic;using Newtonsoft.Json;using WXERP.Models;namespace WXERP.Services{  /// <summary>  /// 系統消息上下文  /// </summary>  public class MessageContext  {    /// <summary>    /// 獲取AccessToken的全局鎖    /// </summary>    private readonly static object SyncLock = new object();    private static Dictionary<string, AccessTokenResponseModel> tokenCache = new Dictionary<string, AccessTokenResponseModel>();    /// <summary>    /// 發送訂閲消息    /// </summary>    /// <param name="msg">消息内容</param>    /// <param name="errMsg">可能由於獲取的token錯誤</param>    /// <returns></returns>    public static bool SendSubscribeMsg(SubscribeMessageModel msg, out string errMsg)    {      errMsg = "";      try      {        string token = GetAccessToken();        if (token.Length < 20)        {          errMsg = "Failed to send subscription message, Access token error!";          return false;        }        string url = string.Format(Common.Configuration["WX:MessageSendUrl"], token);        string requestJson = JsonConvert.SerializeObject(msg);        string responseJson = HttpHelper.HttpPost(url, requestJson, "application/json", null);        var msgResponse = JsonConvert.DeserializeObject<SubscribeMsgResponseModel>(responseJson);        if (msgResponse.Errcode != 0)        {          errMsg = string.Format("Failed to send subscription message, {0}", msgResponse.Errmsg);          return false;        }      }      catch (Exception exp)      {        throw new Exception("SendSubscribeMsg: " + exp.Message);      }      return true;    }    /// <summary>    /// 獲取小程序訪問token    /// </summary>    /// <returns></returns>    private static string GetAccessToken()    {      lock (SyncLock)      {        string appid = Common.Configuration["WX:AppId"];        string appsecret = Common.Configuration["WX:AppSecret"];        string accessTokenUrl = string.Format(Common.Configuration["WX:AccessTokenUrl"], appid, appsecret);        AccessTokenResponseModel result = null;        if (tokenCache.ContainsKey(appid))          result = tokenCache[appid];        if (result == null)        {          string responseJson = HttpHelper.HttpGet(accessTokenUrl, null);          result = JsonConvert.DeserializeObject<AccessTokenResponseModel>(responseJson);          result.Create_time = DateTime.Now;          tokenCache.Add(appid, result);        }        else if (DateTime.Compare(result.Create_time.AddSeconds(result.Expires_id), DateTime.Now) < 1)        {          string responseJson = HttpHelper.HttpGet(accessTokenUrl, null);          result = JsonConvert.DeserializeObject<AccessTokenResponseModel>(responseJson);          result.Create_time = DateTime.Now;          tokenCache[appid] = result;        }        return result.Access_token;      }    }    /// <summary>    /// 驗證消息來自於微信服務器    /// </summary>    /// <param name="signature">微信加密簽名,signature結合了開發者填寫的token、timestamp、nonce</param>    /// <param name="timestamp">時間戳</param>    /// <param name="nonce">隨機數</param>    /// <returns></returns>    public async Task<bool> CheckSignature(string signature, string timestamp, string nonce)    {      string token = Common.Configuration["WX:SignatureToken"];      string[] tmpArr = { token, timestamp, nonce };      Array.Sort(tmpArr);      string tmpStr = string.Join("", tmpArr);      tmpStr = Common.SHA1(tmpStr);      if (!tmpStr.Equals(signature, StringComparison.OrdinalIgnoreCase))        return false;      await Task.CompletedTask;      return true;    }  }}

八、编写消息推送配置签名认证控制器

using Microsoft.AspNetCore.Authorization;using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;using WXERP.Services;namespace WXERP.Controllers{  /// <summary>  /// 消息控制器  /// </summary>  [Route("api/[controller]")]  [ApiController]  public class MessageController : ControllerBase  {    private readonly MessageContext _context;    /// <summary>    /// 初始化消息    /// </summary>    public MessageController()    {      _context = new MessageContext();    }    /// <summary>微信消息</summary>    /// <remarks>驗證消息來自於微信服務器</remarks>    /// <param name="signature">微信加密簽名,signature結合了開發者填寫的token、timestamp、nonce</param>    /// <param name="timestamp">時間戳</param>    /// <param name="nonce">隨機數</param>    /// <param name="echostr">隨機字符串</param>    /// <returns></returns>    [HttpGet("checkSignature")]    [AllowAnonymous]    public async void CheckSignature(string signature,string timestamp,string nonce,string echostr)    {      bool result = await _context.CheckSignature(signature, timestamp, nonce);      if (result)      {        HttpContext.Response.ContentType = "text/plain; charset=utf-8";        await HttpContext.Response.WriteAsync(echostr);      }      else      {        HttpContext.Response.StatusCode = 409;        HttpContext.Response.ContentType = "text/plain; charset=utf-8";        await HttpContext.Response.WriteAsync("error");      }    }  }}

九、调用小程序订阅消息,需要自己实现其他逻辑

//@iFormSaveDAL.GetTran 数据库链接事务,如果发送消息失败,应该回滚提交的表单数据//@wFControl.NextAuditNotifyStaffIDStr 下一个审核用户的工号//@auditPageData.FormID 表单编号//@auditPageData.MainRecordID 表单数据ID//@operationByCode 一个枚举类型,前端传递的:审核通过、作废、退回等//@wFControl.ItemAuditStatus 一个枚举类型,如果全部审核完毕为1,否则为0//@wFControl.CurrentWorkflowName 当前流程的名称,例如:请假单审核//@SaveAfterInfo 全局字符变量,用于保存结果信息AuditSubscribeMessage auditMsg = new AuditSubscribeMessage(iFormSaveDAL.GetTran, wFControl.NextAuditNotifyStaffIDStr);auditMsg.SetPageUrl(auditPageData.FormID, auditPageData.MainRecordID);auditMsg.SetTemplateData(operationByCode, wFControl.ItemAuditStatus, wFControl.CurrentWorkflowName);if (!string.IsNullOrEmpty(auditMsg.Touser)){  if (!MessageContext.SendSubscribeMsg(auditMsg, out messageStr))  {    SaveAfterInfo = messageStr;    return false;  }}

到此这篇关于.NET CORE3.1实现微信小程序发送订阅消息的文章就介绍到这了,更多相关.NET CORE 小程序发送订阅内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:Asp.net core利用MediatR进程内发布/订阅详解ASP.NET Core实现单体程序的事件发布/订阅详解.net core如何使用Redis发布订阅

Java、Sliverlight、Adobe flash、Visual C++、.Net Framework、DirectX等等运行库列表: 1、常用运行库Visual Basic 6.0 公共控件Visual C++ 2003 运行库(VC7)Visual C++ 2005 运行库(VC8)Visual C++ 2008 运行库(VC9)Visual C++ 2010 运行库(VC10) Microsoft Core XML Services 6.0 SP2(MSXML)Microsoft .NET Framework 3.5 SP1(含2.0/3.0)Microsoft .NET Framework 4.02、游戏运行库 DirectX 9.0C (2010.6)Open Audio Library 2.07(OpenAL)NVIDIA PhysX System 9.10.0514Microsoft XNA Framework 3.13、其他运行库Java 运行库 7 Update1(JRE) 微软 ActiveX 公共控件微软标准C运行库(VC1)Visual Basic 1 运行库(VB1)Visual Basic 2 运行库(VB2)Visual Basic 3 运行库(VB3)Visual Basic 4 运行库(VB4) 收录说明:1、VC2-VC6,VB5-VB6已经包含在Windows XP和更新的系统中,故不收录。 安装说明:1、下载吧常用运行库总汇只支持32位系统。2、静默安装参数:/S 示例:RuntimeLibraries_1.1_XiaZaiBa.exe /S3、Microsoft .NET Framework 3.5 SP1 只支持Windows XP 和Windows 2003系统(安装.NET较慢,请耐心等待)。4、Microsoft .NET Framework 3.5 SP1安装前,需要安装VC8、VC9运行环境。 5、Microsoft XNA Framework 3.1 安装前,需要安装.net运行环境内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 三步将asp.net页面输出到excel里
  • .net core ef core调用存储过程的方式
  • mvc网站开发之权限管理篇
  • treeview无刷新获取text及value实现代码
  • win10下vs2015配置opencv3.1.0详细过程
  • asp.net 路径问题的解决方法
  • 通过radiobutton对datalist控件进行单选实例说明
  • asp.net 获取datalist中checkbox的值的小结
  • 在 .net framework 2.0 中未处理的异常导致基于 asp.net 的应用程
  • 如何使用rotativa在asp.net core mvc中创建pdf详解
  • Win7运行库一共有哪几种啊?一般需要哪几种就够了
  • hibernate3.3.1在哪下载啊,官网下不了,麻烦谁给我地址吧!
  • 什么是IPX?
  • 这电脑能玩使命召唤8或9吗
  • 什么是元数据
  • epoll和select的区别
  • 麒麟linux 安装oracle需要配置吗
  • 阿里云服务器centos怎么安装oracle
  • linux 下怎么查看数据库oracle的具体的配置
  • 路由器的安装指南?
  • 想问一下这个配置可以玩GTA4吗
  • Loadrunner analysis启动报错
  • 我这配置能用gta4什么enb
  • 再问一遍特大城市2011的配置要求
  • maven 怎么 自定义404
  • 什么电脑可以玩战地3和侠盗猎车手4,分辨率开到最高,特效全开
  • 电脑能玩侠盗飞车自由城之章吗
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础应用实用技巧自学过程首页asp.netasp.net core利用mediatr进程内发布/订阅详解asp.net core实现单体程序的事件发布/订阅详解.net core如何使用redis发布订阅三步将asp.net页面输出到excel里.net core ef core调用存储过程的方式mvc网站开发之权限管理篇treeview无刷新获取text及value实现代码win10下vs2015配置opencv3.1.0详细过程asp.net 路径问题的解决方法通过radiobutton对datalist控件进行单选实例说明asp.net 获取datalist中checkbox的值的小结在 .net framework 2.0 中未处理的异常导致基于 asp.net 的应用程如何使用rotativa在asp.net core mvc中创建pdf详解java正则表达式 pattern和matche未将对象引用设置到对象的实例 (asp.net(c#)网页跳转七种方法小结未能加载文件或程序集“xxx”或它asp.net“服务器应用程序不可用”asp.net中的几种弹出框提示基本实asp.net gridview 72般绝技asp.net生成excel并导出下载五种asp.net对路径"xxxxx"asp.net汉字转拼音和获取汉字首字asp.net通过配置文件连接access的方法.net事件监听机制的局限与扩展分析asp.net 每天定点执行任务asp.net mvc实现图片上传、图片预览显示asp.net mvc实时生成缩率图到硬盘asp.net分页控件aspnetpager的样式美化asp.net core di手动获取注入对象的方法.net decimal保留指定的小数位数(不四舍五asp.net fileupload控件上传图片并预览图asp.net menu控件在google chrome和safar
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved