{"id":325437,"date":"2021-06-24T15:01:00","date_gmt":"2021-06-24T15:01:00","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=325437"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2021-06-24T15:01:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=325437","title":{"rendered":"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 NuGet \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c API"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u042f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e .NET \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MIDI \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438 MIDI \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u2013 <a href=\"https:\/\/github.com\/melanchall\/drywetmidi\" rel=\"noopener noreferrer nofollow\">DryWetMIDI<\/a>. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e API \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0435 (\u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 .NET \u0441\u0438\u0441\u0442\u0435\u043c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435), \u043e\u0434\u043d\u0430\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 MIDI \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0430 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 API \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Windows, \u043e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0431\u0440\u043e\u0441\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0432\u0441\u0435\u0433\u043e \u0438 \u0432\u0441\u044f, \u043f\u043e\u0441\u0435\u043c\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c macOS, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0443\u0437\u044b\u043a\u043e\u0439, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0436\u0435 \u0438 \u0441\u0430\u043c\u0430\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u0432 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u0440\u0443\u0433\u0430\u0445.<\/p>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e API, \u043f\u0440\u043e\u0449\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u044f \u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b, \u0438 \u0445\u043e\u0447\u0443 \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u0443\u0442\u044c \u0434\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0435\u0449\u0451 \u0440\u0430\u0437 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u0430\u043c\u0438. \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0448\u0430\u0433\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h2>\u041f\u0435\u0440\u0432\u044b\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438<\/h2>\n<p>\u041c\u043e\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u0430\u043a \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e \u043e\u043d\u043e\u0439 \u0432 \u043c\u0438\u0440\u0435 .NET, \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 NuGet \u043f\u0430\u043a\u0435\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0432 \u043d\u0451\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 API \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u0412 C# \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cs\">[DllImport(\"test\")] public static extern int Foo();<\/code><\/pre>\n<p>\u0422\u043e \u0431\u0438\u0448\u044c \u043d\u0435\u0442 \u043d\u0443\u0436\u0434\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, .NET \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0443\u0436\u043d\u043e\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u0440\u044f\u0434\u043e\u043c \u0441 \u043d\u0430\u0448\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b <em>test.dll<\/em> \u0438 <em>test.dylib<\/em>, \u0442\u043e \u043d\u0430 Windows \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>Foo<\/code> \u0438\u0437 test.dll, \u0430 \u043d\u0430 macOS \u2013 \u0438\u0437 test.dylib. \u041c\u043e\u0436\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0430 *nix, \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0444\u0430\u0439\u043b <em>test.so<\/em>.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0434\u0432\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0448\u0435\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0412 \u0444\u0430\u0439\u043b\u0435 .csproj DryWetMIDI \u0443\u043a\u0430\u0437\u0430\u043d\u044b<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/standard\/frameworks\" rel=\"noopener noreferrer nofollow\"> TFM<\/a> <em>netstandard2.0<\/em> \u0438 <em>net45<\/em>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044f \u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u043b \u044d\u0442\u0438 \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0437\u043e\u0432\u0451\u043c <em>DualLibClassLibrary<\/em>, \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b <em>Class.cs<\/em>:<\/p>\n<pre><code class=\"cs\">using System.Runtime.InteropServices;  namespace DualLibClassLibrary {     public static class Class     {         [DllImport(\"test\")]         public static extern int Foo();          public static int Bar()         {             return Foo() * 1000;         }     } }<\/code><\/pre>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043c, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0443\u0436\u043d\u044b \u0441\u0430\u043c\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 (test.dll \u0438 test.dylib). \u042f \u0441\u043e\u0431\u0440\u0430\u043b \u0438\u0445 \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 C (\u043a \u0441\u043b\u043e\u0432\u0443, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0442\u0435\u043c \u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435):<\/p>\n<p><em>\u0434\u043b\u044f Windows<\/em><\/p>\n<pre><code class=\"cs\">int Foo() { return 123; }<\/code><\/pre>\n<p><em>\u0434\u043b\u044f macOS<\/em><\/p>\n<pre><code class=\"cs\">int Foo() { return 456; }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0444\u0430\u0439\u043b\u044b test.dll \u0438 test.dylib \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0430 \u0432 Azure DevOps (\u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0432\u0443\u0445, \u0434\u043b\u044f Windows \u0438 macOS). \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 CI, \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0435\u0448\u0438\u043b \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u0430\u043a \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 3 \u0448\u0430\u0433\u043e\u0432:<\/p>\n<p><em>1. \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u043a\u043e\u0434\u043e\u043c \u043d\u0430 C (\u0437\u0430\u0434\u0430\u0447\u0430 PowerShell):<\/em><\/p>\n<pre><code class=\"powershell\">New-Item \"test.c\" -ItemType File -Value \"int Foo() { return 123; }\"<\/code><\/pre>\n<p>(<code>return 456;<\/code> \u0434\u043b\u044f macOS);<\/p>\n<p><em>2. \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 (\u0437\u0430\u0434\u0430\u0447\u0430 Command Line):<\/em><\/p>\n<pre><code class=\"bash\">gcc -v -c test.c gcc -v -shared -o test.dll test.o<\/code><\/pre>\n<p>(test.dylib \u0434\u043b\u044f macOS);<\/p>\n<p><em>3. \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 (\u0437\u0430\u0434\u0430\u0447\u0430 Publish Pipeline Artifacts).<\/em><\/p>\n<p>\u0418\u0442\u0430\u043a, \u0438\u043c\u0435\u0435\u043c \u0444\u0430\u0439\u043b\u044b test.dll \u0438 test.dylib, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>Foo<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043b\u044f Windows \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>123<\/code>, \u0430 \u0434\u043b\u044f macOS \u2013 <code>456<\/code>, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0424\u0430\u0439\u043b\u044b \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0440\u044f\u0434\u043e\u043c \u0441 <em>DualLibClassLibrary.csproj<\/em>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u0432 NuGet \u043f\u0430\u043a\u0435\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u043d\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0443 \u043d\u0430\u0441 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0444\u0430\u0439\u043b\u0430 .csproj (SDK style), \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0442\u0430\u043c \u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432. \u0418\u0437\u0443\u0447\u0438\u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u043e\u043f\u0440\u043e\u0441, \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u0442\u0430\u043a\u043e\u043c\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 .csproj:<\/p>\n<pre><code class=\"xml\">&lt;Project Sdk=\"Microsoft.NET.Sdk\"&gt;    &lt;PropertyGroup&gt;     &lt;TargetFrameworks&gt;netstandard2.0;net45&lt;\/TargetFrameworks&gt;     &lt;LangVersion&gt;6&lt;\/LangVersion&gt;     &lt;Configurations&gt;Debug;Release&lt;\/Configurations&gt;   &lt;\/PropertyGroup&gt;    &lt;PropertyGroup&gt;     &lt;PackageId&gt;DualLibClassLibrary&lt;\/PackageId&gt;     &lt;Version&gt;1.0.0&lt;\/Version&gt;     &lt;Authors&gt;melanchall&lt;\/Authors&gt;     &lt;Owners&gt;melanchall&lt;\/Owners&gt;     &lt;Description&gt;Dual-lib class library&lt;\/Description&gt;     &lt;Copyright&gt;Copyright \u200b Melanchall 2021&lt;\/Copyright&gt;     &lt;AutoGenerateBindingRedirects&gt;true&lt;\/AutoGenerateBindingRedirects&gt;   &lt;\/PropertyGroup&gt;    &lt;ItemGroup&gt;     &lt;Content Include=\"test.dll\"&gt;       &lt;Pack&gt;true&lt;\/Pack&gt;       &lt;CopyToOutputDirectory&gt;Always&lt;\/CopyToOutputDirectory&gt;     &lt;\/Content&gt;     &lt;Content Include=\"test.dylib\"&gt;       &lt;Pack&gt;true&lt;\/Pack&gt;       &lt;CopyToOutputDirectory&gt;Always&lt;\/CopyToOutputDirectory&gt;     &lt;\/Content&gt;   &lt;\/ItemGroup&gt;  &lt;\/Project&gt;<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442:<\/p>\n<p><code>dotnet pack .\\DualLibClassLibrary.sln -c Release<\/code><\/p>\n<p>\u0414\u0430\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u0430\u043a\u0435\u0442\u0430, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043f\u043a\u0443 (\u044f \u043d\u0430\u0437\u0432\u0430\u043b \u0435\u0451 TestFeed) \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0438 \u0443\u043a\u0430\u0436\u0435\u043c \u0435\u0451 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 Visual Studio. \u0412\u043d\u0443\u0442\u0440\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <em>DualLibClassLibrary.1.0.0.nupkg<\/em>. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u0434\u043e\u0431\u0440\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c .NET Framework \u043d\u0430 Windows. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4c8\/1cb\/35f\/4c81cb35fdfa7fc6c1734f01816e018d.png\" alt=\"\u0424\u0430\u0439\u043b\u044b test.dll \u0438 test.dylib \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430\" title=\"\u0424\u0430\u0439\u043b\u044b test.dll \u0438 test.dylib \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430\" width=\"150\" height=\"131\"><figcaption>\u0424\u0430\u0439\u043b\u044b test.dll \u0438 test.dylib \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430<\/figcaption><\/figure>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0431\u043d\u0430\u0434\u0451\u0436\u0438\u0432\u0430\u044e\u0449\u0435, \u043f\u0438\u0448\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 <em>Program.cs<\/em> \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cs\">static void Main(string[] args) {     var result = DualLibClassLibrary.Class.Bar();     Console.WriteLine($\"Result = {result}. Press any key to exit...\");     Console.ReadKey(); }<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438 \u0433\u0440\u0443\u0441\u0442\u0438\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/68a\/4c2\/b89\/68a4c2b89f67f934630b58f76d8a36c8.png\" alt=\"\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u043d\u0430\u0448\u043b\u0430 \u0444\u0430\u0439\u043b test.dll\" title=\"\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u043d\u0430\u0448\u043b\u0430 \u0444\u0430\u0439\u043b test.dll\" width=\"763\" height=\"193\"><figcaption>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u043d\u0430\u0448\u043b\u0430 \u0444\u0430\u0439\u043b test.dll<\/figcaption><\/figure>\n<p>\u0427\u0442\u043e \u0436, \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 <em>bin\/Debug<\/em>:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/055\/f36\/dcf\/055f36dcf6e5a58ce2589a2c7e68d53e.png\" alt=\"\u0424\u0430\u0439\u043b\u044b test.dll \u0438 test.dylib \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\" title=\"\u0424\u0430\u0439\u043b\u044b test.dll \u0438 test.dylib \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\" width=\"149\" height=\"91\"><figcaption>\u0424\u0430\u0439\u043b\u044b test.dll \u0438 test.dylib \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/figcaption><\/figure>\n<p>\u0418 \u043f\u0440\u0430\u0432\u0434\u0430 \u043d\u0435\u0442 \u0444\u0430\u0439\u043b\u043e\u0432. \u041a\u0430\u043a \u0436\u0435 \u0442\u0430\u043a, <code>&lt;CopyToOutputDirectory&gt;<\/code> \u043c\u044b \u0438\u043c \u0443\u043a\u0430\u0437\u0430\u043b\u0438, \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0444\u0430\u0439\u043b\u044b \u0432\u0438\u0434\u043d\u044b. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 .csproj \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432\u0441\u0451 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/085\/2b5\/136\/0852b51369dd97f7a21896bd0f1a2e67.png\" alt=\"\u0412 csproj \u043f\u043e\u043b\u043d\u044b\u0439 \u0431\u0435\u0441\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438\" title=\"\u0412 csproj \u043f\u043e\u043b\u043d\u044b\u0439 \u0431\u0435\u0441\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438\" width=\"264\" height=\"130\"><figcaption>\u0412 csproj \u043f\u043e\u043b\u043d\u044b\u0439 \u0431\u0435\u0441\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438<\/figcaption><\/figure>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>&lt;CopyToOutputDirectory&gt;<\/code> \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0430 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043f\u043e \u043d\u0435\u0432\u0435\u0434\u043e\u043c\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 test.dylib \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f \u043a\u0430\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>&lt;None&gt;<\/code>, \u0430 test.dll \u043a\u0430\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>&lt;Content&gt;<\/code>. \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 .nupkg. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 <a href=\"https:\/\/github.com\/NuGetPackageExplorer\/NuGetPackageExplorer\" rel=\"noopener noreferrer nofollow\">NuGet Package Explorer<\/a>, \u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt; &lt;package xmlns=\"http:\/\/schemas.microsoft.com\/packaging\/2012\/06\/nuspec.xsd\"&gt;   &lt;metadata&gt;     &lt;id&gt;DualLibClassLibrary&lt;\/id&gt;     &lt;version&gt;1.0.0&lt;\/version&gt;     &lt;authors&gt;melanchall&lt;\/authors&gt;     &lt;owners&gt;&lt;\/owners&gt;     &lt;requireLicenseAcceptance&gt;false&lt;\/requireLicenseAcceptance&gt;     &lt;description&gt;Dual-lib class library&lt;\/description&gt;     &lt;copyright&gt;Copyright \u200b Melanchall 2021&lt;\/copyright&gt;     &lt;dependencies&gt;       &lt;group targetFramework=\".NETFramework4.5\" \/&gt;       &lt;group targetFramework=\".NETStandard2.0\" \/&gt;     &lt;\/dependencies&gt;     &lt;contentFiles&gt;       &lt;files include=\"any\/net45\/test.dll\" buildAction=\"Content\" \/&gt;       &lt;files include=\"any\/netstandard2.0\/test.dll\" buildAction=\"Content\" \/&gt;       &lt;files include=\"any\/net45\/test.dylib\" buildAction=\"Content\" \/&gt;       &lt;files include=\"any\/netstandard2.0\/test.dylib\" buildAction=\"Content\" \/&gt;     &lt;\/contentFiles&gt;   &lt;\/metadata&gt; &lt;\/package&gt;<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0444\u0430\u0439\u043b\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0431\u0435\u0437 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 <code>copyToOutput<\/code>, \u0447\u0442\u043e \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u043e (\u043f\u0440\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0442\u0443\u0442: <a href=\"https:\/\/docs.microsoft.com\/en-us\/nuget\/reference\/nuspec#using-the-contentfiles-element-for-content-files\" rel=\"noopener noreferrer nofollow\">Using the contentFiles element for content files<\/a>).<\/p>\n<h2>\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041f\u043e\u043b\u0438\u0441\u0442\u0430\u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u044b \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0432 \u0432\u0438\u0434\u0435 issues \u043d\u0430 GitHub, \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 StackOverflow \u0438 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Microsoft, \u0432\u0438\u0434\u043e\u0438\u0437\u043c\u0435\u043d\u0438\u043b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 .csproj \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"xml\">&lt;Content Include=\"test.dll\"&gt;   &lt;Pack&gt;true&lt;\/Pack&gt;   &lt;CopyToOutputDirectory&gt;Always&lt;\/CopyToOutputDirectory&gt;   &lt;PackageCopyToOutput&gt;true&lt;\/PackageCopyToOutput&gt;   &lt;PackagePath&gt;contentFiles;content&lt;\/PackagePath&gt; &lt;\/Content&gt; &lt;Content Include=\"test.dylib\"&gt;   &lt;Pack&gt;true&lt;\/Pack&gt;   &lt;CopyToOutputDirectory&gt;Always&lt;\/CopyToOutputDirectory&gt;   &lt;PackageCopyToOutput&gt;true&lt;\/PackageCopyToOutput&gt;   &lt;PackagePath&gt;contentFiles;content&lt;\/PackagePath&gt; &lt;\/Content&gt;<\/code><\/pre>\n<p>\u042d\u043b\u0435\u043c\u0435\u043d\u0442 <code>&lt;PackageCopyToOutput&gt;<\/code> \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u0432\u043d\u0435\u0441\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>copyToOutput<\/code> \u0432 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u043f\u0430\u043a\u0435\u0442\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043b \u043f\u0430\u043f\u043a\u0438, \u043a\u0443\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b, \u0434\u0430\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0432\u0440\u043e\u0434\u0435 <em>any<\/em>. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432\u0441\u0451 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0443\u0442: <a href=\"https:\/\/docs.microsoft.com\/en-us\/nuget\/reference\/msbuild-targets#including-content-in-a-package\" rel=\"noopener noreferrer nofollow\">Including content in a package<\/a>.<\/p>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0448 \u043f\u0430\u043a\u0435\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt; &lt;package xmlns=\"http:\/\/schemas.microsoft.com\/packaging\/2012\/06\/nuspec.xsd\"&gt;   &lt;metadata&gt;     &lt;id&gt;DualLibClassLibrary&lt;\/id&gt;     &lt;version&gt;1.0.1&lt;\/version&gt;     &lt;authors&gt;melanchall&lt;\/authors&gt;     &lt;owners&gt;&lt;\/owners&gt;     &lt;requireLicenseAcceptance&gt;false&lt;\/requireLicenseAcceptance&gt;     &lt;description&gt;Dual-lib class library&lt;\/description&gt;     &lt;copyright&gt;Copyright \u200b Melanchall 2021&lt;\/copyright&gt;     &lt;dependencies&gt;       &lt;group targetFramework=\".NETFramework4.5\" \/&gt;       &lt;group targetFramework=\".NETStandard2.0\" \/&gt;     &lt;\/dependencies&gt;     &lt;contentFiles&gt;       &lt;files include=\"test.dll\" buildAction=\"Content\" copyToOutput=\"true\" \/&gt;       &lt;files include=\"test.dylib\" buildAction=\"Content\" copyToOutput=\"true\" \/&gt;     &lt;\/contentFiles&gt;   &lt;\/metadata&gt; &lt;\/package&gt;<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0443\u0434\u0430 \u043b\u0443\u0447\u0448\u0435, \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>copyToOutput<\/code> \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 \u043d\u0430\u0448\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/788\/eb7\/a20\/788eb7a20826a4b5271fb751d37519ef.png\" alt=\"copyToOutput \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442\" title=\"copyToOutput \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442\" width=\"763\" height=\"193\"><figcaption>copyToOutput \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442<\/figcaption><\/figure>\n<p>\u0418 \u0441\u043d\u043e\u0432\u0430 \u043d\u0435\u0443\u0434\u0430\u0447\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043d\u043e \u043d\u0430 .NET 5:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/07f\/7b3\/745\/07f7b374584b61a41ac2e68daaf1373e.png\" alt=\"\u0412\u0441\u0451 \u0442\u0430\u043a \u0436\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435\u0442 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\" title=\"\u0412\u0441\u0451 \u0442\u0430\u043a \u0436\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435\u0442 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\" width=\"759\" height=\"193\"><figcaption>\u0412\u0441\u0451 \u0442\u0430\u043a \u0436\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435\u0442 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/figcaption><\/figure>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0441\u043b\u0435\u0433\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435 \u0432\u0438\u0434\u043d\u043e. \u041e\u0442\u043f\u0438\u0441\u0430\u043b\u0441\u044f \u0432 issue \u043f\u043e \u0438\u0442\u043e\u0433\u0443, \u043d\u0430 \u0447\u0442\u043e \u043c\u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u0438:<\/p>\n<blockquote>\n<p>Please see our&nbsp;<a href=\"https:\/\/docs.microsoft.com\/en-us\/nuget\/reference\/nuspec#package-folder-structure\" rel=\"noopener noreferrer nofollow\">docs on&nbsp;<\/a><code>contentFiles<\/code>. It supports adding different content depending on project&#8217;s target framework and language, and therefore needs files in a specific structure which your package is not currently using.<\/p>\n<\/blockquote>\n<p>\u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044f \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u0435\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u0438, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435 \u043f\u043e \u043f\u0443\u0442\u0438 <em>contentFiles<\/em>, \u0430 \u043f\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <em>contentFiles\/any\/netstandard2.0<\/em>, \u0442\u043e-\u0442\u0430\u043a\u0438 \u0434\u0430, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f .props \u0444\u0430\u0439\u043b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u044f \u0441\u0432\u043e\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0451\u043b \u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430, \u043f\u043e\u0441\u0435\u043c\u0443 \u043f\u043e\u0448\u0451\u043b \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0443\u0442\u0451\u043c. \u0418, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0432\u0435\u0440\u043d\u044b\u043c, \u0438\u0431\u043e \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 <code>contentFiles<\/code> \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 .NET Framework \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445, \u0430 \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043e\u0431\u044f\u0437\u0430\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044f \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Microsoft \u0441 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u044b\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c: <a href=\"https:\/\/docs.microsoft.com\/en-us\/nuget\/guides\/native-packages\" rel=\"noopener noreferrer nofollow\">Creating native packages<\/a>. \u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f, \u043e\u0434\u043d\u0430\u043a\u043e \u043a\u043e\u0435-\u0447\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u0438\u0437 \u043d\u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0435\u0440\u043f\u043d\u0443\u0442\u044c. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0444\u0430\u0439\u043b .targets, \u0433\u0434\u0435 \u043c\u044b \u0438 \u0443\u043a\u0430\u0436\u0435\u043c <code>&lt;CopyToOutputDirectory&gt;<\/code> \u043d\u0430\u0448\u0438\u043c \u0444\u0430\u0439\u043b\u0430\u043c. \u0421\u0430\u043c \u0444\u0430\u0439\u043b .targets \u043c\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0432 \u043f\u0430\u043a\u0435\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438. \u0421\u043a\u0430\u0437\u0430\u043d\u043e \u2013 \u0441\u0434\u0435\u043b\u0430\u043d\u043e. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b <em>DualLibClassLibrary.targets<\/em>:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt; &lt;Project ToolsVersion=\"4.0\" xmlns=\"http:\/\/schemas.microsoft.com\/developer\/msbuild\/2003\"&gt;   &lt;ItemGroup&gt;     &lt;None Include=\"$(MSBuildThisFileDirectory)test.dll\"&gt;       &lt;Link&gt;test.dll&lt;\/Link&gt;       &lt;CopyToOutputDirectory&gt;PreserveNewest&lt;\/CopyToOutputDirectory&gt;     &lt;\/None&gt;     &lt;None Include=\"$(MSBuildThisFileDirectory)test.dylib\"&gt;       &lt;Link&gt;test.dylib&lt;\/Link&gt;       &lt;CopyToOutputDirectory&gt;PreserveNewest&lt;\/CopyToOutputDirectory&gt;     &lt;\/None&gt;   &lt;\/ItemGroup&gt; &lt;\/Project&gt;<\/code><\/pre>\n<p>\u0410 \u0432 \u0444\u0430\u0439\u043b\u0435 <em>DualLibClassLibrary.csproj<\/em> \u043f\u0440\u043e\u043f\u0438\u0448\u0435\u043c:<\/p>\n<pre><code class=\"xml\">&lt;ItemGroup&gt;   &lt;None Include=\"test.dll\"&gt;     &lt;CopyToOutputDirectory&gt;PreserveNewest&lt;\/CopyToOutputDirectory&gt;     &lt;PackagePath&gt;build\\&lt;\/PackagePath&gt;     &lt;Pack&gt;true&lt;\/Pack&gt;   &lt;\/None&gt;   &lt;None Include=\"test.dylib\"&gt;     &lt;CopyToOutputDirectory&gt;PreserveNewest&lt;\/CopyToOutputDirectory&gt;     &lt;PackagePath&gt;build\\&lt;\/PackagePath&gt;     &lt;Pack&gt;true&lt;\/Pack&gt;   &lt;\/None&gt;   &lt;None Include=\"DualLibClassLibrary.targets\"&gt;     &lt;PackagePath&gt;build\\&lt;\/PackagePath&gt;     &lt;Pack&gt;true&lt;\/Pack&gt;   &lt;\/None&gt; &lt;\/ItemGroup&gt;<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044e 1.0.2, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0432 \u043d\u0430\u0448\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 .NET Framework \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/da8\/660\/7ee\/da86607ee6fbac81fb98527b2b5f14bc.png\" alt=\"\u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u0430\u044f\" title=\"\u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u0430\u044f\" width=\"763\" height=\"195\"><figcaption>\u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u0430\u044f<\/figcaption><\/figure>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0438\u0437-\u0437\u0430 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a. \u042f \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u0438\u0445 \u043d\u0430 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u0442\u0430\u043a\u0436\u0435 \u0432 64-\u0431\u0438\u0442\u043d\u043e\u0439 \u041e\u0421. \u0427\u0442\u043e \u0436, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435.<\/p>\n<h2>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 32- \u0438 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0437\u0430\u0439\u0442\u0438 \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 Visual Studio \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 Build, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u043e\u043f\u0446\u0438\u044e:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/683\/518\/b9c\/683518b9c001627beb4d4be0ce3068e3.png\" alt=\"\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0431\u0443\u0434\u0435\u0442 32-\u0431\u0438\u0442\u043d\u044b\u043c\" title=\"\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0431\u0443\u0434\u0435\u0442 32-\u0431\u0438\u0442\u043d\u044b\u043c\" width=\"342\" height=\"54\"><figcaption>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0431\u0443\u0434\u0435\u0442 32-\u0431\u0438\u0442\u043d\u044b\u043c<\/figcaption><\/figure>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 .NET Framework \u043e\u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 32-\u0431\u0438\u0442\u043d\u044b\u043c \u0434\u0430\u0436\u0435 \u043d\u0430 64-\u0431\u0438\u0442\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0417\u0430\u0431\u0430\u0432\u043d\u043e, \u0447\u0442\u043e \u0432 .NET Core\/.NET 5+ \u043e\u043f\u0446\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0430:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3be\/b4d\/b9d\/3beb4db9dcd30a058ec40c24215fa815.png\" alt=\"\u0410 \u0432 .NET Core \u043e\u043f\u0446\u0438\u044f \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0430\" title=\"\u0410 \u0432 .NET Core \u043e\u043f\u0446\u0438\u044f \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0430\" width=\"344\" height=\"84\"><figcaption>\u0410 \u0432 .NET Core \u043e\u043f\u0446\u0438\u044f \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0430<\/figcaption><\/figure>\n<p>\u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u043e\u043f\u0446\u0438\u044e, \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0432\u0435\u0440\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<p><code>Result = 123000. Press any key to exit...<\/code><\/p>\n<p>\u041d\u043e, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u043d\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:<\/p>\n<ol>\n<li>\n<p>\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043b\u0438\u0448\u043d\u0438\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0433\u0430\u043b\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 (\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 .NET Framework \u0431\u0435\u0437\u043e \u0432\u0441\u044f\u043a\u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439) \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u043c.<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0442\u0430\u043a \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0433\u043e\u0434\u0438\u0442\u0441\u044f, \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0442\u0443\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d: \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u0434\u0432\u0443\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u2013 32- \u0438 64-\u0431\u0438\u0442\u043d\u043e\u043c. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0447\u0443\u0442\u044c \u0440\u0430\u0441\u043f\u0443\u0445\u043d\u0435\u0442, \u0432\u043c\u0435\u0441\u0442\u043e 2 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0443\u0434\u0443\u0442 4. \u042f \u0432 \u044d\u0442\u043e\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043b\u043e\u0445\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0436\u0443, \u0438\u0431\u043e \u0444\u0430\u0439\u043b\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0443 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u044d\u0442\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c (\u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u0447\u0442\u043e \u0438\u043d\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b).<\/p>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0431\u0438\u0440\u0430\u043b 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u041a\u0430\u043a \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0432\u044b\u0448\u0435, \u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0436\u0443 \u0441\u0431\u043e\u0440\u043a\u0443 \u0432 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430\u0445 Azure DevOps \u0447\u0435\u0440\u0435\u0437 gcc. \u0423 gcc \u0435\u0441\u0442\u044c \u0444\u043b\u0430\u0433 <code>-m32<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043f\u043e \u0438\u0434\u0435\u0435, \u0434\u043e\u043b\u0436\u0435\u043d \u043a\u0430\u043a \u0440\u0430\u0437 \u0441\u043e\u0431\u0440\u0430\u0442\u044c 32-\u0431\u0438\u0442\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u041d\u0430 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0445 \u0430\u0433\u0435\u043d\u0442\u0430\u0445 \u0441 macOS \u0432\u0441\u0451 \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u0430 \u0432\u043e\u0442 \u043d\u0430 Windows \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0435\u043b\u0438\u0446\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0435 \u043b\u043e\u0433\u0438:<\/p>\n<p><code>C:\/ProgramData\/Chocolatey\/lib\/mingw\/tools\/install\/mingw64\/bin\/..\/lib\/gcc\/x86_64-w64-mingw32\/8.1.0\/..\/..\/..\/..\/x86_64-w64-mingw32\/bin\/ld.exe: skipping incompatible C:\/ProgramData\/Chocolatey\/lib\/mingw\/tools\/install\/mingw64\/bin\/..\/lib\/gcc\/x86_64-w64-mingw32\/8.1.0\/..\/..\/..\/..\/x86_64-w64-mingw32\/lib\\libuser32.a when searching for -luser32<\/code><\/p>\n<p><code>...<\/code><\/p>\n<p><code>C:\/ProgramData\/Chocolatey\/lib\/mingw\/tools\/install\/mingw64\/bin\/..\/lib\/gcc\/x86_64-w64-mingw32\/8.1.0\/..\/..\/..\/..\/x86_64-w64-mingw32\/lib\/libmsvcrt.a when searching for -lmsvcrt<\/code><\/p>\n<p><code>C:\/ProgramData\/Chocolatey\/lib\/mingw\/tools\/install\/mingw64\/bin\/..\/lib\/gcc\/x86_64-w64-mingw32\/8.1.0\/..\/..\/..\/..\/x86_64-w64-mingw32\/bin\/ld.exe: cannot find -lmsvcrt<\/code><\/p>\n<p><code>collect2.exe: error: ld returned 1 exit status<\/code><\/p>\n<p>\u0417\u0430\u0434\u0430\u0432 \u0432\u043e\u043f\u0440\u043e\u0441 \u0438 \u043d\u0430 <a href=\"https:\/\/stackoverflow.com\/questions\/67671973\/gcc-m32-not-working-on-windows-hosted-agents\" rel=\"noopener noreferrer nofollow\">StackOverflow<\/a>, \u0438 \u0432 <a href=\"https:\/\/developercommunity.visualstudio.com\/t\/gcc-m32-not-working-on-windows-hosted-agents\/1430375\" rel=\"noopener noreferrer nofollow\">Microsoft Developer Community<\/a>, \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u0430\u0433\u0435\u043d\u0442\u0430\u0445 Microsoft \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d 32-\u0431\u0438\u0442\u043d\u044b\u0439 MinGW, \u0447\u0442\u043e \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u0430\u0434\u0435\u043d\u0438\u044e. \u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <a href=\"https:\/\/github.com\/brechtsanders\/winlibs_mingw\" rel=\"noopener noreferrer nofollow\">brechtsanders\/winlibs_mingw<\/a>, \u043f\u0440\u0438\u0434\u044f \u043a \u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443 PowerShell \u0441\u043a\u0440\u0438\u043f\u0442\u0443:<\/p>\n<pre><code class=\"powershell\">Write-Host \"Downloading winlibs...\" Invoke-WebRequest -Uri \"https:\/\/github.com\/brechtsanders\/winlibs_mingw\/releases\/download\/11.1.0-12.0.0-9.0.0-r1\/winlibs-i686-posix-dwarf-gcc-11.1.0-mingw-w64-9.0.0-r1.zip\" -OutFile \"winlibs.zip\" Write-Host \"Downloaded.\"  Write-Host \"Extracting winlibs...\" Expand-Archive -LiteralPath 'winlibs.zip' -DestinationPath \"winlibs\" Write-Host \"Extracted.\"  Write-Host \"Building DLL...\" $gccPath = Get-ChildItem -Path \"winlibs\" -File -Filter \"i686-w64-mingw32-gcc.exe\" -Recurse  &amp; $gccPath.FullName -c test.c -m32 &amp; $gccPath.FullName -shared -o test.dll test.o -m32 Write-Host \"Built.\"<\/code><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0430\u0440\u0445\u0438\u0432\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 <em>i686-w64-mingw32-gcc.exe<\/em>, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u0430\u043a\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c 32-\u0431\u0438\u0442\u043d\u044b\u0439 \u0444\u0430\u0439\u043b test.dll. \u0423\u0440\u0430!<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c API \u043b\u0438\u0431\u043e \u0438\u0437 32- \u043b\u0438\u0431\u043e \u0438\u0437 64-\u0431\u0438\u0442\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438. \u042f \u0434\u0443\u043c\u0430\u044e, \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435, \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u0442\u0430\u043a\u043e\u043c:<\/p>\n<ol>\n<li>\n<p>\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 test32.dll, test64.dll, test32.dylib \u0438 test64.dylib;<\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u043b\u0430\u0435\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 <code>Api<\/code> \u0441 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043d\u0430\u0448\u0435\u043c\u0443 managed API \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u043b\u0430\u0435\u043c \u0434\u0432\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430 <code>Api32<\/code> \u0438 <code>Api64<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 API \u0438\u0437 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u0432\u044b\u0437\u044b\u0432\u0430\u044f unmanaged API \u0438\u0437 test32 \u0438 test64 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e;<\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u043b\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441 <code>ApiProvider<\/code>, \u0447\u044c\u0451 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>Api<\/code> \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043a\u043e\u0434 \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<p><strong>Api.cs<\/strong><\/p>\n<pre><code class=\"cs\">namespace DualLibClassLibrary {     internal abstract class Api     {         public abstract int Method();     } }<\/code><\/pre>\n<p><strong>Api32.cs<\/strong><\/p>\n<pre><code class=\"cs\">using System.Runtime.InteropServices;  namespace DualLibClassLibrary {     internal sealed class Api32 : Api     {         [DllImport(\"test32\")]         public static extern int Foo();          public override int Method()         {             return Foo();         }     } }<\/code><\/pre>\n<p><strong>Api64.cs<\/strong><\/p>\n<pre><code class=\"cs\">using System.Runtime.InteropServices;  namespace DualLibClassLibrary {     internal sealed class Api64 : Api     {         [DllImport(\"test64\")]         public static extern int Foo();          public override int Method()         {             return Foo();         }     } }<\/code><\/pre>\n<p><strong>ApiProvider.cs<\/strong><\/p>\n<pre><code class=\"cs\">using System;  namespace DualLibClassLibrary {     internal static class ApiProvider     {         private static readonly bool Is64Bit = IntPtr.Size == 8;         private static Api _api;          public static Api Api         {             get             {                 if (_api == null)                     _api = Is64Bit ? (Api)new Api64() : new Api32();                  return _api;             }         }     } }<\/code><\/pre>\n<p>\u0418 \u0442\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 <code>Class<\/code> \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0438\u043c:<\/p>\n<pre><code class=\"cs\">namespace DualLibClassLibrary {     public static class Class     {         public static int Bar()         {             return ApiProvider.Api.Method() * 1000;         }     } }<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0440\u0430\u0432 \u043f\u0430\u043a\u0435\u0442 (\u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043e\u0431\u043d\u043e\u0432\u0438\u0432 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 <em>DualLibClassLibrary.targets<\/em> \u0438 <em>DualLibClassLibrary.csproj<\/em>, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043d\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b), \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u0439 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u042f \u043f\u0440\u0438\u0432\u0451\u043b \u043f\u043e\u043b\u043d\u0443\u044e \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u043c\u043e\u0438\u0445 \u043c\u044b\u0442\u0430\u0440\u0441\u0442\u0432 \u043a\u0430\u0441\u0430\u0435\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f NuGet \u043f\u0430\u043a\u0435\u0442\u0430 \u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c API, \u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043a\u0440\u0430\u0442\u043a\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b (\u044f \u0436\u0435 \u043e\u0431\u0435\u0449\u0430\u043b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e):<\/p>\n<ol>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438, \u043f\u0440\u0438\u0447\u0451\u043c \u0432 \u0434\u0432\u0443\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445: 32- \u0438 64-\u0431\u0438\u0442\u043d\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0445 \u0440\u044f\u0434\u043e\u043c \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u043c\u043e\u0436\u043d\u043e \u0438 \u0432 \u043f\u0430\u043f\u043a\u0443 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0443\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a \u043d\u0438\u043c \u043f\u043e\u0442\u043e\u043c \u0432\u0435\u0440\u043d\u044b\u0439);<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b .targets, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>&lt;CopyToOutputDirectory&gt;<\/code> \u0441 \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c;<\/p>\n<\/li>\n<li>\n<p>\u0432 \u0444\u0430\u0439\u043b\u0435 .csproj \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0443 \u043a\u0430\u043a \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a, \u0442\u0430\u043a \u0438 \u0444\u0430\u0439\u043b\u0430 .targets (\u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0439\u0442\u0438 \u0432 \u043f\u0430\u043f\u043a\u0443 build \u043f\u0430\u043a\u0435\u0442\u0430);<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u044b\u0431\u043e\u0440\u0430 \u043d\u0443\u0436\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u043e \u0432\u0441\u0451. \u0421\u043e\u043b\u044e\u0448\u043d \u043d\u0430\u0448\u0435\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u043e\u0442\u0441\u044e\u0434\u0430: <a href=\"https:\/\/www.dropbox.com\/s\/9u9h3vb0ke9l7ef\/DualLibClassLibrary.zip?dl=0\" rel=\"noopener noreferrer nofollow\">DualLibClassLibrary.zip<\/a>. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u043d\u0430 Windows \u0438 macOS:<\/p>\n<ol>\n<li>\n<p>.NET Framework \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>.NET Core \/ .NET 5 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>Self-contained \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0430\u0441\u0430\u0435\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432 32- \u0438 64-\u0431\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 \u2013 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Windows, \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u043d\u0430 macOS.<\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e .NET <a href=\"https:\/\/github.com\/dotnet\/core\/blob\/main\/release-notes\/5.0\/5.0-supported-os.md\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/a>. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 .NET 6 <a href=\"https:\/\/github.com\/dotnet\/core\/blob\/main\/release-notes\/6.0\/supported-os.md\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0442\u0430\u043a\u0436\u0435 \u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c<\/a>. \u0415\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d, \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u0442\u0430\u043c. \u0414\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0434\u043b\u044f iOS \u0444\u0430\u0439\u043b dylib \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 (\u0438\u043b\u0438 \u043d\u0435\u0442?), \u0430 \u043a\u0430\u0441\u0430\u0435\u043c\u043e Android \u043d\u0443\u0436\u043d\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u041c\u043e\u0436\u0435\u0442, \u043a\u0442\u043e-\u0442\u043e \u0443\u0436\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445?<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435!<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/564476\/\"> https:\/\/habr.com\/ru\/post\/564476\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u042f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e .NET \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MIDI \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438 MIDI \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u2013 <a href=\"https:\/\/github.com\/melanchall\/drywetmidi\" rel=\"noopener noreferrer nofollow\">DryWetMIDI<\/a>. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e API \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0435 (\u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 .NET \u0441\u0438\u0441\u0442\u0435\u043c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435), \u043e\u0434\u043d\u0430\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 MIDI \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0430 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 API \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Windows, \u043e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0431\u0440\u043e\u0441\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0432\u0441\u0435\u0433\u043e \u0438 \u0432\u0441\u044f, \u043f\u043e\u0441\u0435\u043c\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c macOS, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0443\u0437\u044b\u043a\u043e\u0439, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0436\u0435 \u0438 \u0441\u0430\u043c\u0430\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u0432 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u0440\u0443\u0433\u0430\u0445.<\/p>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e API, \u043f\u0440\u043e\u0449\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u044f \u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b, \u0438 \u0445\u043e\u0447\u0443 \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u0443\u0442\u044c \u0434\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0435\u0449\u0451 \u0440\u0430\u0437 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u0430\u043c\u0438. \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0448\u0430\u0433\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h2>\u041f\u0435\u0440\u0432\u044b\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438<\/h2>\n<p>\u041c\u043e\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u0430\u043a \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e \u043e\u043d\u043e\u0439 \u0432 \u043c\u0438\u0440\u0435 .NET, \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 NuGet \u043f\u0430\u043a\u0435\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0432 \u043d\u0451\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 API \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u0412 C# \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cs\">[DllImport(\"test\")] public static extern int Foo();<\/code><\/pre>\n<p>\u0422\u043e \u0431\u0438\u0448\u044c \u043d\u0435\u0442 \u043d\u0443\u0436\u0434\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, .NET \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0443\u0436\u043d\u043e\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u0440\u044f\u0434\u043e\u043c \u0441 \u043d\u0430\u0448\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b <em>test.dll<\/em> \u0438 <em>test.dylib<\/em>, \u0442\u043e \u043d\u0430 Windows \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>Foo<\/code> \u0438\u0437 test.dll, \u0430 \u043d\u0430 macOS \u2013 \u0438\u0437 test.dylib. \u041c\u043e\u0436\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0430 *nix, \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0444\u0430\u0439\u043b <em>test.so<\/em>.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0434\u0432\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0448\u0435\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0412 \u0444\u0430\u0439\u043b\u0435 .csproj DryWetMIDI \u0443\u043a\u0430\u0437\u0430\u043d\u044b<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/standard\/frameworks\" rel=\"noopener noreferrer nofollow\"> TFM<\/a> <em>netstandard2.0<\/em> \u0438 <em>net45<\/em>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044f \u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u043b \u044d\u0442\u0438 \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0437\u043e\u0432\u0451\u043c <em>DualLibClassLibrary<\/em>, \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b <em>Class.cs<\/em>:<\/p>\n<pre><code class=\"cs\">using System.Runtime.InteropServices;  namespace DualLibClassLibrary {     public static class Class     {         [DllImport(\"test\")]         public static extern int Foo();          public static int Bar()         {             return Foo() * 1000;         }     } }<\/code><\/pre>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043c, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0443\u0436\u043d\u044b \u0441\u0430\u043c\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 (test.dll \u0438 test.dylib). \u042f \u0441\u043e\u0431\u0440\u0430\u043b \u0438\u0445 \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 C (\u043a \u0441\u043b\u043e\u0432\u0443, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0442\u0435\u043c \u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435):<\/p>\n<p><em>\u0434\u043b\u044f Windows<\/em><\/p>\n<pre><code class=\"cs\">int Foo() { return 123; }<\/code><\/pre>\n<p><em>\u0434\u043b\u044f macOS<\/em><\/p>\n<pre><code class=\"cs\">int Foo() { return 456; }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0444\u0430\u0439\u043b\u044b test.dll \u0438 test.dylib \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0430 \u0432 Azure DevOps (\u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0432\u0443\u0445, \u0434\u043b\u044f Windows \u0438 macOS). \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 CI, \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0435\u0448\u0438\u043b \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u0430\u043a \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 3 \u0448\u0430\u0433\u043e\u0432:<\/p>\n<p><em>1. \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u043a\u043e\u0434\u043e\u043c \u043d\u0430 C (\u0437\u0430\u0434\u0430\u0447\u0430 PowerShell):<\/em><\/p>\n<pre><code class=\"powershell\">New-Item \"test.c\" -ItemType File -Value \"int Foo() { return 123; }\"<\/code><\/pre>\n<p>(<code>return 456;<\/code> \u0434\u043b\u044f macOS);<\/p>\n<p><em>2. \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 (\u0437\u0430\u0434\u0430\u0447\u0430 Command Line):<\/em><\/p>\n<pre><code class=\"bash\">gcc -v -c test.c gcc -v -shared -o test.dll test.o<\/code><\/pre>\n<p>(test.dylib \u0434\u043b\u044f macOS);<\/p>\n<p><em>3. \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 (\u0437\u0430\u0434\u0430\u0447\u0430 Publish Pipeline Artifacts).<\/em><\/p>\n<p>\u0418\u0442\u0430\u043a, \u0438\u043c\u0435\u0435\u043c \u0444\u0430\u0439\u043b\u044b test.dll \u0438 test.dylib, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>Foo<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043b\u044f Windows \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>123<\/code>, \u0430 \u0434\u043b\u044f macOS \u2013 <code>456<\/code>, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0424\u0430\u0439\u043b\u044b \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0440\u044f\u0434\u043e\u043c \u0441 <em>DualLibClassLibrary.csproj<\/em>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u0432 NuGet \u043f\u0430\u043a\u0435\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u043d\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0443 \u043d\u0430\u0441 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0444\u0430\u0439\u043b\u0430 .csproj (SDK style), \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0442\u0430\u043c \u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432. \u0418\u0437\u0443\u0447\u0438\u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u043e\u043f\u0440\u043e\u0441, \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u0442\u0430\u043a\u043e\u043c\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 .csproj:<\/p>\n<pre><code class=\"xml\">&lt;Project Sdk=\"Microsoft.NET.Sdk\"&gt;    &lt;PropertyGroup&gt;     &lt;TargetFrameworks&gt;netstandard2.0;net45&lt;\/TargetFrameworks&gt;     &lt;LangVersion&gt;6&lt;\/LangVersion&gt;     &lt;Configurations&gt;Debug;Release&lt;\/Configurations&gt;   &lt;\/PropertyGroup&gt;    &lt;PropertyGroup&gt;     &lt;PackageId&gt;DualLibClassLibrary&lt;\/PackageId&gt;     &lt;Version&gt;1.0.0&lt;\/Version&gt;     &lt;Authors&gt;melanchall&lt;\/Authors&gt;     &lt;Owners&gt;melanchall&lt;\/Owners&gt;     &lt;Description&gt;Dual-lib class library&lt;\/Description&gt;     &lt;Copyright&gt;Copyright \u200b Melanchall 2021&lt;\/Copyright&gt;     &lt;AutoGenerateBindingRedirects&gt;true&lt;\/AutoGenerateBindingRedirects&gt;   &lt;\/PropertyGroup&gt;    &lt;ItemGroup&gt;     &lt;Content Include=\"test.dll\"&gt;       &lt;Pack&gt;true&lt;\/Pack&gt;       &lt;CopyToOutputDirectory&gt;Always&lt;\/CopyToOutputDirectory&gt;     &lt;\/Content&gt;     &lt;Content Include=\"test.dylib\"&gt;       &lt;Pack&gt;true&lt;\/Pack&gt;       &lt;CopyToOutputDirectory&gt;Always&lt;\/CopyToOutputDirectory&gt;     &lt;\/Content&gt;   &lt;\/ItemGroup&gt;  &lt;\/Project&gt;<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442:<\/p>\n<p><code>dotnet pack .\\DualLibClassLibrary.sln -c Release<\/code><\/p>\n<p>\u0414\u0430\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u0430\u043a\u0435\u0442\u0430, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043f\u043a\u0443 (\u044f \u043d\u0430\u0437\u0432\u0430\u043b \u0435\u0451 TestFeed) \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0438 \u0443\u043a\u0430\u0436\u0435\u043c \u0435\u0451 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 Visual Studio. \u0412\u043d\u0443\u0442\u0440\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <em>DualLibClassLibrary.1.0.0.nupkg<\/em>. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u0434\u043e\u0431\u0440\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c .NET Framework \u043d\u0430 Windows. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<figure class=\"\"><figcaption>\u0424\u0430\u0439\u043b\u044b test.dll \u0438 test.dylib \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430<\/figcaption><\/figure>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0431\u043d\u0430\u0434\u0451\u0436\u0438\u0432\u0430\u044e\u0449\u0435, \u043f\u0438\u0448\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 <em>Program.cs<\/em> \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cs\">static void Main(string[] args) {     var result = DualLibClassLibrary.Class.Bar();     Console.WriteLine($\"Result = {result}. Press any key to exit...\");     Console.ReadKey(); }<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438 \u0433\u0440\u0443\u0441\u0442\u0438\u043c:<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u043d\u0430\u0448\u043b\u0430 \u0444\u0430\u0439\u043b test.dll<\/figcaption><\/figure>\n<p>\u0427\u0442\u043e \u0436, \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 <em>bin\/Debug<\/em>:<\/p>\n<figure class=\"\"><figcaption>\u0424\u0430\u0439\u043b\u044b test.dll \u0438 test.dylib \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/figcaption><\/figure>\n<p>\u0418 \u043f\u0440\u0430\u0432\u0434\u0430 \u043d\u0435\u0442 \u0444\u0430\u0439\u043b\u043e\u0432. \u041a\u0430\u043a \u0436\u0435 \u0442\u0430\u043a, <code>&lt;CopyToOutputDirectory&gt;<\/code> \u043c\u044b \u0438\u043c \u0443\u043a\u0430\u0437\u0430\u043b\u0438, \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0444\u0430\u0439\u043b\u044b \u0432\u0438\u0434\u043d\u044b. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 .csproj \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432\u0441\u0451 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e:<\/p>\n<figure class=\"\"><figcaption>\u0412 csproj \u043f\u043e\u043b\u043d\u044b\u0439 \u0431\u0435\u0441\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438<\/figcaption><\/figure>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>&lt;CopyToOutputDirectory&gt;<\/code> \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0430 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043f\u043e \u043d\u0435\u0432\u0435\u0434\u043e\u043c\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 test.dylib \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f \u043a\u0430\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>&lt;None&gt;<\/code>, \u0430 test.dll \u043a\u0430\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>&lt;Content&gt;<\/code>. \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 .nupkg. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 <a href=\"https:\/\/github.com\/NuGetPackageExplorer\/NuGetPackageExplorer\" rel=\"noopener noreferrer nofollow\">NuGet Package Explorer<\/a>, \u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt; &lt;package xmlns=\"http:\/\/schemas.microsoft.com\/packaging\/2012\/06\/nuspec.xsd\"&gt;   &lt;metadata&gt;     &lt;id&gt;DualLibClassLibrary&lt;\/id&gt;     &lt;version&gt;1.0.0&lt;\/version&gt;     &lt;authors&gt;melanchall&lt;\/authors&gt;     &lt;owners&gt;&lt;\/owners&gt;     &lt;requireLicenseAcceptance&gt;false&lt;\/requireLicenseAcceptance&gt;     &lt;description&gt;Dual-lib class library&lt;\/description&gt;     &lt;copyright&gt;Copyright \u200b Melanchall 2021&lt;\/copyright&gt;     &lt;dependencies&gt;       &lt;group targetFramework=\".NETFramework4.5\" \/&gt;       &lt;group targetFramework=\".NETStandard2.0\" \/&gt;     &lt;\/dependencies&gt;     &lt;contentFiles&gt;       &lt;files include=\"any\/net45\/test.dll\" buildAction=\"Content\" \/&gt;       &lt;files include=\"any\/netstandard2.0\/test.dll\" buildAction=\"Content\" \/&gt;       &lt;files include=\"any\/net45\/test.dylib\" buildAction=\"Content\" \/&gt;       &lt;files include=\"any\/netstandard2.0\/test.dylib\" buildAction=\"Content\" \/&gt;     &lt;\/contentFiles&gt;   &lt;\/metadata&gt; &lt;\/package&gt;<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0444\u0430\u0439\u043b\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0431\u0435\u0437 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 <code>copyToOutput<\/code>, \u0447\u0442\u043e \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u043e (\u043f\u0440\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0442\u0443\u0442: <a href=\"https:\/\/docs.microsoft.com\/en-us\/nuget\/reference\/nuspec#using-the-contentfiles-element-for-content-files\" rel=\"noopener noreferrer nofollow\">Using the contentFiles element for content files<\/a>).<\/p>\n<h2>\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041f\u043e\u043b\u0438\u0441\u0442\u0430\u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u044b \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0432 \u0432\u0438\u0434\u0435 issues \u043d\u0430 GitHub, \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 StackOverflow \u0438 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Microsoft, \u0432\u0438\u0434\u043e\u0438\u0437\u043c\u0435\u043d\u0438\u043b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 .csproj \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"xml\">&lt;Content Include=\"test.dll\"&gt;   &lt;Pack&gt;true&lt;\/Pack&gt;   &lt;CopyToOutputDirectory&gt;Always&lt;\/CopyToOutputDirectory&gt;   &lt;PackageCopyToOutput&gt;true&lt;\/PackageCopyToOutput&gt;   &lt;PackagePath&gt;contentFiles;content&lt;\/PackagePath&gt; &lt;\/Content&gt; &lt;Content Include=\"test.dylib\"&gt;   &lt;Pack&gt;true&lt;\/Pack&gt;   &lt;CopyToOutputDirectory&gt;Always&lt;\/CopyToOutputDirectory&gt;   &lt;PackageCopyToOutput&gt;true&lt;\/PackageCopyToOutput&gt;   &lt;PackagePath&gt;contentFiles;content&lt;\/PackagePath&gt; &lt;\/Content&gt;<\/code><\/pre>\n<p>\u042d\u043b\u0435\u043c\u0435\u043d\u0442 <code>&lt;PackageCopyToOutput&gt;<\/code> \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u0432\u043d\u0435\u0441\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>copyToOutput<\/code> \u0432 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u043f\u0430\u043a\u0435\u0442\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043b \u043f\u0430\u043f\u043a\u0438, \u043a\u0443\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b, \u0434\u0430\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0432\u0440\u043e\u0434\u0435 <em>any<\/em>. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432\u0441\u0451 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0443\u0442: <a href=\"https:\/\/docs.microsoft.com\/en-us\/nuget\/reference\/msbuild-targets#including-content-in-a-package\" rel=\"noopener noreferrer nofollow\">Including content in a package<\/a>.<\/p>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0448 \u043f\u0430\u043a\u0435\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt; &lt;package xmlns=\"http:\/\/schemas.microsoft.com\/packaging\/2012\/06\/nuspec.xsd\"&gt;   &lt;metadata&gt;     &lt;id&gt;DualLibClassLibrary&lt;\/id&gt;     &lt;version&gt;1.0.1&lt;\/version&gt;     &lt;authors&gt;melanchall&lt;\/authors&gt;     &lt;owners&gt;&lt;\/owners&gt;     &lt;requireLicenseAcceptance&gt;false&lt;\/requireLicenseAcceptance&gt;     &lt;description&gt;Dual-lib class library&lt;\/description&gt;     &lt;copyright&gt;Copyright \u200b Melanchall 2021&lt;\/copyright&gt;     &lt;dependencies&gt;       &lt;group targetFramework=\".NETFramework4.5\" \/&gt;       &lt;group targetFramework=\".NETStandard2.0\" \/&gt;     &lt;\/dependencies&gt;     &lt;contentFiles&gt;       &lt;files include=\"test.dll\" buildAction=\"Content\" copyToOutput=\"true\" \/&gt;       &lt;files include=\"test.dylib\" buildAction=\"Content\" copyToOutput=\"true\" \/&gt;     &lt;\/contentFiles&gt;   &lt;\/metadata&gt; &lt;\/package&gt;<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0443\u0434\u0430 \u043b\u0443\u0447\u0448\u0435, \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>copyToOutput<\/code> \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 \u043d\u0430\u0448\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c:<\/p>\n<figure class=\"full-width\"><figcaption>copyToOutput \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442<\/figcaption><\/figure>\n<p>\u0418 \u0441\u043d\u043e\u0432\u0430 \u043d\u0435\u0443\u0434\u0430\u0447\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043d\u043e \u043d\u0430 .NET 5:<\/p>\n<figure class=\"full-width\"><figcaption>\u0412\u0441\u0451 \u0442\u0430\u043a \u0436\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435\u0442 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/figcaption><\/figure>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0441\u043b\u0435\u0433\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435 \u0432\u0438\u0434\u043d\u043e. \u041e\u0442\u043f\u0438\u0441\u0430\u043b\u0441\u044f \u0432 issue \u043f\u043e \u0438\u0442\u043e\u0433\u0443, \u043d\u0430 \u0447\u0442\u043e \u043c\u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u0438:<\/p>\n<blockquote>\n<p>Please see our&nbsp;<a href=\"https:\/\/docs.microsoft.com\/en-us\/nuget\/reference\/nuspec#package-folder-structure\" rel=\"noopener noreferrer nofollow\">docs on&nbsp;<\/a><code>contentFiles<\/code>. It supports adding different content depending on project&#8217;s target framework and language, and therefore needs files in a specific structure which your package is not currently using.<\/p>\n<\/blockquote>\n<p>\u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044f \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u0435\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u0438, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435 \u043f\u043e \u043f\u0443\u0442\u0438 <em>contentFiles<\/em>, \u0430 \u043f\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <em>contentFiles\/any\/netstandard2.0<\/em>, \u0442\u043e-\u0442\u0430\u043a\u0438 \u0434\u0430, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f .props \u0444\u0430\u0439\u043b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u044f \u0441\u0432\u043e\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0451\u043b \u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430, \u043f\u043e\u0441\u0435\u043c\u0443 \u043f\u043e\u0448\u0451\u043b \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0443\u0442\u0451\u043c. \u0418, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0432\u0435\u0440\u043d\u044b\u043c, \u0438\u0431\u043e \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 <code>contentFiles<\/code> \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c<\/p>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-325437","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/325437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=325437"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/325437\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=325437"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=325437"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=325437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}