Мы предоставляем приложение в виде отдельного исполняемого файла do tnet core 3.1. Exe работает как служба на различных Windows серверах:
- Server 2012 64 бит
- Server 2016 64 бит
- Server 2019 64 бит
Через некоторое время работы (неделя и более) службе не удается перезапуститься из-за отсутствующего файла AppName.deps. json во временном каталоге:
System.IO.FileNotFoundException: Could not find file 'C:\Windows\TEMP\.net\AppName\4rpjodow.e1g\AppName.deps.json'.
File name: 'C:\Windows\TEMP\.net\AppName\4rpjodow.e1g\AppName.deps.json'
at System.IO.FileStream.ValidateFileHandle(SafeFileHandle fileHandle)
at System.IO.FileStream.CreateFileOpenHandle(FileMode mode, FileShare share, FileOptions options)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at System.IO.File.OpenRead(String path)
at Microsoft.Extensions.DependencyModel.FileWrapper.OpenRead(String path)
at Microsoft.Extensions.DependencyModel.DependencyContextLoader.LoadContext(IDependencyContextReader reader, String location)
at Microsoft.Extensions.DependencyModel.DependencyContextLoader.Load(Assembly assembly)
at Microsoft.Extensions.DependencyModel.DependencyContext.Load(Assembly assembly)
at Microsoft.Extensions.DependencyModel.DependencyContext.LoadDefault()
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at System.Lazy`1.get_Value()
at Microsoft.Extensions.DependencyModel.DependencyContext.get_Default()
at Serilog.Settings.Configuration.Assemblies.AssemblyFinder.Auto()
at Serilog.ConfigurationLoggerConfigurationExtensions.Configuration(LoggerSettingsConfiguration settingConfiguration, IConfiguration configuration, String sectionName, DependencyContext dependencyContext)
at Serilog.ConfigurationLoggerConfigurationExtensions.Configuration(LoggerSettingsConfiguration settingConfiguration, IConfiguration configuration, DependencyContext dependencyContext)
at AppName.Program.<>c__DisplayClass2_0.<CreateWebHostBuilder>b__2(WebHostBuilderContext hostingContext, ILoggingBuilder logging)
at Microsoft.AspNetCore.Hosting.WebHostBuilderExtensions.<>c__DisplayClass9_1.<ConfigureLogging>b__1(ILoggingBuilder builder)
at Microsoft.Extensions.DependencyInjection.LoggingServiceCollectionExtensions.AddLogging(IServiceCollection services, Action`1 configure)
at Microsoft.AspNetCore.Hosting.WebHostBuilderExtensions.<>c__DisplayClass9_0.<ConfigureLogging>b__0(WebHostBuilderContext context, IServiceCollection collection)
at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException& hostingStartupErrors)
at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
at AppName.Program.Main(String[] args)
Проверив каталог, мы увидели, что отсутствуют некоторые другие. json, а также файлы .dll. Я предполагаю, что очистка файловой системы удаляет все файлы, которые не используются во время работы службы.
Удаление всего временного каталога решает проблему, потому что exe будет извлечен снова при запуске. Похоже, проблема заключается в том, что удаляются только некоторые файлы, и содержимое больше не извлекается.
Нашим предпочтительным решением было бы извлечь файлы в каталог вне временного каталога. До сих пор мы не нашли вариант, обеспечивающий эту функцию. Также приветствуются любые другие идеи, чтобы избежать удаления временных файлов. Мы хотели бы продолжить работу с одним исполняемым файлом, если это возможно, потому что это делает доставку приложения нашим клиентам намного удобнее.
EDIT : это текущая группа объектов для публикации sh из .csproj:
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<SelfContained>true</SelfContained>
<Version>1.0-develop</Version>
<ApplicationVersion>1.0-develop</ApplicationVersion>
<Description>App-Description</Description>
<Copyright>Copyright © 2019 Company</Copyright>
<LangVersion>8</LangVersion>
<PublishTrimmed>true</PublishTrimmed>
<PublishSingleFile>true</PublishSingleFile>
<ApplicationIcon>Icon.ico</ApplicationIcon>
<AssemblyName>AppName</AssemblyName>
<RootNamespace>AppName</RootNamespace>
<PreserveCompilationContext>false</PreserveCompilationContext>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>