NET 8.0.11 වෙත උත්ශ්රේණි කිරීමෙන් පසුව, මගේ සමහර ව්යාපෘති සඳහා ගොඩනැගීම අසාර්ථක විය...
බිල්ඩ් ව්යාපෘති සැකසුම් සියල්ල .NET 8.0.0 අවට කොහේ හරි හොඳින් ක්රියාත්මක විය. පසුව, .NET ධාවන කාලය .NET 8.0 සහ .NET 9.0 වල පසුකාලීන අනුවාදවලට යාවත්කාලීන කිරීම සහ Visual Studio වෙත උත්ශ්රේණි කිරීමත් සමඟ, සමහර ව්යාපෘති ක්රියා කිරීම නතර විය. ඔවුන් ගොඩනැගීමේ මෙවලම්වල බිඳීමේ වෙනස්කම් හඳුන්වා දුන් බව පෙනේ. තර්කය තවමත් හොඳ වන අතර ගොඩනැගීමේ වර්ග සමාන වේ, ගොඩනැගීමේ මෙවලම් ටිකක් වෙනස් ලෙස හැසිරීමට පටන් ගත්තේය. නව ගොඩනැගීමේ වින්යාසයන් සහ ගොඩනැගීමේ ස්ක්රිප්ට් අවශ්ය වේ.
(.NET Framework 8.0.0/.NET SDK 8.0.100) සහ (.NET Framework 8.0.11/.NET SDK 8.0.404) අතර කොතැනක හෝ හැසිරීම් වල වෙනස්වීම මට සොයාගත හැකි යැයි මම සිතමි. සියල්ලම නොවේ, නමුත් සමහර ව්යාපෘති ගොඩනැගීම අසාර්ථක විය.
මෙම ලිපිය අදාළ වන සාමාන්ය පරිසරය C#/VS2022 වේ.
.NET අනුවාදය 8.0.11 හෝ ඊට පසු
තවද ඔබ ව්යාපෘති වර්ගය SelfContained හෝ SingleFile ගොඩනඟයි
ඔබට දෝෂ/ව්යතිරේක ලැබේ:
යෙදුම ක්රියාත්මක කිරීමට අවශ්ය 'hostpolicy.dll' පුස්තකාලය හමු නොවීය
දෝෂය MSB4018:…. ගොනුව සොයා ගැනීමට නොහැකි විය ..... singlefilehost.exe
+++Error1,When running the application:++++++++++++++++++++ A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'C:\Program Files\dotnet\'. Failed to run as a self-contained app. - The application was run as a self-contained app because 'C:\tmpNetBundle\BundleExample02_NET90\ConsoleApp2C\ SelfContained_SingleFile_win-x64\ConsoleApp2C.runtimeconfig.json' was not found. - If this should be a framework-dependent app, add the 'C:\tmpNetBundle\BundleExample02_NET90\ConsoleApp2C\ SelfContained_SingleFile_win-x64\ConsoleApp2C.runtimeconfig.json' file and specify the appropriate framework. PS C:\tmpNetBundle\BundleExample02_NET90\ConsoleApp2C\ SelfContained_SingleFile_win-x64> +++Error2,During build++++++++++++++++++++ error MSB4018: The "GenerateBundle" task failed unexpectedly. [C:\tmpNetBundle\BundleExample01_NET_8.0.0_SDK_8.0.100\ConsoleApp2\ConsoleApp2.csproj] error MSB4018: System.IO.FileNotFoundException: Could not find file 'C:\tmpNetBundle\BundleExample01_NET_8.0.0_SDK_8.0.100\ConsoleApp2\ obj\Release\net8.0-windows\win-x64\singlefilehost.exe'.
.csproj ව්යාපෘති ගොනුවේ ඇති කොඩිය <PublishSingleFile>true</PublishSingleFile> සමහර අවස්ථාවලදී ක්රියා කිරීමට නතර වූ බව පෙනේ. මම ඊට පස්සේ මගේ ගොඩනැංවීමේ තිරපිටපත්වල එම කොඩිය මත විශ්වාසය තබමි. ප්රශ්නයක් නැහැ, අපිට ඒ දේ අපේක්ෂා කරන්න පුළුවන්, අපි බලාපොරොත්තු වෙන්නේ මොකක්ද කියලා දැනගත්තම විතරයි.
මම .NET 8.* රාමුව සඳහා ගොඩනඟමින් සිටි ව්යාපෘති සඳහා .NET SDK 9.* වෙතින් ගොඩනැගීමේ ක්රියාවලිය “dotnet ප්රකාශනය” ඉල්ලා ඇති බව පෙනේ. එබැවින්, මට භාවිතා කිරීමට අවශ්ය SDK පැහැදිලිව සඳහන් කිරීමට ගෝලීය .json ගොනුව භාවිතා කිරීමට මම තීරණය කළෙමි.
මේවා NET_8.0.0/SDK_8.0.100 හි ක්රියා කළ නමුත් පසු අනුවාදවල ක්රියා කිරීම නැවැත්වූ පැරණි ගොඩනැගීමේ සැකසුම් වේ.
// NET_8.0.0/SDK_8.0.100 // NOTE: These project settings all worked well somewhere around .NET 8.0.0. Later, with the upgrade of .NET runtime to later versions of .NET 8.0 and .NET 9.0 and an upgrade to Visual Studio, some of projects stopped working. It looks like they introduced breaking changes in the build tools. Logic is still sound and build types are the same, just the build tools started to behave a bit differently. A new build configurations and build scripts are needed. <!--ConsoleApp2C.csproj +++++++++++++++++++++++++++++++++++++--> <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0-windows</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <PlatformTarget>x64</PlatformTarget> <Platforms>AnyCPU;x64</Platforms> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <DebugType>embedded</DebugType> <PublishSingleFile>true</PublishSingleFile> <PublishTrimmed>true</PublishTrimmed> <IsTrimmable>true</IsTrimmable> <SelfContained>true</SelfContained> <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract> <EnableCompressionInSingleFile>true</EnableCompressionInSingleFile> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\ClassLibrary1\ClassLibraryA.csproj" /> </ItemGroup> <Target Name="PostBuild" AfterTargets="PostBuildEvent"> <Exec Command="echo +++Post-Build+++++
 if $(ConfigurationName) == Debug ( 
echo +++++Debug+++++ 
) 

 if $(ConfigurationName) == Release ( 
 echo +++++SelfContained_SingleFile_win-x64.cmd+++++ 
 call SelfContained_SingleFile_win-x64.cmd 
 echo +++++SelfContained_SingleFile_win-x64_Trimmed.cmd+++++ 
 call SelfContained_SingleFile_win-x64_Trimmed.cmd 
) " /> </Target> </Project> +++++Script: SelfContained_SingleFile_win-x64.cmd dotnet publish ConsoleApp2C.csproj --no-build --runtime win-x64 --configuration Release -p:PublishSingleFile=true -p:SelfContained=true -p:PublishReadyToRun=false -p:PublishTrimmed=false --output ./SelfContained_SingleFile_win-x64 +++++Script: SelfContained_SingleFile_win-x64_Trimmed.cmd dotnet publish ConsoleApp2C.csproj --no-build --runtime win-x64 --configuration Release -p:PublishSingleFile=true -p:SelfContained=true -p:PublishReadyToRun=false -p:PublishTrimmed=true --output ./SelfContained_SingleFile_win-x64_Trimmed
මේවා NET_8.0.11/SDK_8.0.404 හි වැඩ කරන නව ගොඩනැගීමේ සැකසුම් වේ.
// NET_8.0.11/SDK_8.0.404 <!--ConsoleApp2C.csproj +++++++++++++++++++++++++++++++++++++--> <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0-windows</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <PlatformTarget>x64</PlatformTarget> <Platforms>AnyCPU;x64</Platforms> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <DebugType>embedded</DebugType> <PublishSingleFile>true</PublishSingleFile> <PublishTrimmed>true</PublishTrimmed> <IsTrimmable>true</IsTrimmable> <SelfContained>true</SelfContained> <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract> <EnableCompressionInSingleFile>true</EnableCompressionInSingleFile> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\ClassLibrary1\ClassLibraryA.csproj" /> </ItemGroup> <Target Name="RunAfterBuild1" AfterTargets="Build"> <Exec Command="call SelfContained_SingleFile_win-x64.cmd" Condition=" '$(BuildingInsideVisualStudio)' == 'true' "/> </Target> <Target Name="RunAfterBuild2" AfterTargets="Build"> <Exec Command="call SelfContained_SingleFile_win-x64_Trimmed.cmd" Condition=" '$(BuildingInsideVisualStudio)' == 'true' "/> </Target> </Project> +++++Script: SelfContained_SingleFile_win-x64.cmd echo .NET SDK version: dotnet --version dotnet publish ConsoleApp2C.csproj --nologo --no-restore --runtime win-x64 --configuration Release -p:PublishSingleFile=true -p:SelfContained=true -p:PublishReadyToRun=false -p:PublishTrimmed=false --output ./SelfContained_SingleFile_win-x64 +++++Script: SelfContained_SingleFile_win-x64_Trimmed.cmd echo .NET SDK version: dotnet --version dotnet publish ConsoleApp2C.csproj --nologo --no-restore --runtime win-x64 --configuration Release -p:PublishSingleFile=true -p:SelfContained=true -p:PublishReadyToRun=false -p:PublishTrimmed=true --output ./SelfContained_SingleFile_win-x64_Trimmed +++++Configfile: global.json { "sdk": { "version": "8.0.404" } }
මේවා NET_9.0.0/SDK_9.0.101 හි වැඩ කරන නව ගොඩනැගීමේ සැකසුම් වේ
// NET_9.0.0/SDK_9.0.101 <!--ConsoleApp3C.csproj +++++++++++++++++++++++++++++++++++++--> <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net9.0-windows7.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <PlatformTarget>x64</PlatformTarget> <Platforms>AnyCPU;x64</Platforms> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <DebugType>embedded</DebugType> <PublishSingleFile>true</PublishSingleFile> <PublishTrimmed>true</PublishTrimmed> <IsTrimmable>true</IsTrimmable> <SelfContained>true</SelfContained> <PublishReadyToRun>true</PublishReadyToRun> <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract> <EnableCompressionInSingleFile>true</EnableCompressionInSingleFile> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\ClassLibrary1\ClassLibraryA.csproj" /> </ItemGroup> <Target Name="RunAfterBuild1" AfterTargets="Build"> <Exec Command="call SelfContained_SingleFile_win-x64_ReadyToRun.cmd" Condition=" '$(BuildingInsideVisualStudio)' == 'true' " /> </Target> <Target Name="RunAfterBuild2" AfterTargets="Build"> <Exec Command="call SelfContained_SingleFile_win-x64_Trimmed_ReadyToRun.cmd" Condition=" '$(BuildingInsideVisualStudio)' == 'true' " /> </Target> </Project> +++++Script: SelfContained_SingleFile_win-x64_ReadyToRun.cmd echo .NET SDK version: dotnet --version dotnet publish ConsoleApp3C.csproj --nologo --no-restore --runtime win-x64 --configuration Release -p:PublishSingleFile=true -p:SelfContained=true -p:PublishTrimmed=false -p:PublishReadyToRun=true --output ./SelfContained_SingleFile_win-x64_ReadyToRun +++++Script: SelfContained_SingleFile_win-x64_Trimmed_ReadyToRun.cmd echo .NET SDK version: dotnet --version dotnet publish ConsoleApp3C.csproj --nologo --no-restore --runtime win-x64 --configuration Release -p:PublishSingleFile=true -p:SelfContained=true -p:PublishReadyToRun=true -p:PublishTrimmed=true --output ./SelfContained_SingleFile_win-x64_Trimmed_ReadyToRun +++++Configfile: global.json { "sdk": { "version": "9.0.101" } }