<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='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'><id>tag:blogger.com,1999:blog-9049032025342264339</id><updated>2026-10-22T12:08:57.595+03:00</updated><category term="Sharepoint"/><category term="Sharepoint online"/><category term="PowerShell"/><category term="O365"/><category term="Azure"/><category term="Security"/><category term="Camlex.NET"/><category term="Search"/><category term="Client object model"/><category term="Azure AD"/><category term="Microsoft Graph"/><category term="Localization"/><category term="Taxonomy"/><category term="Azure functions"/><category term="OfficeDevPnP"/><category term="Javascript object model"/><category term="CAML"/><category term="WebJobs"/><category term="Bug"/><category term="IIS"/><category term="Navigation"/><category term="ASP.Net MVC"/><category term="MVP"/><category term="Rest API"/><category term="Content deployment"/><category term="Troubleshooting"/><category term="UI"/><category term="Upgrade"/><category term="User profiles"/><category term="AD"/><category term="ASP.Net"/><category term="ASP.Net Core"/><category term="Cross-site publishing"/><category term="Expression trees"/><category term="FBA"/><category term="MS Teams"/><category term="Publishing Infrastructure"/><category term="SPFx"/><category term="Sandbox"/><category term="Sql server"/><category term="URL rewrite"/><category term="Web API"/><category term="Windows"/><category term="Ajax"/><category term="Docker"/><category term="JQuery"/><category term="SSL"/><category term="Social computing"/><category term="Alerts"/><category term="CSOM"/><category term="Fluent NHibernate"/><category term="Linux"/><category term="NHibernate"/><category term="Performance"/><category term="PnP.PowerShell"/><category term="Workflows"/><category term="Azure table storage"/><category term="CosmosDB"/><category term="Friendly URLs"/><category term="Orchard"/><category term="VMWare"/><category term="WCF"/><category term="Display templates"/><category term="Github"/><category term="MySQL"/><category term="Nginx"/><category term="PnP.Framework"/><category term="Sensitivity labels"/><category term="Visual Studio"/><category term="Web service"/><category term="Codeplex"/><category term="Debugging"/><category term="Entity Framework"/><category term="Json"/><category term="MS Office"/><category term="Maintenance"/><category term="Mercurial"/><category term="Mobile"/><category term="Python"/><category term="ReSharper"/><category term="React"/><category term="SEO"/><category term="SQL"/><category term="Sharepoint Designer"/><category term="Telerik"/><category term="Unit tests"/><category term="Yammer"/><category term="ARM templates"/><category term="Automapper"/><category term="Azure DevOps"/><category term="Backup"/><category term="Cache"/><category term="Client side rendering"/><category term="Css"/><category term="Document management"/><category term="Git"/><category term="IoC"/><category term="Kestrel"/><category term="Linq 2 NHibernate"/><category term="Linq 2 Sharepoint"/><category term="Linq 2 Sql"/><category term="Modern sites"/><category term="NDepend"/><category term="NVelocity"/><category term="Obfuscar"/><category term="PnP templates"/><category term="Postman"/><category term="Reflection"/><category term="Remote event receivers"/><category term="Sharepoint Framework"/><category term="StructureMap"/><category term="Subversion"/><category term="Swagger"/><category term="Timer jobs"/><category term="Variations"/><category term="WSPBuilder"/><category term="WatiN"/><category term="WebDAV"/><category term="nodejs"/><category term="ADAL"/><category term="ALT.Net"/><category term="Android"/><category term="BizTalk"/><category term="CLI"/><category term="CORS"/><category term="Claims"/><category term="Cloud"/><category term="Cross platform"/><category term="DDD"/><category term="DotNetOpenAuth"/><category term="Dynamic objects"/><category term="Fluent UI"/><category term="Html5"/><category term="Idea"/><category term="Iframe"/><category term="InfoPath"/><category term="JSONP"/><category term="JWT"/><category term="KeyVault"/><category term="Licensing"/><category term="MSBuild"/><category term="MongoDB"/><category term="Moq"/><category term="NHibernate Search"/><category term="NLucene"/><category term="Nuget"/><category term="OAuth"/><category term="OWIN"/><category term="Open source"/><category term="PHP"/><category term="Patterns"/><category term="PnPJS"/><category term="Razor"/><category term="Redux"/><category term="Responsive design"/><category term="SNI"/><category term="SPGraphviz"/><category term="Serilog"/><category term="SyntaxHighlighter"/><category term="Sysinternals"/><category term="TFS"/><category term="Twitter"/><category term="TypeMock"/><category term="ULS"/><category term="Wordpress"/><category term="Yandex"/><category term="Youtube"/><category term="gulp"/><category term="iOS"/><category term="ngrok"/><title type='text'>sadomovalex&#39;s blog</title><subtitle type='html'>Blog for software developers</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>655</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-8538286933883898715</id><published>2026-10-17T11:09:58.953+03:00</published><updated>2026-10-17T11:18:17.873+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net Core"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Serilog"/><title type='text'>ASP.NET Core: Persisting Serilog Logs from a Docker Container to the Host</title><summary type="text">Serilog is a popular logging library for ASP.NET Core applications. It integrates easily with the built-in logging infrastructure and offers flexible configuration options.When running an application in Docker—and later, potentially, in Kubernetes—logging to standard output (stdout) is generally the preferred approach. It allows you to access application logs using standard Docker commands, such </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/8538286933883898715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2026/10/aspnet-core-persisting-serilog-logs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/8538286933883898715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/8538286933883898715'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2026/10/aspnet-core-persisting-serilog-logs.html' title='ASP.NET Core: Persisting Serilog Logs from a Docker Container to the Host'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLPeCi1lJLIbdGMz3IbXkxmh3JSM4HEtyoZPyl2L0YcYgyDUXxrviyxXmXdgN-_ryXSIFnPS1x_EDARt55DzmPaRCqWwDafwI6DRdmyZlBGkUG7NH5vSrXtPwRgEOL5ux0o_6Jl9dIo6oLjii6eBc0nHKA9F-ZU_uapalgoGl54rniiGC4AmFaDI65ers/s72-w640-h404-c/fdd3617ea3a096677d61e63adc5aedd9.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-4975645155571883646</id><published>2026-10-03T10:52:56.980+03:00</published><updated>2026-10-03T11:05:48.839+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net MVC"/><category scheme="http://www.blogger.com/atom/ns#" term="Moq"/><category scheme="http://www.blogger.com/atom/ns#" term="Unit tests"/><title type='text'>Caching Image Responses in ASP.NET Core MVC</title><summary type="text">Hi everyone! In this article, I’d like to share my experience implementing client-side image caching in an ASP.NET Core MVC application.

In the SaaS world, reducing resource consumption is an important task, especially as the number of customers served by a single server increases. Image generation and delivery on the backend can be relatively CPU- and memory-intensive operations. Adding </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/4975645155571883646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2026/10/caching-image-responses-in-aspnet-core.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/4975645155571883646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/4975645155571883646'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2026/10/caching-image-responses-in-aspnet-core.html' title='Caching Image Responses in ASP.NET Core MVC'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEmf3t1SS4h417mC8uUid8rdlBxUHeBO6nGiXsv-PnmTXiYvF9B6ZsSiIepp5Q49E-Txf1T8Hsz7ScAm9RS1AV5p8C9-_4zRmokCyhMbtch96aRXDT-vI-M14JaF0lEwmfDSj8p4yOr8Qdb0uIEU8hQDTEl1FJDU-NU06-IjfbyjF6NLEv92elMSHLFMs/s72-c/c6a381b0a942286af4047f16b01ddf12.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-6218754346076065256</id><published>2024-10-08T09:24:00.006+03:00</published><updated>2024-10-08T09:24:54.140+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Nginx"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>Use nginx running in Docker container to serve php sites running on the host</title><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</summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/6218754346076065256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2024/10/use-nginx-running-in-docker-container.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/6218754346076065256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/6218754346076065256'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2024/10/use-nginx-running-in-docker-container.html' title='Use nginx running in Docker container to serve php sites running on the host'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-9119202171995188318</id><published>2024-09-18T09:41:00.001+03:00</published><updated>2024-09-18T09:41:08.353+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net Core"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Kestrel"/><category scheme="http://www.blogger.com/atom/ns#" term="Nginx"/><title type='text'>Use nginx running in Docker container to serve .NET sites running on Kestrel both in host and Docker containers</title><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, </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/9119202171995188318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2024/09/use-nginx-running-in-docker-container.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/9119202171995188318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/9119202171995188318'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2024/09/use-nginx-running-in-docker-container.html' title='Use nginx running in Docker container to serve .NET sites running on Kestrel both in host and Docker containers'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></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></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-3093914131216267037</id><published>2024-08-27T18:25:00.002+03:00</published><updated>2024-08-27T18:25:18.486+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Nginx"/><title type='text'>Nginx uses 1st available server configuration when domain name not resolved</title><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</summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/3093914131216267037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2024/08/nginx-uses-1st-available-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/3093914131216267037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/3093914131216267037'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2024/08/nginx-uses-1st-available-server.html' title='Nginx uses 1st available server configuration when domain name not resolved'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></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></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-4231457680803525312</id><published>2024-06-19T18:11:00.002+03:00</published><updated>2024-06-19T18:11:46.704+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Obfuscar"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Obfuscar: how to stop build of .NET app with error when obfuscation failed</title><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;</summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/4231457680803525312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2024/06/obfuscar-how-to-stop-build-of-net-app.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/4231457680803525312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/4231457680803525312'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2024/06/obfuscar-how-to-stop-build-of-net-app.html' title='Obfuscar: how to stop build of .NET app with error when obfuscation failed'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-829962593943326363</id><published>2024-06-05T19:14:00.002+03:00</published><updated>2024-06-05T19:14:31.697+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net Core"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Use PowerShell in Visual Studio build events when build Docker image for .Net app</title><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 </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/829962593943326363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2024/06/use-powershell-in-visual-studio-build.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/829962593943326363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/829962593943326363'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2024/06/use-powershell-in-visual-studio-build.html' title='Use PowerShell in Visual Studio build events when build Docker image for .Net app'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-8095101867933330520</id><published>2024-04-07T11:23:00.000+03:00</published><updated>2024-04-07T11:23:12.949+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><title type='text'>Introduction to Docker: what is Docker and what problems it solves</title><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/</summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/8095101867933330520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2024/04/introduction-to-docker-what-is-docker.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/8095101867933330520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/8095101867933330520'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2024/04/introduction-to-docker-what-is-docker.html' title='Introduction to Docker: what is Docker and what problems it solves'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></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></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-1044374633082334685</id><published>2024-03-20T13:39:00.000+03:00</published><updated>2024-03-20T13:39:02.331+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Inject class to Python module dynamically</title><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 </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/1044374633082334685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2024/03/inject-class-to-python-module.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/1044374633082334685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/1044374633082334685'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2024/03/inject-class-to-python-module.html' title='Inject class to Python module dynamically'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-3018307509288839231</id><published>2024-03-10T19:43:00.000+03:00</published><updated>2024-03-10T19:43:01.017+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>Cinnamon: first thing you may want to install when switched from Windows to Linux</title><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</summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/3018307509288839231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2024/03/cinnamon-first-thing-you-may-want-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/3018307509288839231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/3018307509288839231'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2024/03/cinnamon-first-thing-you-may-want-to.html' title='Cinnamon: first thing you may want to install when switched from Windows to Linux'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></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></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-6667582867365198438</id><published>2024-02-06T08:54:00.000+03:00</published><updated>2024-02-06T08:54:01.854+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Git"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>Fix problem with Git client for Linux which asks for credentials on every push with installed SSH key</title><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 </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/6667582867365198438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2024/02/fix-problem-with-git-client-for-linux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/6667582867365198438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/6667582867365198438'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2024/02/fix-problem-with-git-client-for-linux.html' title='Fix problem with Git client for Linux which asks for credentials on every push with installed SSH key'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></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></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-7780541166599667114</id><published>2024-01-09T13:32:00.001+03:00</published><updated>2024-01-09T13:32:26.419+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>Verify JWT tokens with EdDSA encryption algorithm</title><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;</summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/7780541166599667114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2024/01/verify-jwt-tokens-with-eddsa-encryption.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/7780541166599667114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/7780541166599667114'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2024/01/verify-jwt-tokens-with-eddsa-encryption.html' title='Verify JWT tokens with EdDSA encryption algorithm'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-3571244672922507836</id><published>2023-12-25T17:37:00.002+03:00</published><updated>2024-01-09T13:33:52.075+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>Sign JWT tokens with EdDSA encryption algorithm</title><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 </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/3571244672922507836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/12/sign-jwt-tokens-with-eddsa-encryption.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/3571244672922507836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/3571244672922507836'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/12/sign-jwt-tokens-with-eddsa-encryption.html' title='Sign JWT tokens with EdDSA encryption algorithm'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-1873329803272054953</id><published>2023-12-12T21:03:00.003+03:00</published><updated>2023-12-12T21:03:51.279+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Fluent NHibernate"/><category scheme="http://www.blogger.com/atom/ns#" term="Linq 2 NHibernate"/><category scheme="http://www.blogger.com/atom/ns#" term="MySQL"/><category scheme="http://www.blogger.com/atom/ns#" term="NHibernate"/><title type='text'>Fix Linq 2 NHibernate for MySQL</title><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 </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/1873329803272054953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/12/fix-linq-2-nhibernate-for-mysql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/1873329803272054953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/1873329803272054953'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/12/fix-linq-2-nhibernate-for-mysql.html' title='Fix Linq 2 NHibernate for MySQL'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-319795429582572181</id><published>2023-11-18T19:58:00.002+03:00</published><updated>2023-11-18T19:58:36.857+03:00</updated><title type='text'>Use Obfuscar for obfuscating ASP.Net Core web apps</title><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 </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/319795429582572181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/11/use-obfuscar-for-obfuscating-aspnet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/319795429582572181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/319795429582572181'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/11/use-obfuscar-for-obfuscating-aspnet.html' title='Use Obfuscar for obfuscating ASP.Net Core web apps'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></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></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-32068434384196839</id><published>2023-11-07T18:01:00.001+03:00</published><updated>2023-11-07T18:01:21.798+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net Core"/><title type='text'>Bind complex view model objects in ASP.Net Core using ComplexObjectModelBinder</title><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 </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/32068434384196839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/11/bind-complex-view-model-objects-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/32068434384196839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/32068434384196839'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/11/bind-complex-view-model-objects-in.html' title='Bind complex view model objects in ASP.Net Core using ComplexObjectModelBinder'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-1141582844168454477</id><published>2023-10-11T12:29:00.006+03:00</published><updated>2024-01-09T13:34:27.495+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>Generate EdDSA key pair in .NET and save it to json</title><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 </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/1141582844168454477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/10/generate-eddsa-key-pair-in-net-and-save.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/1141582844168454477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/1141582844168454477'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/10/generate-eddsa-key-pair-in-net-and-save.html' title='Generate EdDSA key pair in .NET and save it to json'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-7008725268117960451</id><published>2023-09-27T15:57:00.001+03:00</published><updated>2023-09-27T15:57:04.386+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Problem with datetime format used in %date% environment variable in Windows scheduled tasks</title><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 </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/7008725268117960451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/09/problem-with-datetime-format-used-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/7008725268117960451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/7008725268117960451'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/09/problem-with-datetime-format-used-in.html' title='Problem with datetime format used in %date% environment variable in Windows scheduled tasks'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-7447534894152609727</id><published>2023-09-20T21:56:00.005+03:00</published><updated>2023-09-20T21:56:43.920+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Github"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>Use Github secrets to restore nuget packages from private packages source with authentication in Dockerfile via Github actions</title><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 </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/7447534894152609727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/09/use-github-secrets-to-restore-nuget.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/7447534894152609727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/7447534894152609727'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/09/use-github-secrets-to-restore-nuget.html' title='Use Github secrets to restore nuget packages from private packages source with authentication in Dockerfile via Github actions'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-5846820118299565203</id><published>2023-08-15T17:49:00.004+03:00</published><updated>2023-08-15T17:49:51.725+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Localization"/><title type='text'>Problem with MissingManifestResourceException for embedded resx files in subfolders</title><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 </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/5846820118299565203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/08/problem-with-missingmanifestresourceexc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/5846820118299565203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/5846820118299565203'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/08/problem-with-missingmanifestresourceexc.html' title='Problem with MissingManifestResourceException for embedded resx files in subfolders'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></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></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-8687326733213255701</id><published>2023-08-08T17:20:00.002+03:00</published><updated>2023-08-08T17:20:15.221+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CAML"/><category scheme="http://www.blogger.com/atom/ns#" term="Camlex.NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Sharepoint"/><category scheme="http://www.blogger.com/atom/ns#" term="Sharepoint online"/><title type='text'>Camlex and Camlex.Client 5.4.2 released</title><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;
</summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/8687326733213255701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/08/camlex-and-camlexclient-542-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/8687326733213255701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/8687326733213255701'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/08/camlex-and-camlexclient-542-released.html' title='Camlex and Camlex.Client 5.4.2 released'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-5581031555016814355</id><published>2023-07-04T17:16:00.002+03:00</published><updated>2023-07-04T17:16:39.541+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Fluent NHibernate"/><category scheme="http://www.blogger.com/atom/ns#" term="MySQL"/><category scheme="http://www.blogger.com/atom/ns#" term="NHibernate"/><title type='text'>Generate database schema for MySQL using NHibernate hbm2ddl tool</title><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;
{
    </summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/5581031555016814355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/07/generate-database-schema-for-mysql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/5581031555016814355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/5581031555016814355'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/07/generate-database-schema-for-mysql.html' title='Generate database schema for MySQL using NHibernate hbm2ddl tool'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-8554872040400134516</id><published>2023-06-22T13:15:00.004+03:00</published><updated>2023-06-22T13:15:36.496+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Azure"/><category scheme="http://www.blogger.com/atom/ns#" term="Troubleshooting"/><title type='text'>Implement TAP/multithread friendly logging scopes for Microsoft.Extensions.Logging.ILogger</title><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!;


</summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/8554872040400134516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/06/implement-tapmultithread-friendly.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/8554872040400134516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/8554872040400134516'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/06/implement-tapmultithread-friendly.html' title='Implement TAP/multithread friendly logging scopes for Microsoft.Extensions.Logging.ILogger'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-1845529993573103696</id><published>2023-06-17T17:44:00.000+03:00</published><updated>2023-06-17T17:44:00.322+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MySQL"/><title type='text'>Profile MySQL db with Neor Profile SQL</title><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</summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/1845529993573103696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/06/profile-mysql-db-with-neor-profile-sql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/1845529993573103696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/1845529993573103696'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/06/profile-mysql-db-with-neor-profile-sql.html' title='Profile MySQL db with Neor Profile SQL'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></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></entry><entry><id>tag:blogger.com,1999:blog-9049032025342264339.post-3779697680678282373</id><published>2023-06-17T11:04:00.002+03:00</published><updated>2023-06-17T11:04:28.904+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net MVC"/><category scheme="http://www.blogger.com/atom/ns#" term="Automapper"/><category scheme="http://www.blogger.com/atom/ns#" term="Fluent NHibernate"/><category scheme="http://www.blogger.com/atom/ns#" term="NHibernate"/><title type='text'>StackOverflowException when use hierarchical object mapping with AutoMapper and Fluent NHibernate lazy loading</title><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</summary><link rel='replies' type='application/atom+xml' href='http://sadomovalex.blogspot.com/feeds/3779697680678282373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sadomovalex.blogspot.com/2023/06/stackoverflowexception-when-use.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/3779697680678282373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9049032025342264339/posts/default/3779697680678282373'/><link rel='alternate' type='text/html' href='http://sadomovalex.blogspot.com/2023/06/stackoverflowexception-when-use.html' title='StackOverflowException when use hierarchical object mapping with AutoMapper and Fluent NHibernate lazy loading'/><author><name>Alexey Sadomov</name><uri>http://www.blogger.com/profile/18112105989691733410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>