اشتراک‌ها
سایت آموزشی: C# Station
C# Station Tutorial This is a set of lessons suited for beginning to intermediate programmers or anyone who would like to gain familiarity with the C# programming language. 
سایت آموزشی: C# Station
اشتراک‌ها
کتابخانه At.js
Add Github like mentions autocomplete to your application.  Demo
  • Support IE 7+ for textarea.
  • Supports HTML5 contentEditable elements (NOT including IE 8)
  • Can listen to any character and not just '@'. Can set up multiple listeners for different characters with different behavior and data
  • Listener events can be bound to multiple inputors.
  • Format returned data using templates
  • Keyboard controls in addition to mouse
    • Tab or Enter keys select the value
    • Up and Down navigate between values (and Ctrl-P and Ctrl-N also)
    • Right and left will re-search the keyword.
  • Custom data handlers and template renderers using a group of configurable callbacks
  • Supports AMD
کتابخانه At.js
اشتراک‌ها
تغییرات ASP.NET Core در NET 7 Preview 6.

Here’s a summary of what’s new in this preview release:

  • Request decompression middleware
  • Output caching middleware
  • Updates to rate limiting middleware
  • Kestrel support for WebSockets over HTTP/2
  • Kestrel performance improvements on high core machines
  • Support for logging additional request headers in W3CLogger
  • Empty Blazor project templates
  • System.Security.Cryptography support on WebAssembly
  • Blazor custom elements no longer experimental
  • Experimental QuickGrid component for Blazor
  • gRPC JSON transcoding multi-segment parameters
  • MapGroup support for more extension methods 
تغییرات ASP.NET Core در NET 7 Preview 6.
نظرات مطالب
کار با Docker بر روی ویندوز - قسمت هفتم - مدیریت اجرای چندین کانتینر به هم وابسته
بله. اگر به همراه یکپارچگی مداوم (CI/CD) باشند، این امکان هست. نمونه‌اش GitHub Actions است که از این مورد پشتیبانی می‌کند؛ Azure هم به همین صورت.
اشتراک‌ها
ضبط و پخش مجدد درخواست های Http توسط کتابخانه داتنتی VCR Sharp

Vcr-sharp lets you record and playback HTTP requests! In this example, WithCassette is an extension method on HttpClientFactory. That extension method sets up a DelgatingHandler to a ReplayingHandler. That ReplayingHandler "loads the cassette" and returns it as a cached response. 

  using (var httpClient = HttpClientFactory.WithCassette( "my-test-scenario" ))      
  {        
    var request =  new HttpRequestMessage(HttpMethod.Get,  "http://www.iana.org/domains/reserved" );   
    var response = await httpClient.SendAsync(request);     
    var body = await response.Content.ReadAsStringAsync();      
    body.ShouldContain( "Example domains" );     
  }
ضبط و پخش مجدد درخواست های Http توسط کتابخانه داتنتی VCR Sharp
اشتراک‌ها
سری آموزشی Git و GitHub

Git and GitHub for Poets
11 videos

Learning Objectives:
* Understand the concept of version control.
* Understand the difference between git software and GitHub the website.
* Understand terminology: branch, fork, merge, pull, push, remote
* Make your first pull request to a git repository on GitHub. 

سری آموزشی Git و GitHub
نظرات مطالب
استفاده از GitHub Actions برای Build و توزیع خودکار پروژه‌های NET Core.
یک نکته تکمیلی دیگر:
توسط کد زیر میتوانید اطلاعاتی از محیط اجرا شدن Github Action مورد نظر جمع آوری و لاگ کنید
 از جمله :
  •  event اجرا شده (مثلا push) و شخص فراخوان این رخداد
  • جزئیات commit ایی که منجر به این event شده از جمله SHA hash کامیت، author و committer کامیت
  • تعداد Issue ها، Fork‌ها و Star‌های ریپازیتوری در آن لحظه
  • و بسیاری اطلاعات دیگر
    steps:
    - name: Dump GitHub Context
      env:
        GITHUB_CONTEXT: ${{ toJson(github) }}
      run: echo "$GITHUB_CONTEXT"
نمونه خروجی تولید شده
GITHUB_CONTEXT: {
  "token": "***",
  "ref": "refs/heads/master",
  "sha": "3251394ad66ae8419e606fbf78570906ff2f01d3",
  "repository": "mjebrahimi/github_actions_test",
  "repositoryUrl": "git://github.com/mjebrahimi/github_actions_test.git",
  "run_id": "66966756",
  "run_number": "17",
  "actor": "mjebrahimi",
  "workflow": ".NET Core",
  "head_ref": "",
  "base_ref": "",
  "event_name": "push",
  "event": {
    "after": "3251394ad66ae8419e606fbf78570906ff2f01d3",
    "base_ref": null,
    "before": "b6c382e8fe74916daf6821a5a71efe480bd98a13",
    "commits": [
      {
        "author": {
          "email": "mj.ebrahimi72@gmail.com",
          "name": "Mohammad Javad Ebrahimi",
          "username": "mjebrahimi"
        },
        "committer": {
          "email": "noreply@github.com",
          "name": "GitHub",
          "username": "web-flow"
        },
        "distinct": true,
        "id": "3251394ad66ae8419e606fbf78570906ff2f01d3",
        "message": "Update dotnetcore.yml",
        "timestamp": "2020-03-31T04:48:53+04:30",
        "tree_id": "e27a05129010b3b2a7b18b92d91cd73a32babb8f",
        "url": "https://github.com/mjebrahimi/github_actions_test/commit/3251394ad66ae8419e606fbf78570906ff2f01d3"
      }
    ],
    "compare": "https://github.com/mjebrahimi/github_actions_test/compare/b6c382e8fe74...3251394ad66a",
    "created": false,
    "deleted": false,
    "forced": false,
    "head_commit": {
      "author": {
        "email": "mj.ebrahimi72@gmail.com",
        "name": "Mohammad Javad Ebrahimi",
        "username": "mjebrahimi"
      },
      "committer": {
        "email": "noreply@github.com",
        "name": "GitHub",
        "username": "web-flow"
      },
      "distinct": true,
      "id": "3251394ad66ae8419e606fbf78570906ff2f01d3",
      "message": "Update dotnetcore.yml",
      "timestamp": "2020-03-31T04:48:53+04:30",
      "tree_id": "e27a05129010b3b2a7b18b92d91cd73a32babb8f",
      "url": "https://github.com/mjebrahimi/github_actions_test/commit/3251394ad66ae8419e606fbf78570906ff2f01d3"
    },
    "pusher": {
      "email": "mj.ebrahimi72@gmail.com",
      "name": "mjebrahimi"
    },
    "ref": "refs/heads/master",
    "repository": {
      "archive_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/{archive_format}{/ref}",
      "archived": false,
      "assignees_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/assignees{/user}",
      "blobs_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/git/blobs{/sha}",
      "branches_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/branches{/branch}",
      "clone_url": "https://github.com/mjebrahimi/github_actions_test.git",
      "collaborators_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/collaborators{/collaborator}",
      "comments_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/comments{/number}",
      "commits_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/commits{/sha}",
      "compare_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/compare/{base}...{head}",
      "contents_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/contents/{+path}",
      "contributors_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/contributors",
      "created_at": 1585584602,
      "default_branch": "master",
      "deployments_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/deployments",
      "description": null,
      "disabled": false,
      "downloads_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/downloads",
      "events_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/events",
      "fork": false,
      "forks": 0,
      "forks_count": 0,
      "forks_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/forks",
      "full_name": "mjebrahimi/github_actions_test",
      "git_commits_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/git/commits{/sha}",
      "git_refs_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/git/refs{/sha}",
      "git_tags_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/git/tags{/sha}",
      "git_url": "git://github.com/mjebrahimi/github_actions_test.git",
      "has_downloads": true,
      "has_issues": true,
      "has_pages": false,
      "has_projects": true,
      "has_wiki": true,
      "homepage": null,
      "hooks_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/hooks",
      "html_url": "https://github.com/mjebrahimi/github_actions_test",
      "id": 251358686,
      "issue_comment_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/issues/comments{/number}",
      "issue_events_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/issues/events{/number}",
      "issues_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/issues{/number}",
      "keys_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/keys{/key_id}",
      "labels_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/labels{/name}",
      "language": "C#",
      "languages_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/languages",
      "license": null,
      "master_branch": "master",
      "merges_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/merges",
      "milestones_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/milestones{/number}",
      "mirror_url": null,
      "name": "github_actions_test",
      "node_id": "MDEwOlJlcG9zaXRvcnkyNTEzNTg2ODY=",
      "notifications_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/notifications{?since,all,participating}",
      "open_issues": 0,
      "open_issues_count": 0,
      "owner": {
        "avatar_url": "https://avatars1.githubusercontent.com/u/23256135?v=4",
        "email": "mj.ebrahimi72@gmail.com",
        "events_url": "https://api.github.com/users/mjebrahimi/events{/privacy}",
        "followers_url": "https://api.github.com/users/mjebrahimi/followers",
        "following_url": "https://api.github.com/users/mjebrahimi/following{/other_user}",
        "gists_url": "https://api.github.com/users/mjebrahimi/gists{/gist_id}",
        "gravatar_id": "",
        "html_url": "https://github.com/mjebrahimi",
        "id": 23256135,
        "login": "mjebrahimi",
        "name": "mjebrahimi",
        "node_id": "MDQ6VXNlcjIzMjU2MTM1",
        "organizations_url": "https://api.github.com/users/mjebrahimi/orgs",
        "received_events_url": "https://api.github.com/users/mjebrahimi/received_events",
        "repos_url": "https://api.github.com/users/mjebrahimi/repos",
        "site_admin": false,
        "starred_url": "https://api.github.com/users/mjebrahimi/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/mjebrahimi/subscriptions",
        "type": "User",
        "url": "https://api.github.com/users/mjebrahimi"
      },
      "private": false,
      "pulls_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/pulls{/number}",
      "pushed_at": 1585613933,
      "releases_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/releases{/id}",
      "size": 40,
      "ssh_url": "git@github.com:mjebrahimi/github_actions_test.git",
      "stargazers": 0,
      "stargazers_count": 0,
      "stargazers_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/stargazers",
      "statuses_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/statuses/{sha}",
      "subscribers_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/subscribers",
      "subscription_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/subscription",
      "svn_url": "https://github.com/mjebrahimi/github_actions_test",
      "tags_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/tags",
      "teams_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/teams",
      "trees_url": "https://api.github.com/repos/mjebrahimi/github_actions_test/git/trees{/sha}",
      "updated_at": "2020-03-31T00:01:15Z",
      "url": "https://github.com/mjebrahimi/github_actions_test",
      "watchers": 0,
      "watchers_count": 0
    },
    "sender": {
      "avatar_url": "https://avatars1.githubusercontent.com/u/23256135?v=4",
      "events_url": "https://api.github.com/users/mjebrahimi/events{/privacy}",
      "followers_url": "https://api.github.com/users/mjebrahimi/followers",
      "following_url": "https://api.github.com/users/mjebrahimi/following{/other_user}",
      "gists_url": "https://api.github.com/users/mjebrahimi/gists{/gist_id}",
      "gravatar_id": "",
      "html_url": "https://github.com/mjebrahimi",
      "id": 23256135,
      "login": "mjebrahimi",
      "node_id": "MDQ6VXNlcjIzMjU2MTM1",
      "organizations_url": "https://api.github.com/users/mjebrahimi/orgs",
      "received_events_url": "https://api.github.com/users/mjebrahimi/received_events",
      "repos_url": "https://api.github.com/users/mjebrahimi/repos",
      "site_admin": false,
      "starred_url": "https://api.github.com/users/mjebrahimi/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/mjebrahimi/subscriptions",
      "type": "User",
      "url": "https://api.github.com/users/mjebrahimi"
    }
  },
  "workspace": "/home/runner/work/github_actions_test/github_actions_test",
  "action": "run1"
}

با توجه به این نکته، اگر میخواین توی یه کامیت، عملیات CI رو به هر دلیلی Skip/Ignore کنین میتونین اینطوری عمل کنین.
jobs:
  build:
    if: contains(toJson(github.event.commits), '[SKIP CI]') == false
    runs-on: ubuntu-latest
...
در این صورت هر کامیت ایی که توی message اش، عبارت "[SKIP CI]" باشه Workflow روش اجرا نمیشه .