标签 .NET 下的文章 - 一叶舟轻
首页
友链
关于
搜 索
1
解决Typecho不能加载css和js的问题
36 阅读
2
zeroiter+nginx 内网穿透
35 阅读
3
blazor 自动热加载 动态调试方法
30 阅读
4
hyper-v中的虚拟机Ubuntu Server磁盘扩容
26 阅读
5
.Net6项目发布出错(检测到包降级: System.xxxx 从 x.x.x 降级到 x.x.x。直接从项目引用包以选择不同版本。)
25 阅读
《也许你也想建站?》
《代码的海洋》
《生活日常》
《技能get》
登录
搜 索
标签搜索
.NET
Docker
Linux
VisualStudio
Blazor
相聚时光
国庆
Https
Selenium
BootstrapBlazor
.NET8
内网穿透
nginx
zeroiter
家电
维修
Wordpress
ssh
爬虫
Typecho
羽裳
累计撰写
17
篇文章
累计收到
0
条评论
首页
栏目
《也许你也想建站?》
《代码的海洋》
《生活日常》
《技能get》
页面
友链
关于
用户登录
登录
找到
5
篇与
.NET
相关的结果
2023-10-21
vs中以 docker 的方式启动调试,一直卡在 `Info: C:lUserstliushlvsdbgvs2017u5 exists, deleting.` 准备阶段的问题
vs中以 docker 的方式启动调试,一直卡在 Info: C:lUserstliushlvsdbgvs2017u5 exists, deleting. 准备阶段的问题。这里面有三个关键的信息第一个是使用的 vsdbg 版本号,也就是 Info: Using vsdbg version '17.7.10808.2' 中的 17.7.10808.2 版本号,请记下第二个是 Runtime ID 号。也就是 Info: Using Runtime ID 'linux-x64' 的 linux-x64 号,也请记下最后是输出的文件路径,也就是 Info: C:\Users\liush\vsdbg\vs2017u5 exists, deleting. 的 C:\Users\liush\vsdbg\vs2017u5 路径,请记下手动下载需要拼接下载路径,下载链接路径是 https://vsdebugger.azureedge.net/vsdbg-(你的版本号 .号换成-号)/vsdbg-(你的Runtime ID).zip根据上面所记的信息,这里的 vsdbg-(你的版本号 .号换成-号) 应该替换为 17.7.10808.2 版本号,同时将此版本的 . 号更改为 - 号,更改之后的内容如下 vsdbg-17-7-10808-2 这就是拼接的第一个版本号然后再拼接上 Runtime ID 号,如上面记下的第二个关键信息,也就是 linux-x64 替换如下 vsdbg-linux-x64.zip 最后拼接的链接如下https://vsdebugger.azureedge.net/vsdbg-17-7-10808-2/vsdbg-linux-x64.zip使用 如 dotnet FileDownloader 或 IDM 等工具下载此压缩包。(我这时直接使用的 Free Download Manager)下载完成之后,将压缩包解压到输出的文件路径,也就是刚才记住的第三个信息。如我的路径是 C:\Users\liush\vsdbg\vs2017u5 文件夹,解压缩时不带上压缩包名字(没有vs2017u5文件夹直接在vsdbg中新建一个就行了)最终解压缩之后的 C:\Users\liush\vsdbg\vs2017u5 大概如下接下来在 C:\Users\liush\vsdbg\vs2017u5 文件夹创建两个文件,分别是 success_version.txt 和 success_rid.txt 文件在 success_version.txt 文件里面填写 VSDbg 版本号,也就是刚才记下的第一个信息,如我的是 16.6.20415.1 版本号在 success_rid.txt 文件里面填写 Runtime ID 号,也就是刚才记下的第二个信息,如我的是 linux-x64 号完成之后,重新生成。如果上面步骤没有错的话,应该很快就会看到 vs2017u5 exists, deleting 这一步骤很快就跳过了跳过之后如果可以看到又卡在了 linux-musl-x64 的下载这里,如以下输出内容依然需要记下三个关键信息,和上面的差不多第一个信息是版本号,也就是 Info: Using vsdbg version '16.8.10924.3' 的 16.8.10924.3 版本号,请记下第二个是 Runtime ID 号。也就是 Info: Using Runtime ID 'linux-musl-x64' 的 linux-musl-x64 号,也请记下第三个信息是输出路径,也就是 C:\Users\liush\vsdbg\vs2017u5\linux-musl-x64 文件夹,对比上面的步骤,可以看到是放在 vs2017u5 的 linux-musl-x64 文件夹注意第二个信息的是 linux-musl-x64 和上面步骤的 linux-x64 不相同接下来拼接下载路径,和上面步骤差不多,下载路径是 https://vsdebugger.azureedge.net/vsdbg-(你的版本号 .号换成-号)/vsdbg-(你的Runtime ID).zip用记住的第一个信息替换版本号,如使用 16.8.10924.3 替换 vsdbg-(你的版本号 .号换成-号) 可以拿到 vsdbg-16-8-10924-3 版本号拼接起来的链接大概如下https://vsdebugger.azureedge.net/vsdbg-16-8-10924-3/vsdbg-linux-musl-x64.zip下载后解压到vs2017u5\linux-musl-x64文件夹复制刚才创建的 success_version.txt 和 success_rid.txt 文件,放在 vs2017u5\linux-musl-x64 文件夹在 success_version.txt 文件里面填写 VSDbg 版本号,也就是刚才记下的第一个信息,如我的是 16.8.10924.3 版本号在 success_rid.txt 文件里面填写 Runtime ID 号,也就是刚才记下的第二个信息,如我的是 linux-musl-x64 最后需要重启一下 VisualStudio以上参考自:https://blog.csdn.net/lindexi_gd/article/details/106925674
2023年10月21日
15 阅读
0 评论
0 点赞
2023-10-17
.Net6项目发布出错(检测到包降级: System.xxxx 从 x.x.x 降级到 x.x.x。直接从项目引用包以选择不同版本。)
发布时出错,“错误形式的警告: 检测到包降级: xxxx 从 x.x.x 降级到 x.x.x。直接从项目引用包以选择不同版本。 ”一眼望过去一头雾水,好在人家给了解决方案“直接从项目引用包以选择不同版本。”也可以参考官网解释:https://learn.microsoft.com/zh-cn/nuget/reference/errors-and-warnings/nu1605原因:项目中引用的第三方包中的包有冲突,所以需要在该项目中决定到底使用哪个版本的,所以需要在该项目中直接引用发生冲突的包的高版本。所以需要自己手动将所有冲突的都安装到项目中(直接安装最高版本就行了)(工作量有点大啊 😦 )
2023年10月17日
25 阅读
0 评论
0 点赞
2023-10-15
.Net6 Swagger文档设置同时支持 自定义分组+Api版本分组
.NET webApi 中Swagger默认是不会进行任何分组的,就只是罗列出来罢了。这样当用的时间长了,api变多了,项目变得复杂了,看起来就会很难受了,这时候对swagger的分组就变得很有必要了。网上的浏览下来,主要有两种分组方式:自定义分组、通过版本控制分组但这两种情况实际上在开发中都会出现,所以就在想要怎么才能同时满足两种分组方式,但实际上这两种方式都需要用到GroupName参数,其中一个总会覆盖另一个,网上也没有搜到现成的,只有自己动手撸了 😅 。(纯粹自己瞎整出来的,不一定是最佳方案,可以当作一种方向参考,也欢迎评论区讨论)先看最终显示效果吧:这里可以看到每个文档的分组条件格式是【自定义】:版本号,是不是看着还行 😋 虽然下拉框看着挺奇怪的,但在不改动前端的情况下也就只能先这么整了 😅 。下面直接看代码吧~首先是Swagger的配置信息这里定义了一个自定义分组Config,其中第一个是 默认分组,给那些不设置自定义分组的api留的,这个是必须要有的,后面的自己根据实际设置就行//Swagger 文档配置 "Swagger": { "Doc": { "Content": { "Name": "workbench-for-mr.liu", "Email": "---" }, "Description": ".NET6 WebAPI 文档 By workbench", "Title": ".NET6 WebAPI 文档" }, //自定义分组 "Config": [ { "GroupName": "", "Title": "【默认分组】" }, { "GroupName": "Open", "Title": "【开放接口】" }, { "GroupName": "Test", "Title": "【内部测试】" } ] }Program.cs配置Swgger根据前一步配置的自定义分组和api的版本控制(并过滤掉不需要的分组)生成Swagger文档//Swagger builder.Services.AddSwaggerGen(c => { #region 文档分组(自定义+版本控制) //根据API版本信息生成的API文档 var provider = builder.Services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>(); var _config = AppConfig.Get_appsettting<List<SwaggerConfig.groupConfig>>("Swagger:Config"); //当前所有的api var _apiDescriptionsProvider = builder.Services.BuildServiceProvider().GetService<Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupCollectionProvider>(); var appApis = _apiDescriptionsProvider.ApiDescriptionGroups.Items .SelectMany(group => group.Items); //自定义分组 _config.ForEach(group => { //版本号分组 foreach (var description in provider.ApiVersionDescriptions) { //是否存在符合的api var _api = appApis.Where(x => ((group.GroupName.Equals("") && !x.RelativePath.Contains(""))) && description.GroupName.Equals(x.GroupName)); if (_api.Count() > 0) { string _GName = (string.IsNullOrWhiteSpace(group.GroupName) ? "" : group.GroupName + ":") + description.GroupName; c.SwaggerDoc(_GName, new OpenApiInfo { Contact = new OpenApiContact { Name = AppConfig.Get_appsettting("Swagger:Doc:Content:Name"), Email = AppConfig.Get_appsettting("Swagger:Doc:Content:Email") }, Description = AppConfig.Get_appsettting("Swagger:Doc:Description"), Title = group.Title, Version = "v" + description.ApiVersion.ToString() }); } } }); //在Swagger文档显示的API地址中将版本信息参数替换为实际的版本号 c.DocInclusionPredicate((version, apiDescription) => { //= "api//v/WeatherForecast" var _GName = _config.Where(x => !string.IsNullOrWhiteSpace(x.GroupName) && apiDescription.RelativePath.Contains(x.GroupName)).FirstOrDefault()?.GroupName; var _GName2 = apiDescription.GroupName; if (!string.IsNullOrWhiteSpace(_GName)) _GName2 = _GName + ":" + _GName2; if (!version.Equals(_GName2)) return false; IEnumerable<string>? values = apiDescription!.RelativePath.Split('/').Select(x => Regex.Replace(x.Replace("v", apiDescription.GroupName), "\\", _GName ?? "")).Where(x => !string.IsNullOrWhiteSpace(x)); apiDescription.RelativePath = String.Join("/", values); return true; }); #endregionSwaggerUI 也需要同时设置 app.UseSwaggerUI(c => { #region 文档分组(自定义+版本控制) var provider = app.Services.GetRequiredService<IApiVersionDescriptionProvider>(); var _config = AppConfig.Get_appsettting<List<SwaggerConfig.groupConfig>>("Swagger:Config"); //当前所有的api var _apiDescriptionsProvider = builder.Services.BuildServiceProvider().GetService<Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupCollectionProvider>(); var appApis = _apiDescriptionsProvider.ApiDescriptionGroups.Items .SelectMany(group => group.Items); _config.ForEach(group => { foreach (var description in provider.ApiVersionDescriptions.Reverse()) { //是否存在符合的api var _api = appApis.Where(x => ((group.GroupName.Equals("") && !x.RelativePath.Contains(""))) && description.GroupName.Equals(x.GroupName)); if (_api.Count() > 0) { c.SwaggerEndpoint($"/swagger//swagger.json", group.Title + ":" + description.GroupName); //分组显示 } } }); #endregion });最后看看结果吧使用方式,[ApiVersion("0")]不变,和之前一样就行,至于[ApiExplorerSettings(GroupName ="")]由于会和API版本控制冲突,所以这个就不能用了,改成直接在路由前面加上特殊识别内容/,其中Test需要和前面设置的 自定义分组 配置项的GroupName一致才行,完整情况就像下面这样: /// <summary> /// 示例控制器 /// </summary> [Route("/v/[controller]")] [ApiController] [ApiVersion("0")] //[ApiExplorerSettings(GroupName ="")] public class WeatherForecastController : ControllerBase { [HttpGet] public ReturnInfo get() { return new ReturnInfo() ; } [HttpGet("ssssss")] [ApiVersion("3")] public ReturnInfo hhh() { return new ReturnInfo() ; } }可以看到,这里有两个api,其中一个将版本设置成了v3,Controller上添加了自定义分组Test,所以等会就会分成Test:v0和Test:v3两个文档但是,请求路径会多带一个Test,也会多出一个路径参数第一个/Test/,必须要留着(其实看着条理也挺清晰的,留着也还不错)第二个是路径参数,是因为我前面写的的关系,其实直接去掉就行了(但是我还是想跟正常的部分有个区分),也可以像下面这样,直接删除GName路径参数就行了(由于这是之前版本控制就配置好了的,所以直接就复制一份改改就行了)/// <summary> /// 取消swagger文档需要输入版本信息 /// </summary> public class RemoveVersionFromParameter : IOperationFilter { public void Apply(OpenApiOperation operation, OperationFilterContext context) { var versionParameter = operation.Parameters.FirstOrDefault(p => p.Name == "version"); if (versionParameter != null) { operation.Parameters.Remove(versionParameter); } //也删掉GName路径参数 var versionParameter2 = operation.Parameters.FirstOrDefault(p => p.Name.Contains("gName")); if (versionParameter2 != null) { operation.Parameters.Remove(versionParameter2); } } }这时候再看也就没有多余的参数了,请求也是没问题的完事,大概就是这样 😏
2023年10月15日
22 阅读
0 评论
0 点赞
2023-09-26
.NET + Selenium + Chrome实现爬虫
代码案例抓取目标(天气网)列表: http://www.weather.com.cn/index/jqzdtqsj/index.shtml以及列表下面的新闻详情页面预览图下载对浏览器的驱动程序Chromium/ChromeWindows/macOS/Linuxhttps://chromedriver.storage.googleapis.com/index.htmlEdgeWindows/macOShttps://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ namespace teestWebCrawler { public class Model { public class ZhongDaTianQiShiJian { public string index public string imgUrl public string jumpUrl public string dateTime public string title public string content public NewPage _newPage public class NewPage { public string articleTittle public string articleTimeSizeleft public string articleContent } } } } // Program.cs using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Edge; using OpenQA.Selenium.Support.UI; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; using static teestWebCrawler.Model; Console.WriteLine("Hello, World!"); #region Chrome //string driverServicePath = Path.Combine(Directory.GetCurrentDirectory(), "chromedriver_win32"); //ChromeDriverService service = ChromeDriverService.CreateDefaultService(driverServicePath); ////在平时开发过程中,我们其实没必要每次都打开浏览器,这速度非常缓慢,我们可以设置浏览器属性 //ChromeOptions options = new ChromeOptions(); //options.AddArgument("--headless"); //options.AddArgument("--no-sandbox"); //options.AddArgument("--incognito"); //options.AddArgument("--disable-gpu"); //options.AddArgument("--disable-gpu-program-cache"); //options.AddArgument("--log-level=3"); //ChromeDriver driver = new ChromeDriver(service, options); //ChromeDriver driver = new ChromeDriver(service); #endregion #region Edge string driverServicePath = Path.Combine(Directory.GetCurrentDirectory(), "edgedriver_win64"); EdgeDriverService service = EdgeDriverService.CreateDefaultService(driverServicePath); //配置不打开浏览器 //EdgeOptions options = new EdgeOptions(); //options.AddArgument("--headless"); //options.AddArgument("--no-sandbox"); //options.AddArgument("--incognito"); //options.AddArgument("--disable-gpu"); //options.AddArgument("--disable-gpu-program-cache"); //options.AddArgument("--log-level=3"); //EdgeDriver driver = new EdgeDriver(service, options); EdgeDriver driver = new EdgeDriver(service); #endregion testZhongDaTianQiShiJian(); // -------------------------------------------------------------------- #region 执行内容 //抓取近期重大天气事件 void testZhongDaTianQiShiJian() { //要爬取的网页 string url = "http://www.weather.com.cn/index/jqzdtqsj/index.shtml"; //获取节点(没获取到会抛异常) Func<string, IWebElement, IWebElement> getElementHelp = (_CssSelector, _item) => { try { return _item.FindElement(By.CssSelector("img")); } catch { return null; } }; //抓取新闻详情页面 Action<IWebElement, ZhongDaTianQiShiJian> getLinkContent = (_item, _data) => { Console.WriteLine("\n准备抓取内容页"); //点击列表 _item.FindElement(By.CssSelector("dt")).Click(); Thread.Sleep(1500);//等一下 //获取当前窗口句柄 string currentHandle = driver.CurrentWindowHandle; //获得所有的窗口句柄,如果不是currentHandle,则进入 ReadOnlyCollection<string> currentHandleAll = driver.WindowHandles; string LinkCurrentHandle = ""; for (int i = 0; i < currentHandleAll.Count; i++) { if (!currentHandle.Equals(currentHandleAll[i])) { LinkCurrentHandle = currentHandleAll[i]; break; } } //切换到这个窗口 driver.SwitchTo().Window(LinkCurrentHandle); //标题 string articleTittle = driver.FindElement(By.CssSelector(".articleBox .articleTittle")).Text; //来源 string articleTimeSizeleft = driver.FindElement(By.CssSelector(".articleBox .articleTimeSizeleft")).Text; //内容 var listP = driver.FindElements(By.CssSelector(".articleBox .articleBody>p")); //重新组装成Markdown StringBuilder sbMK = new StringBuilder(); foreach (var item in listP) { var img = getElementHelp("img", item); var strong = getElementHelp("strong", item); if (img != null) { string src = img.GetAttribute("src"); string alt = img.GetAttribute("alt"); sbMK.AppendLine($" ![]() "); } else if (strong != null) { sbMK.AppendLine($"### "); } else { sbMK.AppendLine(item.Text); } } _data._newPage = new ZhongDaTianQiShiJian.NewPage { articleTittle = articleTittle, articleTimeSizeleft = articleTimeSizeleft, articleContent = sbMK.ToString(), }; //回到列表窗口 driver.SwitchTo().Window(currentHandle); }; List<ZhongDaTianQiShiJian> listShiJian = new List<ZhongDaTianQiShiJian>(); //抓取列表页面 Action getPageContent = null; getPageContent = () => { string current = driver.FindElement(By.CssSelector(".content_l>.fanye .current")).Text; Console.WriteLine($"=============当前正在抓取 [第页]==========\n"); //获取到新闻列表 ReadOnlyCollection<IWebElement> sky = driver.FindElements(By.CssSelector(".content_l>dl")); Console.WriteLine($"共获取个新闻"); int index = 0; foreach (var item in sky) { //测试(每⻚只取第⼀个) if (index != 0) continue; index++; string _idxTxt = $"_"; string imgUrl = item.FindElement(By.CssSelector("dt>a>img")).GetAttribute("src"); string jumpUrl = item.FindElement(By.CssSelector("dt>a")).GetAttribute("href"); string dateTime = item.FindElement(By.CssSelector("dd>h3>span")).Text; string title = item.FindElement(By.CssSelector("dd>h3>a")).Text; string content = item.FindElement(By.CssSelector("dd>p")).Text; ZhongDaTianQiShiJian _data = new ZhongDaTianQiShiJian { index = _idxTxt, imgUrl = imgUrl, jumpUrl = jumpUrl, dateTime = dateTime, title = title, content = content }; //抓取内容页 getLinkContent(item, _data); //将数据存储起来 listShiJian.Add(_data); } #region 下一页 //按钮 "下一页" 是否还可以点击 string disabled = driver.FindElement(By.CssSelector(".content_l>.fanye>.manu .disabled")).Text; Console.WriteLine("disabled:" + disabled); bool isdisabled = disabled == "下一页"; if (!isdisabled) { try { //点击下一页 driver.FindElement(By.CssSelector(".content_l>.fanye>.manu a:last-of-type")).Click(); Console.WriteLine($"[] 点击下一页"); //Selenium "显示等待",等待页面加载完成并满足设定的条件,若等待超过设定时间会抛出异常 WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); //等待页面上的元素加载完成 IWebElement? element = wait.Until((d) => { try { return driver.FindElement(By.CssSelector(".content_l>h2")); } catch (Exception ex) { return null; } }); if (element != null) { Console.WriteLine($"下一页 [] 继续加载"); getPageContent(); } } catch (Exception ex) { Console.WriteLine($"[] 加载“下一页”时出错,异常:", ex.Message); } } else { Console.WriteLine($"[] 没有更多了"); } #endregion }; //打开网页 driver.Navigate().GoToUrl(url); Console.WriteLine("** 开始Start **"); //开始执行 Console.WriteLine("getPageContent(),递归,GO"); getPageContent(); Console.WriteLine("\n*******************************************\n"); Console.WriteLine("打印结果"); //打印列表 foreach (ZhongDaTianQiShiJian item in listShiJian) { Console.WriteLine($"\n【】"); Console.WriteLine($"title:"); Console.WriteLine($"dateTime:"); Console.WriteLine($"imgUrl:"); Console.WriteLine($"jumpUrl:"); Console.WriteLine($"content:"); Console.WriteLine("-----------------[新闻详情]--------------------"); Console.WriteLine($"articleTittle:"); Console.WriteLine($"articleTimeSizeleft:"); Console.WriteLine($"articleContent:"); } //释放资源、关闭浏览器 driver.Dispose(); driver.Quit(); Console.WriteLine("** 结束End **"); } #endregion查看结果Hello, World! Starting Microsoft Edge WebDriver 118.0.2088.76 (d3ddcf1d51d5981b1862597e6ea77f06d265a377) on port 64378 To submit feedback, report a bug, or suggest new features, please visit https://github.com/MicrosoftEdge/EdgeWebDriver Only local connections are allowed. Please see https://aka.ms/WebDriverSecurity for suggestions on keeping Microsoft Edge WebDriver safe. Microsoft Edge WebDriver was started successfully. [30768:30380:1028/194629.380:ERROR:policy_logger.cc(154)] :components\enterprise\browser\controller\chrome_browser_cloud_management_controller.cc(163) Cloud management controller initialization aborted as CBCM is not enabled. [30768:30380:1028/194629.405:ERROR:assistance_home_client.cc(32)] File path C:\Users\liush\AppData\Local\Temp\scoped_dir20464_609892831\Default DevTools listening on ws://127.0.0.1:64381/devtools/browser/f03838e5-a03a-480a-a829-bf59250e1fc1 ** 开始Start ** getPageContent(),递归,GO =============当前正在抓取 [第1页]========== 共获取20个新闻 准备抓取内容页 disabled:上一页 [1] 点击下一页 下一页 [1] 继续加载 =============当前正在抓取 [第2页]========== 共获取20个新闻 准备抓取内容页 [30768:30380:1028/194641.397:ERROR:fallback_task_provider.cc(124)] Every renderer should have at least one task provided by a primary task provider. If a "Renderer" fallback task is shown, it is a bug. If you have repro steps, please file a new bug and tag it as a dependency of crbug.com/739782. [30768:30380:1028/194642.700:ERROR:smartscreen_dns_resolver.cc(110)] SmartScreenDnsResolver::OnComplete Error: -7 DidTimeOut: 1 URL: http://www.weather.com.cn/index/2023/10/3657061.shtml [30768:30380:1028/194642.700:ERROR:smartscreen_dns_resolver.cc(110)] SmartScreenDnsResolver::OnComplete Error: -7 DidTimeOut: 1 URL: http://www.weather.com.cn/index/jqzdtqsj/index_2.shtml disabled:下一页 [2] 没有更多了 ******************************************* 打印结果 【1_1】 title:广东广西等地本周末降雨增强局地有大暴雨 中东部气温持续偏暖 dateTime:2023-10-28 07:53:21 imgUrl:http://i.weather.com.cn/images/cn/news/2023/10/28/20231028075735311E65BECBEAE1430489BEED116144F5.jpg jumpUrl:http://www.weather.com.cn/index/2023/10/3662192.shtml content:本周末(10月28日至29日)广东、广西等地降雨将会增强,其中明天部分地区有暴雨,局地大暴雨。 -----------------[新闻详情]-------------------- articleTittle:广东广西等地本周末降雨增强局地有大暴雨 中东部气温持续偏暖 articleTimeSizeleft:2023-10-28 07:53:21 来源: 中国天气网 articleContent:中国天气网讯 本周末(10月28日至29日)广东、广西等地降雨将会增强,其中明天部分地区有暴雨,局地大暴雨。除 华南地区有较强降雨外,中东部大部地区天气晴朗,气温维持较常年同期偏高水平,11月初华北地区到长江中下游沿线或现同期少见的暖热。 广东等地降雨增强 部分地区有暴雨 昨天,北方大部秋高气爽,降水稀少,雨水主要出现在江南、华南等地。实况监测数据显示,广西东南部、广东西南部、福建南部、海南岛等地部分地区出现大到暴雨,广西玉林、广东茂名局地大暴雨。 今天开始,随着偏东气流加强,华南雨势明显增强。中央气象台预计,新疆西北部、西藏东部、川西高原西北部等地的部分地区有小到中雪或雨夹雪;云南南部、广西中部和南部、广东西南部、海南岛、台湾岛等地的部分地区有中雨,局地大雨。 ![bqdt](http://i.weather.com.cn/images/cn/news/2023/10/28/1698451010287006104.jpg) 明天,新疆北部、西藏中南部等地的部分地区有小到中雪或雨夹雪,其中新疆阿勒泰等地有大雪,部分地区暴雪;云南南部、广西南部和东部、广东西部、海南岛北部等地有中到大雨,其中广西东南部、广东西南部的部分地区有暴雨,局地大暴雨。 ![bqdt](http://i.weather.com.cn/images/cn/news/2023/10/28/1698451034578021575.jpg) 后天,新疆北部、内蒙古东北部、黑龙江西部、西藏中东部、川西高原北部等地的部分地区有小到中雪或雨夹雪,其中新疆阿勒泰等地有大雪,部分地区暴雪;四川盆地西南部、云南南部、广东雷州半岛、海南岛等地的部分地区有中雨,局地大雨。 ![bqdt](http://i.weather.com.cn/images/cn/news/2023/10/28/1698451046028066539.jpg) 气象部门提醒,本周末华南进入本次降雨最强时段,并且还会伴随强对流天气,公众需注意防范短时强降雨、雷暴大风,同时防范强降雨可能引发的次生灾害。 11月初多地或暖到破纪录 今起华北黄淮霾天气发展 本周以来,中东部虽然也受到冷空气影响,但气温仍普遍处在较常年同期偏高水平。预计一直到本月底,冷空气活动较弱,大部地区将持续偏暖,其中华北地区到长江中下游沿线温暖程度或是同期少见的,30日起多地最高气温可能接近30℃。 大城市中,太原、西安、石家庄、济南等地在11月初可能会暖到打破当地11月最高气温纪录。像济南,11月1日最高气温或将达29℃,最低气温也可能超过20℃。 同时,由于冷空气活动弱,华北、黄淮等地静稳天气形势建立,今天起霾天气又将发展。预计10月28日至11月2日,华北中南部、黄淮等 地大气扩散条件转差,区域大部有轻到中度霾天气,华北中南部局地有重度霾。11月3日起,受冷空气影响,上述地区大气扩散条件转好 ,霾天气减弱消散。公众需注意防范。 【2_1】 title:节后首个工作日华南华西等地降水持续 中东部多地气温将创新低 dateTime:2023-10-07 07:50:39 imgUrl:http://i.weather.com.cn/images/cn/news/2023/10/07/20231007080117FD61CC7F4B1717B37742CFE8A8C23D0A.jpg jumpUrl:http://www.weather.com.cn/index/2023/10/3657061.shtml content:今天(10月7日)是节后开工首日,我国降水主要集中在华南、华西、东北等地。同时,冷空气将继续南下,中东部多地气温将创今年立秋以来新低。 -----------------[新闻详情]-------------------- articleTittle:广东广西等地本周末降雨增强局地有大暴雨 中东部气温持续偏暖 articleTimeSizeleft:2023-10-28 07:53:21 来源: 中国天气网 articleContent:中国天气网讯 本周末(10月28日至29日)广东、广西等地降雨将会增强,其中明天部分地区有暴雨,局地大暴雨。除 华南地区有较强降雨外,中东部大部地区天气晴朗,气温维持较常年同期偏高水平,11月初华北地区到长江中下游沿线或现同期少见的暖热。 广东等地降雨增强 部分地区有暴雨 昨天,北方大部秋高气爽,降水稀少,雨水主要出现在江南、华南等地。实况监测数据显示,广西东南部、广东西南部、福建南部、海南岛等地部分地区出现大到暴雨,广西玉林、广东茂名局地大暴雨。 今天开始,随着偏东气流加强,华南雨势明显增强。中央气象台预计,新疆西北部、西藏东部、川西高原西北部等地的部分地区有小到中雪或雨夹雪;云南南部、广西中部和南部、广东西南部、海南岛、台湾岛等地的部分地区有中雨,局地大雨。 ![bqdt](http://i.weather.com.cn/images/cn/news/2023/10/28/1698451010287006104.jpg) 明天,新疆北部、西藏中南部等地的部分地区有小到中雪或雨夹雪,其中新疆阿勒泰等地有大雪,部分地区暴雪;云南南部、广西南部和东部、广东西部、海南岛北部等地有中到大雨,其中广西东南部、广东西南部的部分地区有暴雨,局地大暴雨。 ![bqdt](http://i.weather.com.cn/images/cn/news/2023/10/28/1698451034578021575.jpg) 后天,新疆北部、内蒙古东北部、黑龙江西部、西藏中东部、川西高原北部等地的部分地区有小到中雪或雨夹雪,其中新疆阿勒泰等地有大雪,部分地区暴雪;四川盆地西南部、云南南部、广东雷州半岛、海南岛等地的部分地区有中雨,局地大雨。 ![bqdt](http://i.weather.com.cn/images/cn/news/2023/10/28/1698451046028066539.jpg) 气象部门提醒,本周末华南进入本次降雨最强时段,并且还会伴随强对流天气,公众需注意防范短时强降雨、雷暴大风,同时防范强降雨可能引发的次生灾害。 11月初多地或暖到破纪录 今起华北黄淮霾天气发展 本周以来,中东部虽然也受到冷空气影响,但气温仍普遍处在较常年同期偏高水平。预计一直到本月底,冷空气活动较弱,大部地区将持续偏暖,其中华北地区到长江中下游沿线温暖程度或是同期少见的,30日起多地最高气温可能接近30℃。 大城市中,太原、西安、石家庄、济南等地在11月初可能会暖到打破当地11月最高气温纪录。像济南,11月1日最高气温或将达29℃,最低气温也可能超过20℃。 同时,由于冷空气活动弱,华北、黄淮等地静稳天气形势建立,今天起霾天气又将发展。预计10月28日至11月2日,华北中南部、黄淮等 地大气扩散条件转差,区域大部有轻到中度霾天气,华北中南部局地有重度霾。11月3日起,受冷空气影响,上述地区大气扩散条件转好 ,霾天气减弱消散。公众需注意防范。 ** 结束End ** F:\dome\teestWebCrawler\teestWebCrawler\bin\Debug\net6.0\teestWebCrawler.exe (进程 18048)已退出,代码为 0。 要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。 按任意键关闭此窗口. . .
2023年09月26日
21 阅读
0 评论
0 点赞
2023-09-26
Docker中部署.NET应用
Docker基础什么是 DockerDocker 项目的目标是实现轻量级的操作系统虚拟化解决方案。是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。有什么用一致的运行环境开发过程中一个常见的问题是环境一致性问题,由于开发环境,测试环境,生产环境不一致,导致有些bug并未在开发过程中被发现,而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。从而不会再出现(这段代码在我机器上运行没问题啊)zz这类问题。隔离的环境比如当前有两个网站,两个应用部署在同一台服务器上,可能会出现一下的问题:如果其中一个应用出现了问题,导致CPU跑满,另一个应用也会受到牵连,将跟着一起凉凉了如果两个应用时不同的技术栈,两个应用的依赖文件都安装在同一个服务器上,可能会产生各种冲突或不兼容,造成各种奇奇怪怪摸不着头绪的问题持续交付和部署对于开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。使用Docker可以通过定制应用镜像来实现持续集成,持续交付,部署。开发人员可以通过Dockerfile来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署更轻松的迁移由于Docker确保了执行环境的一致性,使得应用的迁移更加容易,Docker可以在很多平台上运行,无论是物理机,虚拟机,公有云,私有云,甚至是笔记本,其运行结果是一致的,因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。Docker 部署 .net6 Dome创建一个项目,并启用docker支持可以直接再创建的时候就勾选也可以在创建后添加docker支持对Dockerfile文件做一些修改此处的 EXPOSE 为发布后的端口号.net6 需要配置端口信息为了测试方便,本次允许访问Swagger打包发布由于docker是泡在linux上的,这里也要改成linux运行时定位到发布的文件夹开始构建镜像构建完成后查看镜像正常情况下还应该有个镜像仓库这一步(构建完成>>push到仓库>>服务器pull>>docker run),此处略过。到服务器上使用docker run添加一个容器到此时,程序已部署完成Docker 部署 .net framework添加docker支持,编辑下文件发布到文件夹,并将Dockerfile从bin里面复制到上一级根目录里开始构建镜像结论:可以,但不建议,因为打包太久,打包太大,几分钟都转不完那种。。。docker 怎么实现热更新结论:不能热更新,docker 更新需要先删除容器,再使用新的镜像重新创建容器,这个过程服务将会中断替代方案:配合nginx负载均衡实现灰度更新大致流程(利用容灾的思路):先更新备用服务,此时由于主服务扛着,用户并不会受到干扰当备用服务线上测试有问题,用旧镜像回退版本测试无误后,将主服务停掉,此时会自动启用备用服务,用户也不会受到影响主服务更新完重启后,将继续优先访问主服务
2023年09月26日
16 阅读
0 评论
0 点赞