<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-9049032025342264339</atom:id><lastBuildDate>Thu, 19 Feb 2026 13:15:36 +0000</lastBuildDate><category>Sharepoint</category><category>Sharepoint online</category><category>PowerShell</category><category>O365</category><category>Azure</category><category>Security</category><category>Camlex.NET</category><category>Search</category><category>Client object model</category><category>Azure AD</category><category>Microsoft Graph</category><category>Localization</category><category>Taxonomy</category><category>Azure functions</category><category>OfficeDevPnP</category><category>Javascript object model</category><category>CAML</category><category>WebJobs</category><category>Bug</category><category>IIS</category><category>Navigation</category><category>MVP</category><category>Rest API</category><category>ASP.Net MVC</category><category>Content deployment</category><category>Troubleshooting</category><category>UI</category><category>Upgrade</category><category>User profiles</category><category>AD</category><category>ASP.Net</category><category>Cross-site publishing</category><category>Expression trees</category><category>ASP.Net Core</category><category>FBA</category><category>MS Teams</category><category>Publishing Infrastructure</category><category>SPFx</category><category>Sandbox</category><category>Sql server</category><category>URL rewrite</category><category>Web API</category><category>Windows</category><category>Ajax</category><category>JQuery</category><category>SSL</category><category>Social computing</category><category>Alerts</category><category>CSOM</category><category>Docker</category><category>Fluent NHibernate</category><category>NHibernate</category><category>Performance</category><category>PnP.PowerShell</category><category>Workflows</category><category>Azure table storage</category><category>CosmosDB</category><category>Friendly URLs</category><category>Linux</category><category>Orchard</category><category>VMWare</category><category>WCF</category><category>Display templates</category><category>Github</category><category>MySQL</category><category>Nginx</category><category>PnP.Framework</category><category>Sensitivity labels</category><category>Visual Studio</category><category>Web service</category><category>Codeplex</category><category>Debugging</category><category>Entity Framework</category><category>Json</category><category>MS Office</category><category>Maintenance</category><category>Mercurial</category><category>Mobile</category><category>Python</category><category>ReSharper</category><category>React</category><category>SEO</category><category>SQL</category><category>Sharepoint Designer</category><category>Telerik</category><category>Yammer</category><category>ARM templates</category><category>Automapper</category><category>Azure DevOps</category><category>Backup</category><category>Cache</category><category>Client side rendering</category><category>Css</category><category>Document management</category><category>Git</category><category>IoC</category><category>Kestrel</category><category>Linq 2 NHibernate</category><category>Linq 2 Sharepoint</category><category>Linq 2 Sql</category><category>Modern sites</category><category>NDepend</category><category>NVelocity</category><category>Obfuscar</category><category>PnP templates</category><category>Postman</category><category>Reflection</category><category>Remote event receivers</category><category>Sharepoint Framework</category><category>StructureMap</category><category>Subversion</category><category>Swagger</category><category>Timer jobs</category><category>Unit tests</category><category>Variations</category><category>WSPBuilder</category><category>WatiN</category><category>WebDAV</category><category>nodejs</category><category>ADAL</category><category>ALT.Net</category><category>Android</category><category>BizTalk</category><category>CLI</category><category>CORS</category><category>Claims</category><category>Cloud</category><category>Cross platform</category><category>DDD</category><category>DotNetOpenAuth</category><category>Dynamic objects</category><category>Fluent UI</category><category>Html5</category><category>Idea</category><category>Iframe</category><category>InfoPath</category><category>JSONP</category><category>JWT</category><category>KeyVault</category><category>Licensing</category><category>MSBuild</category><category>MongoDB</category><category>NHibernate Search</category><category>NLucene</category><category>Nuget</category><category>OAuth</category><category>OWIN</category><category>Open source</category><category>PHP</category><category>Patterns</category><category>PnPJS</category><category>Razor</category><category>Redux</category><category>Responsive design</category><category>SNI</category><category>SPGraphviz</category><category>SyntaxHighlighter</category><category>Sysinternals</category><category>TFS</category><category>Twitter</category><category>TypeMock</category><category>ULS</category><category>Wordpress</category><category>Yandex</category><category>Youtube</category><category>gulp</category><category>iOS</category><category>ngrok</category><title>sadomovalex&#39;s blog</title><description>Blog for software developers</description><link>http://sadomovalex.blogspot.com/</link><managingEditor>noreply@blogger.com (Alexey Sadomov)</managingEditor><generator>Blogger</generator><openSearch:totalResults>653</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-6218754346076065256</guid><pubDate>Tue, 08 Oct 2024 06:24:00 +0000</pubDate><atom:updated>2024-10-08T09:24:54.140+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><category domain="http://www.blogger.com/atom/ns#">Nginx</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>Use nginx running in Docker container to serve php sites running on the host</title><atom:summary type="text">In one of my previous articles I showed how to use nginx running in Docker container to serve .Net sites running on Kestrel web server on the host. In the current article I will show how to do similar thing with php sites.So idea is the same: we have nginx running in Docker container and number of php sites running on the host and want containerized nginx to serve these sites. For example we will</atom:summary><link>http://sadomovalex.blogspot.com/2024/10/use-nginx-running-in-docker-container.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-9119202171995188318</guid><pubDate>Wed, 18 Sep 2024 06:41:00 +0000</pubDate><atom:updated>2024-09-18T09:41:08.353+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">Kestrel</category><category domain="http://www.blogger.com/atom/ns#">Nginx</category><title>Use nginx running in Docker container to serve .NET sites running on Kestrel both in host and Docker containers</title><atom:summary type="text">In one of my previous articles I made brief introduction to Docker – containerization technology which gives more control over infrastructure. Suppose that we have number of .NET sites running on Kestrel in Linux and published via nginx to the internet like shown on the following schema (ports numbers are only for example here):And we want to move all our infrastructure to Docker (backend, </atom:summary><link>http://sadomovalex.blogspot.com/2024/09/use-nginx-running-in-docker-container.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAoh84xVKWIzvKS2kiXns5gf4mlwXEeDtrMaYt82lg0oLlz-Z1TyutkPKwnq_72KRkJyV1hzzD-4Yjo4LVxxZt2Rb_n6xDRtXmwa1rBrqzSsS04ZXj7yGLba1iI6LGGB0JAgFPQPkeySUUN8vSWoi2gcosErw5hTslyLE3qLnJRvIVs5c5ml_ixT2P9y8/s72-w400-h263-c/01.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-3093914131216267037</guid><pubDate>Tue, 27 Aug 2024 15:25:00 +0000</pubDate><atom:updated>2024-08-27T18:25:18.486+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Nginx</category><title>Nginx uses 1st available server configuration when domain name not resolved</title><atom:summary type="text">If you host several sites on nginx (which means that you also have several domain names pointing to your server&#39;s IP address) then you may face with the following issue. Suppose that we have 3 domain names pointing to our server&#39;s IP with running nginx:example1.comexample2.comexample3.comSites example1.com and example2.com are configured in nginx, but there is no example3.com. The problem is that</atom:summary><link>http://sadomovalex.blogspot.com/2024/08/nginx-uses-1st-available-server.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp5OdM5XAXmx0Dh-5UNrqmNXK399oH0NPKnr_O30OcYAbViW7j0obK-4OELX0-_feFaS84fQrhkAcWbXyg6ADuq89lG2UKOQSQZ8w11Nkbwj4_dfcUUMSQAhB-b8ZmHFfUsDzXBhteVmyh7Xec7ftM53fIdo1OUmnFxWIkp76f2v6hU2OVCawhrY_-j64/s72-w400-h296-c/2024-08-15_12-19-19.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-4231457680803525312</guid><pubDate>Wed, 19 Jun 2024 15:11:00 +0000</pubDate><atom:updated>2024-06-19T18:11:46.704+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Obfuscar</category><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><title>Obfuscar: how to stop build of .NET app with error when obfuscation failed</title><atom:summary type="text">In my previous post I showed how to obfuscate ASP.Net Core web app using Obfuscar. There was however one problem: if obfuscation will fail it will be ignored by VS by default. In the current post I will show how to make such errors more visible i.e. how to cause build to fail if obfuscation failed.First of all we need to move obfuscation logic to PowerShell file (postpublish.ps1 in this example)&amp;</atom:summary><link>http://sadomovalex.blogspot.com/2024/06/obfuscar-how-to-stop-build-of-net-app.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-829962593943326363</guid><pubDate>Wed, 05 Jun 2024 16:14:00 +0000</pubDate><atom:updated>2024-06-05T19:14:31.697+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><title>Use PowerShell in Visual Studio build events when build Docker image for .Net app</title><atom:summary type="text">Imagine that we have .NET application and created Docker file for it which often contains build and runtime stages (in this example I use .Net6 but it is also valid for higher versions):

# build stage
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
COPY ...
RUN dotnet restore ...
RUN dotnet publish ...

# runtime stage
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS final
...


and that our VS </atom:summary><link>http://sadomovalex.blogspot.com/2024/06/use-powershell-in-visual-studio-build.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-8095101867933330520</guid><pubDate>Sun, 07 Apr 2024 08:23:00 +0000</pubDate><atom:updated>2024-04-07T11:23:12.949+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Docker</category><title>Introduction to Docker: what is Docker and what problems it solves</title><atom:summary type="text">Software development is not only about writing the code. From my experience I may tell that writing code itself is not that difficult (get some data from database, show it in UI, process this data, save back to DB, call some external services, etc - tasks are quite common). But that is not all. We also need to ensure that non-functional requirements are met. I.e. that:app handles errors/</atom:summary><link>http://sadomovalex.blogspot.com/2024/04/introduction-to-docker-what-is-docker.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifYwgYTQbKK7NRp0UWNGwBlXL0z8bcX9lbF121BfnTEksnB4BsJzUUxbpjOqU1uLwxNBs6NPMWKTtD4Lb4uGtaUqqkz-18EO9mA1BFyYYXfDWaC4dDyNa1QtRJbSH4qyX5n_KgKabdppGJkextJ8xZXVBFSFLzmDvkrDlgHNRBvuv9Z1lQdG9PgxN6_L4/s72-w400-h249-c/2024-03-24_9-47-27.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-1044374633082334685</guid><pubDate>Wed, 20 Mar 2024 10:39:00 +0000</pubDate><atom:updated>2024-03-20T13:39:02.331+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python</category><title>Inject class to Python module dynamically</title><atom:summary type="text">As you probably know in Python after you import some module you may call functions defined in this module. But if you work with more complex scenarios (e.g. when imported module is provided automatically by infrastructure (i.e. you don&#39;t control it) or when classes are generated in runtime using Python meta classes) you may face with situation when some class is missing in imported module. In </atom:summary><link>http://sadomovalex.blogspot.com/2024/03/inject-class-to-python-module.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-3018307509288839231</guid><pubDate>Sun, 10 Mar 2024 16:43:00 +0000</pubDate><atom:updated>2024-03-10T19:43:01.017+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Linux</category><title>Cinnamon: first thing you may want to install when switched from Windows to Linux</title><atom:summary type="text">If you worked in Windows and then switched to Linux it may be painful in beginning since user experience is a bit different (and here we are talking about graphical UX in Linux, not command line). E.g. this is how RHEL8 (Red Hat Enterprise Linux) with default GNOME desktop environment looks like:Yes, there are windows also but no minimize/maximize icons nor taskbar. The good news is that there is</atom:summary><link>http://sadomovalex.blogspot.com/2024/03/cinnamon-first-thing-you-may-want-to.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF0sMoqThxzI2BtT_ZIa61e2cVbPH3T1S8ZiTeZs1JpZxfsDjmNYStTJPnQ1V1ApCyfxA-BvZFeDdePf-WxN4M54LDlLTjIQxQLr5XRpy8c84FCS03HF3qd15mlLL5XaNN0-V5QbhskfizxpWi_1npOPWWtqZJBYBj2eFms6X_FrEIo25atPgcnBajznc/s72-w640-h400-c/2024-03-09_18-13-04.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-6667582867365198438</guid><pubDate>Tue, 06 Feb 2024 05:54:00 +0000</pubDate><atom:updated>2024-02-06T08:54:01.854+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Git</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><title>Fix problem with Git client for Linux which asks for credentials on every push with installed SSH key</title><atom:summary type="text">Recently I faced with the problem that Git client for Linux (CentOS) always asked for user credentials on every push even though SSH key was installed. In general SSH key is installed exactly for avoiding that. So what went wrong?Let&#39;s briefly check whole process. First of all we need to install SSH key pair. On Linux it can be done with ssh-keygen tool. If you don&#39;t want to enter passphrase on </atom:summary><link>http://sadomovalex.blogspot.com/2024/02/fix-problem-with-git-client-for-linux.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpWXqAGRa0jPGRj3uL9P82ZdjjRiGiCGqA2UeayizdwtOjiErNVx_c2EZJTQpAe72d2q1oCTYP1mBlv1o7rbOFr3YyPLu_URWC81jeG5iKdXTWS3H7GTAvOjx2lzFT-cQm91ewXAIyQsNsZB0sRDrqnkTxMwo40EKkRrbA91FAVtGumRQRa6van-L947o/s72-w640-h344-c/2024-02-06_8-41-12.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-7780541166599667114</guid><pubDate>Tue, 09 Jan 2024 10:32:00 +0000</pubDate><atom:updated>2024-01-09T13:32:26.419+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JWT</category><category domain="http://www.blogger.com/atom/ns#">Security</category><title>Verify JWT tokens with EdDSA encryption algorithm</title><atom:summary type="text">In my previous posts of this series I showed how to generate EdDSA private and public keys pair and how to sign JWT tokens using private EdDSA key. In this last post of the series I will show how to verify signed JWT token with public key.Let&#39;s remind that EdDSA key pair may look like that in JSON format:

{
	&quot;kty&quot;: &quot;OKP&quot;,
	&quot;alg&quot;: &quot;EdDSA&quot;,
	&quot;crv&quot;: &quot;Ed25519&quot;,
	&quot;x&quot;: &quot;...&quot;,
	&quot;d&quot;: &quot;...&quot;
}


where &quot;x&quot;</atom:summary><link>http://sadomovalex.blogspot.com/2024/01/verify-jwt-tokens-with-eddsa-encryption.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-3571244672922507836</guid><pubDate>Mon, 25 Dec 2023 14:37:00 +0000</pubDate><atom:updated>2024-01-09T13:33:52.075+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Security</category><title>Sign JWT tokens with EdDSA encryption algorithm</title><atom:summary type="text">In my previous post of this series I showed how to generate key pair for EdDSA encryption algorithm. Let&#39;s now go further and use these keys to sign JWT token. If you remember from previous post &quot;d&quot; property of json object with keys pair belongs to private key. We will use this private key for signing our JWT token.For creating JWT token we need to define claims. They are app/domain specific. We </atom:summary><link>http://sadomovalex.blogspot.com/2023/12/sign-jwt-tokens-with-eddsa-encryption.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-1873329803272054953</guid><pubDate>Tue, 12 Dec 2023 18:03:00 +0000</pubDate><atom:updated>2023-12-12T21:03:51.279+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Fluent NHibernate</category><category domain="http://www.blogger.com/atom/ns#">Linq 2 NHibernate</category><category domain="http://www.blogger.com/atom/ns#">MySQL</category><category domain="http://www.blogger.com/atom/ns#">NHibernate</category><title>Fix Linq 2 NHibernate for MySQL</title><atom:summary type="text">If you use NHibernate with MySQL and Linq 2 NHibernate to simplify fetching data you may face with problem: queries created by Linq2NH use square brackets by default. That is fine for SQL Server but won&#39;t work in MySQL which uses backticks ``.For MySQL we need to instruct NHibernate to use backticks instead of square brackets. It can be done by setting interceptor in NH config:

public class </atom:summary><link>http://sadomovalex.blogspot.com/2023/12/fix-linq-2-nhibernate-for-mysql.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-319795429582572181</guid><pubDate>Sat, 18 Nov 2023 16:58:00 +0000</pubDate><atom:updated>2023-11-18T19:58:36.857+03:00</atom:updated><title>Use Obfuscar for obfuscating ASP.Net Core web apps</title><atom:summary type="text">Obfuscar is free and open source code obfuscation library for .NET. However if you want to use it in web app (ASP.Net Core) it is not that straightforward. First of all you should be ready that Obfuscar may break many things in runtime quite easily. I.e. project will be still compiled successfully but when you will try to run it may get unclear errors. Second - in web apps it is even more tricky </atom:summary><link>http://sadomovalex.blogspot.com/2023/11/use-obfuscar-for-obfuscating-aspnet.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAu2AxkgYghfb4PTJFRks7wgx2Cu4OHVHBYCvOIBnM2ZcJfiwppXC6ahR3XV88HZ9CTZBsgSoE0PMc1t5x0LNI3hcj6gQ320Yb0FpWmdIOfz-m5Z_hOPHD5hQMl8xQPSAtVvffxndNQE5oAXUsfOZYSQSu87cJYDPMjCo6VXbHT3g3beALRPlZCMS5ujw/s72-w640-h346-c/2023-11-18_19-48-21.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-32068434384196839</guid><pubDate>Tue, 07 Nov 2023 15:01:00 +0000</pubDate><atom:updated>2023-11-07T18:01:21.798+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.Net Core</category><title>Bind complex view model objects in ASP.Net Core using ComplexObjectModelBinder</title><atom:summary type="text">The way how view model objects are bound has been changed in ASP.Net Core. Now we need to create custom model binder class which inherits IModelBinder interface and implement binding logic there (in ASP.Net Core there is no DefaultModelBinder base class anymore which we may inherit in custom binders). However for most cases binding logic itself will be the same still - only custom logic will </atom:summary><link>http://sadomovalex.blogspot.com/2023/11/bind-complex-view-model-objects-in.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-1141582844168454477</guid><pubDate>Wed, 11 Oct 2023 09:29:00 +0000</pubDate><atom:updated>2024-01-09T13:34:27.495+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Security</category><title>Generate EdDSA key pair in .NET and save it to json</title><atom:summary type="text">EdDSA is one of the commonly used encryption algorithms atm. There is a trend to use it instead of older RSA alg. In .Net there are not that many resources about it. E.g. popular nuget package jose-jwt (Javascript Object Signing and Encryption) still doesn&#39;t support EdDSA. Fortunately there are another packages which support it:Portable.BouncyCastleScottBrady.IdentityModelbut many basic examples </atom:summary><link>http://sadomovalex.blogspot.com/2023/10/generate-eddsa-key-pair-in-net-and-save.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-7008725268117960451</guid><pubDate>Wed, 27 Sep 2023 12:57:00 +0000</pubDate><atom:updated>2023-09-27T15:57:04.386+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>Problem with datetime format used in %date% environment variable in Windows scheduled tasks</title><atom:summary type="text">Recently I&#39;ve faced with interesting problem. Let&#39;s say you have Russian datetime format set in Windows (Control panel &amp;gt; Region &amp;gt; Formats) and create new Windows scheduled task which runs the following cmd script:echo %date%It will use Russian datetime as it should. Now we change OS datetime format to English. If we will run the same script manually it will immediately use new format. But </atom:summary><link>http://sadomovalex.blogspot.com/2023/09/problem-with-datetime-format-used-in.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-7447534894152609727</guid><pubDate>Wed, 20 Sep 2023 18:56:00 +0000</pubDate><atom:updated>2023-09-20T21:56:43.920+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">Github</category><category domain="http://www.blogger.com/atom/ns#">Security</category><title>Use Github secrets to restore nuget packages from private packages source with authentication in Dockerfile via Github actions</title><atom:summary type="text">If you use private nuget packages source with authentication and Docker in your project you may need to restore packages from this custom packages source within Docker file. In this post I will show how to use Github secrets for that when you build Docker image via docker/build-push-action Github action.First of all in the yaml file of our Github action we need to pass necessary secrets </atom:summary><link>http://sadomovalex.blogspot.com/2023/09/use-github-secrets-to-restore-nuget.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-5846820118299565203</guid><pubDate>Tue, 15 Aug 2023 14:49:00 +0000</pubDate><atom:updated>2023-08-15T17:49:51.725+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Localization</category><title>Problem with MissingManifestResourceException for embedded resx files in subfolders</title><atom:summary type="text">If you worked with .Net applications you most probably know what is embedded resources:Such resources are embedded directly to output assembly. We may check them e.g. with decompiler:&amp;nbsp;Sometime we may need to change namespace of generated resources: e.g. in above example Foo.resx file is located in Resources sub folder so by default it will generate strongly typed class in namespace </atom:summary><link>http://sadomovalex.blogspot.com/2023/08/problem-with-missingmanifestresourceexc.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4V1jDspqOitlL33FP2Egsdu3qLqcgsuMNZ43jku7zdwkRlUSovGPCmSQFTqBtKthnbXgNmEs9GSkVMn6svAjNVaawmqUd1X4o_2xCNx2xu2Vo86JQhhBaavwAI_aLDpZDOZ9XRLLogjT2lNExpIt5r9ydf6Z_xWjpwm-HZjbXX1fzSnqL23QMkRFGmkU/s72-c/01.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-8687326733213255701</guid><pubDate>Tue, 08 Aug 2023 14:20:00 +0000</pubDate><atom:updated>2023-08-08T17:20:15.221+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CAML</category><category domain="http://www.blogger.com/atom/ns#">Camlex.NET</category><category domain="http://www.blogger.com/atom/ns#">Sharepoint</category><category domain="http://www.blogger.com/atom/ns#">Sharepoint online</category><title>Camlex and Camlex.Client 5.4.2 released</title><atom:summary type="text">New version 5.4.2 of Camlex library has been released. Starting with this version it became possible to generate CAML queries with string operators BeginsWith and Contains for ContentTypeId field type e.g. the following C# code:

Camlex.Query().Where(x =&amp;gt; ((DataTypes.ContentTypeId)x[&quot;ContentTypeId&quot;]).StartsWith(&quot;0x123&quot;)).ToString(true);


will generate the following CAML query:

&amp;lt;Query&amp;gt;
</atom:summary><link>http://sadomovalex.blogspot.com/2023/08/camlex-and-camlexclient-542-released.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-5581031555016814355</guid><pubDate>Tue, 04 Jul 2023 14:16:00 +0000</pubDate><atom:updated>2023-07-04T17:16:39.541+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Fluent NHibernate</category><category domain="http://www.blogger.com/atom/ns#">MySQL</category><category domain="http://www.blogger.com/atom/ns#">NHibernate</category><title>Generate database schema for MySQL using NHibernate hbm2ddl tool</title><atom:summary type="text">NHibernate has hbm2ddl tool which allows automatically export database tables schema based on provided mappings. I.e. we may define mapping using C# for some POCO class:

public class User
{
    public virtual int Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}


like that:

public class UserMap : ClassMap&amp;lt;User&amp;gt;
{
    </atom:summary><link>http://sadomovalex.blogspot.com/2023/07/generate-database-schema-for-mysql.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-8554872040400134516</guid><pubDate>Thu, 22 Jun 2023 10:15:00 +0000</pubDate><atom:updated>2023-06-22T13:15:36.496+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Azure</category><category domain="http://www.blogger.com/atom/ns#">Troubleshooting</category><title>Implement TAP/multithread friendly logging scopes for Microsoft.Extensions.Logging.ILogger</title><atom:summary type="text">Some time ago I wrote a post how to implement custom logger which writes logs to Azure storage blob container: Custom logger for .Net Core for writing logs to Azure BLOB storage. This logger implements ILogger interface from Microsoft.Extensions.Logging namespace. It works quite well but doesn&#39;t support logging scopes:

public IDisposable BeginScope&amp;lt;TState&amp;gt;(TState state) =&amp;gt; default!;


</atom:summary><link>http://sadomovalex.blogspot.com/2023/06/implement-tapmultithread-friendly.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-1845529993573103696</guid><pubDate>Sat, 17 Jun 2023 14:44:00 +0000</pubDate><atom:updated>2023-06-17T17:44:00.322+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MySQL</category><title>Profile MySQL db with Neor Profile SQL</title><atom:summary type="text">If you need to profile MySQL db you may use builtin MySQL shell profiler (CLI). Also there is free GUI alternative - Neor Profile SQL. There are few things which should be done before to use it.When you launch Profile SQL it asks to establish connection using default parameters for localhost:If you click Test button you may get &quot;Test is failed&quot; error even with correct credentials of the root user</atom:summary><link>http://sadomovalex.blogspot.com/2023/06/profile-mysql-db-with-neor-profile-sql.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPWPDkOIy2DCMo9EM6rSGkGP3YnS7gj1h7-f79rIoXMPKSX9hA6-mM2cKKz1r6HCYU2IcuXUi1ablsZAElFefGxS_uNidilY3M4F6Q_k-z6UuSVKrNDLDXLDZ4UJzW_z0Z_ptqoF0Dqvynd1-NacrByhX5RMiSono9SyIsifwJCkv-bRqqOgCVAWbG/s72-w400-h296-c/2023-06-17_17-23-05.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-3779697680678282373</guid><pubDate>Sat, 17 Jun 2023 08:04:00 +0000</pubDate><atom:updated>2023-06-17T11:04:28.904+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.Net MVC</category><category domain="http://www.blogger.com/atom/ns#">Automapper</category><category domain="http://www.blogger.com/atom/ns#">Fluent NHibernate</category><category domain="http://www.blogger.com/atom/ns#">NHibernate</category><title>StackOverflowException when use hierarchical object mapping with AutoMapper and Fluent NHibernate lazy loading</title><atom:summary type="text">Suppose that we have the following class Category with self-reference (regular parent-child hierarchy):

public class Category
{
    public virtual T Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Category ParentCategory { get; set; }
    public virtual IList&amp;lt;Category&amp;gt; ChildCategories { get; set; }
}


(properties are virtual which is required by NHibernate</atom:summary><link>http://sadomovalex.blogspot.com/2023/06/stackoverflowexception-when-use.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-6550451997879309817</guid><pubDate>Mon, 29 May 2023 18:12:00 +0000</pubDate><atom:updated>2023-05-29T21:12:31.412+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Kestrel</category><category domain="http://www.blogger.com/atom/ns#">SSL</category><category domain="http://www.blogger.com/atom/ns#">Web API</category><title>Run ASP.Net Core Web API on Kestrel dev web server with https on Windows</title><atom:summary type="text">In this post I will describe how to run ASP.Net Core Web API on Kestrel development web server under https. First of all we need to create self-signed SSL certificate. We may generate it with PowerShell (see Use self-signed SSL certificate for web API hosted in Azure App service) or openssl tool:

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout test.key -out test.crt -config </atom:summary><link>http://sadomovalex.blogspot.com/2023/05/run-aspnet-core-web-api-on-kestrel-dev.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy9kigDYGes4KCapicp8F9H0t3xeTAiXynoSn4fAwG7kNWIA2iZK_-kTBuGdt6AV5E8juUxm8pGD_zR5A4XtqEwaFXgIxsersjk5V0tKnyIWi1nPGWzE5x_YR9XrIXtpz5u9nVr8e_yol2fe9ckdcVQ8CCQf3avTKgYvLloMe-GCPbKxdwWnuK3JFB/s72-w400-h391-c/2023-05-29_20-59-43.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-9049032025342264339.post-3109214824589007873</guid><pubDate>Thu, 18 May 2023 07:23:00 +0000</pubDate><atom:updated>2023-05-18T10:23:16.230+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.Net Core</category><category domain="http://www.blogger.com/atom/ns#">Expression trees</category><category domain="http://www.blogger.com/atom/ns#">Reflection</category><title>Generate action urls from C# lambda expressions in ASP.Net MVC Core: good news for those who missed it there</title><atom:summary type="text">In ASP.Net MVC (on top on .Net Framework) there was useful mechanism for generating actions urls from C# lambda expressions. Let&#39;s say we have controller UserController for managing users which has List action with 3 params:page number (in case if users list is large and we need to use pagination)sort by (first name, last name, etc)sort direction (asc or desc)

public enum SortDirection
{
    Asc</atom:summary><link>http://sadomovalex.blogspot.com/2023/05/generate-action-urls-from-c-lambda.html</link><author>noreply@blogger.com (Alexey Sadomov)</author><thr:total>0</thr:total></item></channel></rss>