添加 WMS 初始项目
添加初始 WMS 解决方案和项目结构。包含多个项目(API、Core、Model、Common、Extensions、Tools),依赖注入/服务注册,日志记录(Serilog),监控,Swagger/API 文档,API 响应/分页模型,数据库集成(SqlSugar DbContext、仓库、工作单元)。
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!-- |
| | | |
| | | IIS configuration sections. |
| | | |
| | | For schema documentation, see |
| | | %IIS_BIN%\config\schema\IIS_schema.xml. |
| | | |
| | | Please make a backup of this file before making any changes to it. |
| | | |
| | | NOTE: The following environment variables are available to be used |
| | | within this file and are understood by the IIS Express. |
| | | |
| | | %IIS_USER_HOME% - The IIS Express home directory for the user |
| | | %IIS_SITES_HOME% - The default home directory for sites |
| | | %IIS_BIN% - The location of the IIS Express binaries |
| | | %SYSTEMDRIVE% - The drive letter of %IIS_BIN% |
| | | |
| | | --> |
| | | |
| | | <configuration> |
| | | |
| | | <!-- |
| | | |
| | | The <configSections> section controls the registration of sections. |
| | | Section is the basic unit of deployment, locking, searching and |
| | | containment for configuration settings. |
| | | |
| | | Every section belongs to one section group. |
| | | A section group is a container of logically-related sections. |
| | | |
| | | Sections cannot be nested. |
| | | Section groups may be nested. |
| | | |
| | | <section |
| | | name="" [Required, Collection Key] [XML name of the section] |
| | | allowDefinition="Everywhere" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set] |
| | | overrideModeDefault="Allow" [Allow|Deny] [Default delegation mode] |
| | | allowLocation="true" [true|false] [Allowed in location tags] |
| | | /> |
| | | |
| | | The recommended way to unlock sections is by using a location tag: |
| | | <location path="Default Web Site" overrideMode="Allow"> |
| | | <system.webServer> |
| | | <asp /> |
| | | </system.webServer> |
| | | </location> |
| | | |
| | | --> |
| | | <configSections> |
| | | <sectionGroup name="system.applicationHost"> |
| | | <section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> |
| | | <section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> |
| | | <section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> |
| | | <section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> |
| | | <section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> |
| | | <section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> |
| | | <section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> |
| | | <section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> |
| | | </sectionGroup> |
| | | |
| | | <sectionGroup name="system.webServer"> |
| | | <section name="asp" overrideModeDefault="Deny" /> |
| | | <section name="caching" overrideModeDefault="Allow" /> |
| | | <section name="cgi" overrideModeDefault="Deny" /> |
| | | <section name="defaultDocument" overrideModeDefault="Allow" /> |
| | | <section name="directoryBrowse" overrideModeDefault="Allow" /> |
| | | <section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> |
| | | <section name="globalModules" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> |
| | | <section name="handlers" overrideModeDefault="Deny" /> |
| | | <section name="httpCompression" overrideModeDefault="Allow" allowDefinition="Everywhere" /> |
| | | <section name="httpErrors" overrideModeDefault="Allow" /> |
| | | <section name="httpLogging" overrideModeDefault="Deny" /> |
| | | <section name="httpProtocol" overrideModeDefault="Allow" /> |
| | | <section name="httpRedirect" overrideModeDefault="Allow" /> |
| | | <section name="httpTracing" overrideModeDefault="Deny" /> |
| | | <section name="isapiFilters" allowDefinition="MachineToApplication" overrideModeDefault="Deny" /> |
| | | <section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" /> |
| | | <section name="applicationInitialization" allowDefinition="MachineToApplication" overrideModeDefault="Allow" /> |
| | | <section name="odbcLogging" overrideModeDefault="Deny" /> |
| | | <sectionGroup name="security"> |
| | | <section name="access" overrideModeDefault="Deny" /> |
| | | <section name="applicationDependencies" overrideModeDefault="Deny" /> |
| | | <sectionGroup name="authentication"> |
| | | <section name="anonymousAuthentication" overrideModeDefault="Deny" /> |
| | | <section name="basicAuthentication" overrideModeDefault="Deny" /> |
| | | <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" /> |
| | | <section name="digestAuthentication" overrideModeDefault="Deny" /> |
| | | <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" /> |
| | | <section name="windowsAuthentication" overrideModeDefault="Deny" /> |
| | | </sectionGroup> |
| | | <section name="authorization" overrideModeDefault="Allow" /> |
| | | <section name="ipSecurity" overrideModeDefault="Deny" /> |
| | | <section name="dynamicIpSecurity" overrideModeDefault="Deny" /> |
| | | <section name="isapiCgiRestriction" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> |
| | | <section name="requestFiltering" overrideModeDefault="Allow" /> |
| | | </sectionGroup> |
| | | <section name="serverRuntime" overrideModeDefault="Deny" /> |
| | | <section name="serverSideInclude" overrideModeDefault="Deny" /> |
| | | <section name="staticContent" overrideModeDefault="Allow" /> |
| | | <sectionGroup name="tracing"> |
| | | <section name="traceFailedRequests" overrideModeDefault="Allow" /> |
| | | <section name="traceProviderDefinitions" overrideModeDefault="Deny" /> |
| | | </sectionGroup> |
| | | <section name="urlCompression" overrideModeDefault="Allow" /> |
| | | <section name="validation" overrideModeDefault="Allow" /> |
| | | <sectionGroup name="webdav"> |
| | | <section name="globalSettings" overrideModeDefault="Deny" /> |
| | | <section name="authoring" overrideModeDefault="Deny" /> |
| | | <section name="authoringRules" overrideModeDefault="Deny" /> |
| | | </sectionGroup> |
| | | <sectionGroup name="rewrite"> |
| | | <section name="allowedServerVariables" overrideModeDefault="Deny" /> |
| | | <section name="rules" overrideModeDefault="Allow" /> |
| | | <section name="outboundRules" overrideModeDefault="Allow" /> |
| | | <section name="globalRules" overrideModeDefault="Deny" allowDefinition="AppHostOnly" /> |
| | | <section name="providers" overrideModeDefault="Allow" /> |
| | | <section name="rewriteMaps" overrideModeDefault="Allow" /> |
| | | </sectionGroup> |
| | | <section name="webSocket" overrideModeDefault="Deny" /> |
| | | </sectionGroup> |
| | | </configSections> |
| | | |
| | | <configProtectedData> |
| | | <providers> |
| | | <add name="IISWASOnlyRsaProvider" type="" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" /> |
| | | <add name="AesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisConfigurationKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAA/HKxkz6alrlAPez0IUgujj/6k3WxCDriHp6jvpv3yEZmo7h6SMzGLxo4mTrIQVHSkB7tmElHKfUFTzE2BWF7nFWHY6Z6qmGBauFzwJMwESjril7Gjz69RBFH259HQ6aRDq9Xfx7U7H4HtdmnKNqGjgl/hwPQBGeIlWiDh+sYv3vKB0QU971tjX6H2B+9armlnC8UOuA6JYMDMI/VLLL16sng0fWAy5JYe0YVABVjiAWDW264RZW9Tr1Oax4qHZKg+SdjULxeOc2YmpX+d0yeITo1HkPF1hN1gHpIPIUDo05ilHUNfR3OkjVCIQK4cFKCq1s8NH+y+13MxUC4Fn1AlQ==" /> |
| | | <add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAALmU8lTC+v2qtfQiiiquvvLpUQqKLEXs+jSKoWCM/uPhyB++k4dwug19mGidNK5FYiWK2KYE1yhjVJcbp12E98Q0R2nT7eBiCMY2JairxQ591rqABK7keGaIjwH7PwGzSpILl3RJ4YFvJ/7ZXEJxeDZIjW8ZxWVXx+/VyHs9U3WguLEkgMUX3jrxJi8LouxaIVPJAv/YQ1ZCWs8zImitxX/C/7o7yaIxznfsN5nGQzQfpUDPeby99aw2zPVTtZI2LaWIBON8guABvZ6JtJVDWmfdK6sodbnwdZkr6/Z2rfvamT1dC1SpQrGG7ulR/f9/GXvCaW10ZVKxekBF/CYlNMg==" /> |
| | | </providers> |
| | | </configProtectedData> |
| | | |
| | | <system.applicationHost> |
| | | |
| | | <applicationPools> |
| | | <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> |
| | | <add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> |
| | | <add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> |
| | | <add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> |
| | | <add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" /> |
| | | <applicationPoolDefaults managedRuntimeVersion="v4.0"> |
| | | <processModel loadUserProfile="true" setProfileEnvironment="false" /> |
| | | </applicationPoolDefaults> |
| | | </applicationPools> |
| | | |
| | | <!-- |
| | | |
| | | The <listenerAdapters> section defines the protocols with which the |
| | | Windows Process Activation Service (WAS) binds. |
| | | |
| | | --> |
| | | <listenerAdapters> |
| | | <add name="http" /> |
| | | </listenerAdapters> |
| | | |
| | | <sites> |
| | | <site name="WebSite1" id="1" serverAutoStart="true"> |
| | | <application path="/"> |
| | | <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" /> |
| | | </application> |
| | | <bindings> |
| | | <binding protocol="http" bindingInformation=":8080:localhost" /> |
| | | </bindings> |
| | | </site> |
| | | <siteDefaults> |
| | | <!-- To enable logging, please change the below attribute "enabled" to "true" --> |
| | | <logFile logFormat="W3C" directory="%AppData%\Microsoft\IISExpressLogs" enabled="false"/> |
| | | <traceFailedRequestsLogging directory="%AppData%\Microsoft" enabled="false" maxLogFileSizeKB="1024" /> |
| | | </siteDefaults> |
| | | <applicationDefaults applicationPool="Clr4IntegratedAppPool" /> |
| | | <virtualDirectoryDefaults allowSubDirConfig="true" /> |
| | | </sites> |
| | | |
| | | <webLimits /> |
| | | |
| | | </system.applicationHost> |
| | | |
| | | <system.webServer> |
| | | |
| | | <serverRuntime /> |
| | | |
| | | <asp scriptErrorSentToBrowser="true"> |
| | | <cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" /> |
| | | <limits /> |
| | | </asp> |
| | | |
| | | <caching enabled="true" enableKernelCache="true"> |
| | | </caching> |
| | | |
| | | <cgi /> |
| | | |
| | | <defaultDocument enabled="true"> |
| | | <files> |
| | | <add value="Default.htm" /> |
| | | <add value="Default.asp" /> |
| | | <add value="index.htm" /> |
| | | <add value="index.html" /> |
| | | <add value="iisstart.htm" /> |
| | | <add value="default.aspx" /> |
| | | </files> |
| | | </defaultDocument> |
| | | |
| | | <directoryBrowse enabled="false" /> |
| | | |
| | | <fastCgi /> |
| | | |
| | | <!-- |
| | | |
| | | The <globalModules> section defines all native-code modules. |
| | | To enable a module, specify it in the <modules> section. |
| | | |
| | | --> |
| | | <globalModules> |
| | | <add name="HttpLoggingModule" image="%IIS_BIN%\loghttp.dll" /> |
| | | <add name="UriCacheModule" image="%IIS_BIN%\cachuri.dll" /> |
| | | <add name="TokenCacheModule" image="%IIS_BIN%\cachtokn.dll" /> |
| | | <add name="DynamicCompressionModule" image="%IIS_BIN%\compdyn.dll" /> |
| | | <add name="StaticCompressionModule" image="%IIS_BIN%\compstat.dll" /> |
| | | <add name="DefaultDocumentModule" image="%IIS_BIN%\defdoc.dll" /> |
| | | <add name="DirectoryListingModule" image="%IIS_BIN%\dirlist.dll" /> |
| | | <add name="ProtocolSupportModule" image="%IIS_BIN%\protsup.dll" /> |
| | | <add name="HttpRedirectionModule" image="%IIS_BIN%\redirect.dll" /> |
| | | <add name="ServerSideIncludeModule" image="%IIS_BIN%\iis_ssi.dll" /> |
| | | <add name="StaticFileModule" image="%IIS_BIN%\static.dll" /> |
| | | <add name="AnonymousAuthenticationModule" image="%IIS_BIN%\authanon.dll" /> |
| | | <add name="CertificateMappingAuthenticationModule" image="%IIS_BIN%\authcert.dll" /> |
| | | <add name="UrlAuthorizationModule" image="%IIS_BIN%\urlauthz.dll" /> |
| | | <add name="BasicAuthenticationModule" image="%IIS_BIN%\authbas.dll" /> |
| | | <add name="WindowsAuthenticationModule" image="%IIS_BIN%\authsspi.dll" /> |
| | | <add name="IISCertificateMappingAuthenticationModule" image="%IIS_BIN%\authmap.dll" /> |
| | | <add name="IpRestrictionModule" image="%IIS_BIN%\iprestr.dll" /> |
| | | <add name="DynamicIpRestrictionModule" image="%IIS_BIN%\diprestr.dll" /> |
| | | <add name="RequestFilteringModule" image="%IIS_BIN%\modrqflt.dll" /> |
| | | <add name="CustomLoggingModule" image="%IIS_BIN%\logcust.dll" /> |
| | | <add name="CustomErrorModule" image="%IIS_BIN%\custerr.dll" /> |
| | | <add name="FailedRequestsTracingModule" image="%IIS_BIN%\iisfreb.dll" /> |
| | | <add name="RequestMonitorModule" image="%IIS_BIN%\iisreqs.dll" /> |
| | | <add name="IsapiModule" image="%IIS_BIN%\isapi.dll" /> |
| | | <add name="IsapiFilterModule" image="%IIS_BIN%\filter.dll" /> |
| | | <add name="CgiModule" image="%IIS_BIN%\cgi.dll" /> |
| | | <add name="FastCgiModule" image="%IIS_BIN%\iisfcgi.dll" /> |
| | | <!-- <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> --> |
| | | <add name="RewriteModule" image="%IIS_BIN%\rewrite.dll" /> |
| | | <add name="ConfigurationValidationModule" image="%IIS_BIN%\validcfg.dll" /> |
| | | <add name="WebSocketModule" image="%IIS_BIN%\iiswsock.dll" /> |
| | | <add name="WebMatrixSupportModule" image="%IIS_BIN%\webmatrixsup.dll" /> |
| | | <add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" /> |
| | | <add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" /> |
| | | <add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" /> |
| | | <add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" /> |
| | | <add name="ApplicationInitializationModule" image="%IIS_BIN%\warmup.dll" /> |
| | | </globalModules> |
| | | |
| | | <httpCompression directory="%TEMP%"> |
| | | <scheme name="gzip" dll="%IIS_BIN%\gzip.dll" /> |
| | | <dynamicTypes> |
| | | <add mimeType="text/*" enabled="true" /> |
| | | <add mimeType="message/*" enabled="true" /> |
| | | <add mimeType="application/x-javascript" enabled="true" /> |
| | | <add mimeType="application/javascript" enabled="true" /> |
| | | <add mimeType="*/*" enabled="false" /> |
| | | </dynamicTypes> |
| | | <staticTypes> |
| | | <add mimeType="text/*" enabled="true" /> |
| | | <add mimeType="message/*" enabled="true" /> |
| | | <add mimeType="application/javascript" enabled="true" /> |
| | | <add mimeType="application/atom+xml" enabled="true" /> |
| | | <add mimeType="application/xaml+xml" enabled="true" /> |
| | | <add mimeType="image/svg+xml" enabled="true" /> |
| | | <add mimeType="*/*" enabled="false" /> |
| | | </staticTypes> |
| | | </httpCompression> |
| | | |
| | | <httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath"> |
| | | <error statusCode="401" prefixLanguageFilePath="%IIS_BIN%\custerr" path="401.htm" /> |
| | | <error statusCode="403" prefixLanguageFilePath="%IIS_BIN%\custerr" path="403.htm" /> |
| | | <error statusCode="404" prefixLanguageFilePath="%IIS_BIN%\custerr" path="404.htm" /> |
| | | <error statusCode="405" prefixLanguageFilePath="%IIS_BIN%\custerr" path="405.htm" /> |
| | | <error statusCode="406" prefixLanguageFilePath="%IIS_BIN%\custerr" path="406.htm" /> |
| | | <error statusCode="412" prefixLanguageFilePath="%IIS_BIN%\custerr" path="412.htm" /> |
| | | <error statusCode="500" prefixLanguageFilePath="%IIS_BIN%\custerr" path="500.htm" /> |
| | | <error statusCode="501" prefixLanguageFilePath="%IIS_BIN%\custerr" path="501.htm" /> |
| | | <error statusCode="502" prefixLanguageFilePath="%IIS_BIN%\custerr" path="502.htm" /> |
| | | </httpErrors> |
| | | |
| | | <httpLogging dontLog="false" /> |
| | | |
| | | <httpProtocol> |
| | | <customHeaders> |
| | | <clear /> |
| | | <add name="X-Powered-By" value="ASP.NET" /> |
| | | </customHeaders> |
| | | <redirectHeaders> |
| | | <clear /> |
| | | </redirectHeaders> |
| | | </httpProtocol> |
| | | |
| | | <httpRedirect enabled="false" /> |
| | | |
| | | <httpTracing /> |
| | | |
| | | <isapiFilters> |
| | | <filter name="ASP.Net_2.0.50727-64" path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv2.0" /> |
| | | <filter name="ASP.Net_2.0.50727.0" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv2.0" /> |
| | | <filter name="ASP.Net_2.0_for_v1.1" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv1.1" /> |
| | | <filter name="ASP.Net_4.0_32bit" path="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv4.0" /> |
| | | <filter name="ASP.Net_4.0_64bit" path="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv4.0" /> |
| | | </isapiFilters> |
| | | |
| | | <odbcLogging /> |
| | | |
| | | <security> |
| | | |
| | | <access sslFlags="None" /> |
| | | |
| | | <applicationDependencies> |
| | | <application name="Active Server Pages" groupId="ASP" /> |
| | | </applicationDependencies> |
| | | |
| | | <authentication> |
| | | |
| | | <anonymousAuthentication enabled="true" userName="" /> |
| | | |
| | | <basicAuthentication enabled="false" /> |
| | | |
| | | <clientCertificateMappingAuthentication enabled="false" /> |
| | | |
| | | <digestAuthentication enabled="false" /> |
| | | |
| | | <iisClientCertificateMappingAuthentication enabled="false"> |
| | | </iisClientCertificateMappingAuthentication> |
| | | |
| | | <windowsAuthentication enabled="false"> |
| | | <providers> |
| | | <add value="Negotiate" /> |
| | | <add value="NTLM" /> |
| | | </providers> |
| | | </windowsAuthentication> |
| | | |
| | | </authentication> |
| | | |
| | | <authorization> |
| | | <add accessType="Allow" users="*" /> |
| | | </authorization> |
| | | |
| | | <ipSecurity allowUnlisted="true" /> |
| | | |
| | | <isapiCgiRestriction notListedIsapisAllowed="true" notListedCgisAllowed="true"> |
| | | <add path="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" /> |
| | | <add path="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" /> |
| | | <add path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" /> |
| | | <add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" /> |
| | | </isapiCgiRestriction> |
| | | |
| | | <requestFiltering> |
| | | <fileExtensions allowUnlisted="true" applyToWebDAV="true"> |
| | | <add fileExtension=".asa" allowed="false" /> |
| | | <add fileExtension=".asax" allowed="false" /> |
| | | <add fileExtension=".ascx" allowed="false" /> |
| | | <add fileExtension=".master" allowed="false" /> |
| | | <add fileExtension=".skin" allowed="false" /> |
| | | <add fileExtension=".browser" allowed="false" /> |
| | | <add fileExtension=".sitemap" allowed="false" /> |
| | | <add fileExtension=".config" allowed="false" /> |
| | | <add fileExtension=".cs" allowed="false" /> |
| | | <add fileExtension=".csproj" allowed="false" /> |
| | | <add fileExtension=".vb" allowed="false" /> |
| | | <add fileExtension=".vbproj" allowed="false" /> |
| | | <add fileExtension=".webinfo" allowed="false" /> |
| | | <add fileExtension=".licx" allowed="false" /> |
| | | <add fileExtension=".resx" allowed="false" /> |
| | | <add fileExtension=".resources" allowed="false" /> |
| | | <add fileExtension=".mdb" allowed="false" /> |
| | | <add fileExtension=".vjsproj" allowed="false" /> |
| | | <add fileExtension=".java" allowed="false" /> |
| | | <add fileExtension=".jsl" allowed="false" /> |
| | | <add fileExtension=".ldb" allowed="false" /> |
| | | <add fileExtension=".dsdgm" allowed="false" /> |
| | | <add fileExtension=".ssdgm" allowed="false" /> |
| | | <add fileExtension=".lsad" allowed="false" /> |
| | | <add fileExtension=".ssmap" allowed="false" /> |
| | | <add fileExtension=".cd" allowed="false" /> |
| | | <add fileExtension=".dsprototype" allowed="false" /> |
| | | <add fileExtension=".lsaprototype" allowed="false" /> |
| | | <add fileExtension=".sdm" allowed="false" /> |
| | | <add fileExtension=".sdmDocument" allowed="false" /> |
| | | <add fileExtension=".mdf" allowed="false" /> |
| | | <add fileExtension=".ldf" allowed="false" /> |
| | | <add fileExtension=".ad" allowed="false" /> |
| | | <add fileExtension=".dd" allowed="false" /> |
| | | <add fileExtension=".ldd" allowed="false" /> |
| | | <add fileExtension=".sd" allowed="false" /> |
| | | <add fileExtension=".adprototype" allowed="false" /> |
| | | <add fileExtension=".lddprototype" allowed="false" /> |
| | | <add fileExtension=".exclude" allowed="false" /> |
| | | <add fileExtension=".refresh" allowed="false" /> |
| | | <add fileExtension=".compiled" allowed="false" /> |
| | | <add fileExtension=".msgx" allowed="false" /> |
| | | <add fileExtension=".vsdisco" allowed="false" /> |
| | | <add fileExtension=".rules" allowed="false" /> |
| | | </fileExtensions> |
| | | <verbs allowUnlisted="true" applyToWebDAV="true" /> |
| | | <hiddenSegments applyToWebDAV="true"> |
| | | <add segment="web.config" /> |
| | | <add segment="bin" /> |
| | | <add segment="App_code" /> |
| | | <add segment="App_GlobalResources" /> |
| | | <add segment="App_LocalResources" /> |
| | | <add segment="App_WebReferences" /> |
| | | <add segment="App_Data" /> |
| | | <add segment="App_Browsers" /> |
| | | </hiddenSegments> |
| | | </requestFiltering> |
| | | |
| | | </security> |
| | | |
| | | <serverSideInclude ssiExecDisable="false" /> |
| | | |
| | | <staticContent lockAttributes="isDocFooterFileName"> |
| | | <mimeMap fileExtension=".323" mimeType="text/h323" /> |
| | | <mimeMap fileExtension=".3g2" mimeType="video/3gpp2" /> |
| | | <mimeMap fileExtension=".3gp2" mimeType="video/3gpp2" /> |
| | | <mimeMap fileExtension=".3gp" mimeType="video/3gpp" /> |
| | | <mimeMap fileExtension=".3gpp" mimeType="video/3gpp" /> |
| | | <mimeMap fileExtension=".aac" mimeType="audio/aac" /> |
| | | <mimeMap fileExtension=".aaf" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".aca" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".accdb" mimeType="application/msaccess" /> |
| | | <mimeMap fileExtension=".accde" mimeType="application/msaccess" /> |
| | | <mimeMap fileExtension=".accdt" mimeType="application/msaccess" /> |
| | | <mimeMap fileExtension=".acx" mimeType="application/internet-property-stream" /> |
| | | <mimeMap fileExtension=".adt" mimeType="audio/vnd.dlna.adts" /> |
| | | <mimeMap fileExtension=".adts" mimeType="audio/vnd.dlna.adts" /> |
| | | <mimeMap fileExtension=".afm" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".ai" mimeType="application/postscript" /> |
| | | <mimeMap fileExtension=".aif" mimeType="audio/x-aiff" /> |
| | | <mimeMap fileExtension=".aifc" mimeType="audio/aiff" /> |
| | | <mimeMap fileExtension=".aiff" mimeType="audio/aiff" /> |
| | | <mimeMap fileExtension=".appcache" mimeType="text/cache-manifest" /> |
| | | <mimeMap fileExtension=".application" mimeType="application/x-ms-application" /> |
| | | <mimeMap fileExtension=".art" mimeType="image/x-jg" /> |
| | | <mimeMap fileExtension=".asd" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".asf" mimeType="video/x-ms-asf" /> |
| | | <mimeMap fileExtension=".asi" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".asm" mimeType="text/plain" /> |
| | | <mimeMap fileExtension=".asr" mimeType="video/x-ms-asf" /> |
| | | <mimeMap fileExtension=".asx" mimeType="video/x-ms-asf" /> |
| | | <mimeMap fileExtension=".atom" mimeType="application/atom+xml" /> |
| | | <mimeMap fileExtension=".au" mimeType="audio/basic" /> |
| | | <mimeMap fileExtension=".avi" mimeType="video/avi" /> |
| | | <mimeMap fileExtension=".axs" mimeType="application/olescript" /> |
| | | <mimeMap fileExtension=".bas" mimeType="text/plain" /> |
| | | <mimeMap fileExtension=".bcpio" mimeType="application/x-bcpio" /> |
| | | <mimeMap fileExtension=".bin" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".bmp" mimeType="image/bmp" /> |
| | | <mimeMap fileExtension=".c" mimeType="text/plain" /> |
| | | <mimeMap fileExtension=".cab" mimeType="application/vnd.ms-cab-compressed" /> |
| | | <mimeMap fileExtension=".calx" mimeType="application/vnd.ms-office.calx" /> |
| | | <mimeMap fileExtension=".cat" mimeType="application/vnd.ms-pki.seccat" /> |
| | | <mimeMap fileExtension=".cdf" mimeType="application/x-cdf" /> |
| | | <mimeMap fileExtension=".chm" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".class" mimeType="application/x-java-applet" /> |
| | | <mimeMap fileExtension=".clp" mimeType="application/x-msclip" /> |
| | | <mimeMap fileExtension=".cmx" mimeType="image/x-cmx" /> |
| | | <mimeMap fileExtension=".cnf" mimeType="text/plain" /> |
| | | <mimeMap fileExtension=".cod" mimeType="image/cis-cod" /> |
| | | <mimeMap fileExtension=".cpio" mimeType="application/x-cpio" /> |
| | | <mimeMap fileExtension=".cpp" mimeType="text/plain" /> |
| | | <mimeMap fileExtension=".crd" mimeType="application/x-mscardfile" /> |
| | | <mimeMap fileExtension=".crl" mimeType="application/pkix-crl" /> |
| | | <mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" /> |
| | | <mimeMap fileExtension=".csh" mimeType="application/x-csh" /> |
| | | <mimeMap fileExtension=".css" mimeType="text/css" /> |
| | | <mimeMap fileExtension=".csv" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".cur" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".dcr" mimeType="application/x-director" /> |
| | | <mimeMap fileExtension=".deploy" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".der" mimeType="application/x-x509-ca-cert" /> |
| | | <mimeMap fileExtension=".dib" mimeType="image/bmp" /> |
| | | <mimeMap fileExtension=".dir" mimeType="application/x-director" /> |
| | | <mimeMap fileExtension=".disco" mimeType="text/xml" /> |
| | | <mimeMap fileExtension=".dll" mimeType="application/x-msdownload" /> |
| | | <mimeMap fileExtension=".dll.config" mimeType="text/xml" /> |
| | | <mimeMap fileExtension=".dlm" mimeType="text/dlm" /> |
| | | <mimeMap fileExtension=".doc" mimeType="application/msword" /> |
| | | <mimeMap fileExtension=".docm" mimeType="application/vnd.ms-word.document.macroEnabled.12" /> |
| | | <mimeMap fileExtension=".docx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" /> |
| | | <mimeMap fileExtension=".dot" mimeType="application/msword" /> |
| | | <mimeMap fileExtension=".dotm" mimeType="application/vnd.ms-word.template.macroEnabled.12" /> |
| | | <mimeMap fileExtension=".dotx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.template" /> |
| | | <mimeMap fileExtension=".dsp" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".dtd" mimeType="text/xml" /> |
| | | <mimeMap fileExtension=".dvi" mimeType="application/x-dvi" /> |
| | | <mimeMap fileExtension=".dvr-ms" mimeType="video/x-ms-dvr" /> |
| | | <mimeMap fileExtension=".dwf" mimeType="drawing/x-dwf" /> |
| | | <mimeMap fileExtension=".dwp" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".dxr" mimeType="application/x-director" /> |
| | | <mimeMap fileExtension=".eml" mimeType="message/rfc822" /> |
| | | <mimeMap fileExtension=".emz" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" /> |
| | | <mimeMap fileExtension=".eps" mimeType="application/postscript" /> |
| | | <mimeMap fileExtension=".esd" mimeType="application/vnd.ms-cab-compressed" /> |
| | | <mimeMap fileExtension=".etx" mimeType="text/x-setext" /> |
| | | <mimeMap fileExtension=".evy" mimeType="application/envoy" /> |
| | | <mimeMap fileExtension=".exe" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".exe.config" mimeType="text/xml" /> |
| | | <mimeMap fileExtension=".fdf" mimeType="application/vnd.fdf" /> |
| | | <mimeMap fileExtension=".fif" mimeType="application/fractals" /> |
| | | <mimeMap fileExtension=".fla" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".flr" mimeType="x-world/x-vrml" /> |
| | | <mimeMap fileExtension=".flv" mimeType="video/x-flv" /> |
| | | <mimeMap fileExtension=".gif" mimeType="image/gif" /> |
| | | <mimeMap fileExtension=".glb" mimeType="model/gltf-binary" /> |
| | | <mimeMap fileExtension=".gtar" mimeType="application/x-gtar" /> |
| | | <mimeMap fileExtension=".gz" mimeType="application/x-gzip" /> |
| | | <mimeMap fileExtension=".h" mimeType="text/plain" /> |
| | | <mimeMap fileExtension=".hdf" mimeType="application/x-hdf" /> |
| | | <mimeMap fileExtension=".hdml" mimeType="text/x-hdml" /> |
| | | <mimeMap fileExtension=".hhc" mimeType="application/x-oleobject" /> |
| | | <mimeMap fileExtension=".hhk" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".hhp" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".hlp" mimeType="application/winhlp" /> |
| | | <mimeMap fileExtension=".hqx" mimeType="application/mac-binhex40" /> |
| | | <mimeMap fileExtension=".hta" mimeType="application/hta" /> |
| | | <mimeMap fileExtension=".htc" mimeType="text/x-component" /> |
| | | <mimeMap fileExtension=".htm" mimeType="text/html" /> |
| | | <mimeMap fileExtension=".html" mimeType="text/html" /> |
| | | <mimeMap fileExtension=".htt" mimeType="text/webviewhtml" /> |
| | | <mimeMap fileExtension=".hxt" mimeType="text/html" /> |
| | | <mimeMap fileExtension=".ico" mimeType="image/x-icon" /> |
| | | <mimeMap fileExtension=".ics" mimeType="text/calendar" /> |
| | | <mimeMap fileExtension=".ief" mimeType="image/ief" /> |
| | | <mimeMap fileExtension=".iii" mimeType="application/x-iphone" /> |
| | | <mimeMap fileExtension=".inf" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".ins" mimeType="application/x-internet-signup" /> |
| | | <mimeMap fileExtension=".isp" mimeType="application/x-internet-signup" /> |
| | | <mimeMap fileExtension=".IVF" mimeType="video/x-ivf" /> |
| | | <mimeMap fileExtension=".jar" mimeType="application/java-archive" /> |
| | | <mimeMap fileExtension=".java" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".jck" mimeType="application/liquidmotion" /> |
| | | <mimeMap fileExtension=".jcz" mimeType="application/liquidmotion" /> |
| | | <mimeMap fileExtension=".jfif" mimeType="image/pjpeg" /> |
| | | <mimeMap fileExtension=".jpb" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".jpe" mimeType="image/jpeg" /> |
| | | <mimeMap fileExtension=".jpeg" mimeType="image/jpeg" /> |
| | | <mimeMap fileExtension=".jpg" mimeType="image/jpeg" /> |
| | | <mimeMap fileExtension=".js" mimeType="application/javascript" /> |
| | | <mimeMap fileExtension=".json" mimeType="application/json" /> |
| | | <mimeMap fileExtension=".jsonld" mimeType="application/ld+json" /> |
| | | <mimeMap fileExtension=".jsx" mimeType="text/jscript" /> |
| | | <mimeMap fileExtension=".latex" mimeType="application/x-latex" /> |
| | | <mimeMap fileExtension=".less" mimeType="text/css" /> |
| | | <mimeMap fileExtension=".lit" mimeType="application/x-ms-reader" /> |
| | | <mimeMap fileExtension=".lpk" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".lsf" mimeType="video/x-la-asf" /> |
| | | <mimeMap fileExtension=".lsx" mimeType="video/x-la-asf" /> |
| | | <mimeMap fileExtension=".lzh" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".m13" mimeType="application/x-msmediaview" /> |
| | | <mimeMap fileExtension=".m14" mimeType="application/x-msmediaview" /> |
| | | <mimeMap fileExtension=".m1v" mimeType="video/mpeg" /> |
| | | <mimeMap fileExtension=".m2ts" mimeType="video/vnd.dlna.mpeg-tts" /> |
| | | <mimeMap fileExtension=".m3u" mimeType="audio/x-mpegurl" /> |
| | | <mimeMap fileExtension=".m4a" mimeType="audio/mp4" /> |
| | | <mimeMap fileExtension=".m4v" mimeType="video/mp4" /> |
| | | <mimeMap fileExtension=".man" mimeType="application/x-troff-man" /> |
| | | <mimeMap fileExtension=".manifest" mimeType="application/x-ms-manifest" /> |
| | | <mimeMap fileExtension=".map" mimeType="text/plain" /> |
| | | <mimeMap fileExtension=".mdb" mimeType="application/x-msaccess" /> |
| | | <mimeMap fileExtension=".mdp" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".me" mimeType="application/x-troff-me" /> |
| | | <mimeMap fileExtension=".mht" mimeType="message/rfc822" /> |
| | | <mimeMap fileExtension=".mhtml" mimeType="message/rfc822" /> |
| | | <mimeMap fileExtension=".mid" mimeType="audio/mid" /> |
| | | <mimeMap fileExtension=".midi" mimeType="audio/mid" /> |
| | | <mimeMap fileExtension=".mix" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".mmf" mimeType="application/x-smaf" /> |
| | | <mimeMap fileExtension=".mno" mimeType="text/xml" /> |
| | | <mimeMap fileExtension=".mny" mimeType="application/x-msmoney" /> |
| | | <mimeMap fileExtension=".mov" mimeType="video/quicktime" /> |
| | | <mimeMap fileExtension=".movie" mimeType="video/x-sgi-movie" /> |
| | | <mimeMap fileExtension=".mp2" mimeType="video/mpeg" /> |
| | | <mimeMap fileExtension=".mp3" mimeType="audio/mpeg" /> |
| | | <mimeMap fileExtension=".mp4" mimeType="video/mp4" /> |
| | | <mimeMap fileExtension=".mp4v" mimeType="video/mp4" /> |
| | | <mimeMap fileExtension=".mpa" mimeType="video/mpeg" /> |
| | | <mimeMap fileExtension=".mpe" mimeType="video/mpeg" /> |
| | | <mimeMap fileExtension=".mpeg" mimeType="video/mpeg" /> |
| | | <mimeMap fileExtension=".mpg" mimeType="video/mpeg" /> |
| | | <mimeMap fileExtension=".mpp" mimeType="application/vnd.ms-project" /> |
| | | <mimeMap fileExtension=".mpv2" mimeType="video/mpeg" /> |
| | | <mimeMap fileExtension=".ms" mimeType="application/x-troff-ms" /> |
| | | <mimeMap fileExtension=".msi" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".mso" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".mvb" mimeType="application/x-msmediaview" /> |
| | | <mimeMap fileExtension=".mvc" mimeType="application/x-miva-compiled" /> |
| | | <mimeMap fileExtension=".nc" mimeType="application/x-netcdf" /> |
| | | <mimeMap fileExtension=".nsc" mimeType="video/x-ms-asf" /> |
| | | <mimeMap fileExtension=".nws" mimeType="message/rfc822" /> |
| | | <mimeMap fileExtension=".ocx" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".oda" mimeType="application/oda" /> |
| | | <mimeMap fileExtension=".odc" mimeType="text/x-ms-odc" /> |
| | | <mimeMap fileExtension=".ods" mimeType="application/oleobject" /> |
| | | <mimeMap fileExtension=".oga" mimeType="audio/ogg" /> |
| | | <mimeMap fileExtension=".ogg" mimeType="video/ogg" /> |
| | | <mimeMap fileExtension=".ogv" mimeType="video/ogg" /> |
| | | <mimeMap fileExtension=".one" mimeType="application/onenote" /> |
| | | <mimeMap fileExtension=".onea" mimeType="application/onenote" /> |
| | | <mimeMap fileExtension=".onetoc" mimeType="application/onenote" /> |
| | | <mimeMap fileExtension=".onetoc2" mimeType="application/onenote" /> |
| | | <mimeMap fileExtension=".onetmp" mimeType="application/onenote" /> |
| | | <mimeMap fileExtension=".onepkg" mimeType="application/onenote" /> |
| | | <mimeMap fileExtension=".osdx" mimeType="application/opensearchdescription+xml" /> |
| | | <mimeMap fileExtension=".otf" mimeType="font/otf" /> |
| | | <mimeMap fileExtension=".p10" mimeType="application/pkcs10" /> |
| | | <mimeMap fileExtension=".p12" mimeType="application/x-pkcs12" /> |
| | | <mimeMap fileExtension=".p7b" mimeType="application/x-pkcs7-certificates" /> |
| | | <mimeMap fileExtension=".p7c" mimeType="application/pkcs7-mime" /> |
| | | <mimeMap fileExtension=".p7m" mimeType="application/pkcs7-mime" /> |
| | | <mimeMap fileExtension=".p7r" mimeType="application/x-pkcs7-certreqresp" /> |
| | | <mimeMap fileExtension=".p7s" mimeType="application/pkcs7-signature" /> |
| | | <mimeMap fileExtension=".pbm" mimeType="image/x-portable-bitmap" /> |
| | | <mimeMap fileExtension=".pcx" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".pcz" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".pdf" mimeType="application/pdf" /> |
| | | <mimeMap fileExtension=".pfb" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".pfm" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".pfx" mimeType="application/x-pkcs12" /> |
| | | <mimeMap fileExtension=".pgm" mimeType="image/x-portable-graymap" /> |
| | | <mimeMap fileExtension=".pko" mimeType="application/vnd.ms-pki.pko" /> |
| | | <mimeMap fileExtension=".pma" mimeType="application/x-perfmon" /> |
| | | <mimeMap fileExtension=".pmc" mimeType="application/x-perfmon" /> |
| | | <mimeMap fileExtension=".pml" mimeType="application/x-perfmon" /> |
| | | <mimeMap fileExtension=".pmr" mimeType="application/x-perfmon" /> |
| | | <mimeMap fileExtension=".pmw" mimeType="application/x-perfmon" /> |
| | | <mimeMap fileExtension=".png" mimeType="image/png" /> |
| | | <mimeMap fileExtension=".pnm" mimeType="image/x-portable-anymap" /> |
| | | <mimeMap fileExtension=".pnz" mimeType="image/png" /> |
| | | <mimeMap fileExtension=".pot" mimeType="application/vnd.ms-powerpoint" /> |
| | | <mimeMap fileExtension=".potm" mimeType="application/vnd.ms-powerpoint.template.macroEnabled.12" /> |
| | | <mimeMap fileExtension=".potx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.template" /> |
| | | <mimeMap fileExtension=".ppam" mimeType="application/vnd.ms-powerpoint.addin.macroEnabled.12" /> |
| | | <mimeMap fileExtension=".ppm" mimeType="image/x-portable-pixmap" /> |
| | | <mimeMap fileExtension=".pps" mimeType="application/vnd.ms-powerpoint" /> |
| | | <mimeMap fileExtension=".ppsm" mimeType="application/vnd.ms-powerpoint.slideshow.macroEnabled.12" /> |
| | | <mimeMap fileExtension=".ppsx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slideshow" /> |
| | | <mimeMap fileExtension=".ppt" mimeType="application/vnd.ms-powerpoint" /> |
| | | <mimeMap fileExtension=".pptm" mimeType="application/vnd.ms-powerpoint.presentation.macroEnabled.12" /> |
| | | <mimeMap fileExtension=".pptx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" /> |
| | | <mimeMap fileExtension=".prf" mimeType="application/pics-rules" /> |
| | | <mimeMap fileExtension=".prm" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".prx" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".ps" mimeType="application/postscript" /> |
| | | <mimeMap fileExtension=".psd" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".psm" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".psp" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".pub" mimeType="application/x-mspublisher" /> |
| | | <mimeMap fileExtension=".qt" mimeType="video/quicktime" /> |
| | | <mimeMap fileExtension=".qtl" mimeType="application/x-quicktimeplayer" /> |
| | | <mimeMap fileExtension=".qxd" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".ra" mimeType="audio/x-pn-realaudio" /> |
| | | <mimeMap fileExtension=".ram" mimeType="audio/x-pn-realaudio" /> |
| | | <mimeMap fileExtension=".rar" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".ras" mimeType="image/x-cmu-raster" /> |
| | | <mimeMap fileExtension=".rf" mimeType="image/vnd.rn-realflash" /> |
| | | <mimeMap fileExtension=".rgb" mimeType="image/x-rgb" /> |
| | | <mimeMap fileExtension=".rm" mimeType="application/vnd.rn-realmedia" /> |
| | | <mimeMap fileExtension=".rmi" mimeType="audio/mid" /> |
| | | <mimeMap fileExtension=".roff" mimeType="application/x-troff" /> |
| | | <mimeMap fileExtension=".rpm" mimeType="audio/x-pn-realaudio-plugin" /> |
| | | <mimeMap fileExtension=".rtf" mimeType="application/rtf" /> |
| | | <mimeMap fileExtension=".rtx" mimeType="text/richtext" /> |
| | | <mimeMap fileExtension=".scd" mimeType="application/x-msschedule" /> |
| | | <mimeMap fileExtension=".sct" mimeType="text/scriptlet" /> |
| | | <mimeMap fileExtension=".sea" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".setpay" mimeType="application/set-payment-initiation" /> |
| | | <mimeMap fileExtension=".setreg" mimeType="application/set-registration-initiation" /> |
| | | <mimeMap fileExtension=".sgml" mimeType="text/sgml" /> |
| | | <mimeMap fileExtension=".sh" mimeType="application/x-sh" /> |
| | | <mimeMap fileExtension=".shar" mimeType="application/x-shar" /> |
| | | <mimeMap fileExtension=".sit" mimeType="application/x-stuffit" /> |
| | | <mimeMap fileExtension=".sldm" mimeType="application/vnd.ms-powerpoint.slide.macroEnabled.12" /> |
| | | <mimeMap fileExtension=".sldx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slide" /> |
| | | <mimeMap fileExtension=".smd" mimeType="audio/x-smd" /> |
| | | <mimeMap fileExtension=".smi" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".smx" mimeType="audio/x-smd" /> |
| | | <mimeMap fileExtension=".smz" mimeType="audio/x-smd" /> |
| | | <mimeMap fileExtension=".snd" mimeType="audio/basic" /> |
| | | <mimeMap fileExtension=".snp" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".spc" mimeType="application/x-pkcs7-certificates" /> |
| | | <mimeMap fileExtension=".spl" mimeType="application/futuresplash" /> |
| | | <mimeMap fileExtension=".spx" mimeType="audio/ogg" /> |
| | | <mimeMap fileExtension=".src" mimeType="application/x-wais-source" /> |
| | | <mimeMap fileExtension=".ssm" mimeType="application/streamingmedia" /> |
| | | <mimeMap fileExtension=".sst" mimeType="application/vnd.ms-pki.certstore" /> |
| | | <mimeMap fileExtension=".stl" mimeType="application/vnd.ms-pki.stl" /> |
| | | <mimeMap fileExtension=".sv4cpio" mimeType="application/x-sv4cpio" /> |
| | | <mimeMap fileExtension=".sv4crc" mimeType="application/x-sv4crc" /> |
| | | <mimeMap fileExtension=".svg" mimeType="image/svg+xml" /> |
| | | <mimeMap fileExtension=".svgz" mimeType="image/svg+xml" /> |
| | | <mimeMap fileExtension=".swf" mimeType="application/x-shockwave-flash" /> |
| | | <mimeMap fileExtension=".t" mimeType="application/x-troff" /> |
| | | <mimeMap fileExtension=".tar" mimeType="application/x-tar" /> |
| | | <mimeMap fileExtension=".tcl" mimeType="application/x-tcl" /> |
| | | <mimeMap fileExtension=".tex" mimeType="application/x-tex" /> |
| | | <mimeMap fileExtension=".texi" mimeType="application/x-texinfo" /> |
| | | <mimeMap fileExtension=".texinfo" mimeType="application/x-texinfo" /> |
| | | <mimeMap fileExtension=".tgz" mimeType="application/x-compressed" /> |
| | | <mimeMap fileExtension=".thmx" mimeType="application/vnd.ms-officetheme" /> |
| | | <mimeMap fileExtension=".thn" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".tif" mimeType="image/tiff" /> |
| | | <mimeMap fileExtension=".tiff" mimeType="image/tiff" /> |
| | | <mimeMap fileExtension=".toc" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".tr" mimeType="application/x-troff" /> |
| | | <mimeMap fileExtension=".trm" mimeType="application/x-msterminal" /> |
| | | <mimeMap fileExtension=".ts" mimeType="video/vnd.dlna.mpeg-tts" /> |
| | | <mimeMap fileExtension=".tsv" mimeType="text/tab-separated-values" /> |
| | | <mimeMap fileExtension=".ttf" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".tts" mimeType="video/vnd.dlna.mpeg-tts" /> |
| | | <mimeMap fileExtension=".txt" mimeType="text/plain" /> |
| | | <mimeMap fileExtension=".u32" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".uls" mimeType="text/iuls" /> |
| | | <mimeMap fileExtension=".ustar" mimeType="application/x-ustar" /> |
| | | <mimeMap fileExtension=".vbs" mimeType="text/vbscript" /> |
| | | <mimeMap fileExtension=".vcf" mimeType="text/x-vcard" /> |
| | | <mimeMap fileExtension=".vcs" mimeType="text/plain" /> |
| | | <mimeMap fileExtension=".vdx" mimeType="application/vnd.ms-visio.viewer" /> |
| | | <mimeMap fileExtension=".vml" mimeType="text/xml" /> |
| | | <mimeMap fileExtension=".vsd" mimeType="application/vnd.visio" /> |
| | | <mimeMap fileExtension=".vss" mimeType="application/vnd.visio" /> |
| | | <mimeMap fileExtension=".vst" mimeType="application/vnd.visio" /> |
| | | <mimeMap fileExtension=".vsto" mimeType="application/x-ms-vsto" /> |
| | | <mimeMap fileExtension=".vsw" mimeType="application/vnd.visio" /> |
| | | <mimeMap fileExtension=".vsx" mimeType="application/vnd.visio" /> |
| | | <mimeMap fileExtension=".vtx" mimeType="application/vnd.visio" /> |
| | | <mimeMap fileExtension=".wasm" mimeType="application/wasm" /> |
| | | <mimeMap fileExtension=".wav" mimeType="audio/wav" /> |
| | | <mimeMap fileExtension=".wax" mimeType="audio/x-ms-wax" /> |
| | | <mimeMap fileExtension=".wbmp" mimeType="image/vnd.wap.wbmp" /> |
| | | <mimeMap fileExtension=".wcm" mimeType="application/vnd.ms-works" /> |
| | | <mimeMap fileExtension=".wdb" mimeType="application/vnd.ms-works" /> |
| | | <mimeMap fileExtension=".webm" mimeType="video/webm" /> |
| | | <mimeMap fileExtension=".wks" mimeType="application/vnd.ms-works" /> |
| | | <mimeMap fileExtension=".wm" mimeType="video/x-ms-wm" /> |
| | | <mimeMap fileExtension=".wma" mimeType="audio/x-ms-wma" /> |
| | | <mimeMap fileExtension=".wmd" mimeType="application/x-ms-wmd" /> |
| | | <mimeMap fileExtension=".wmf" mimeType="application/x-msmetafile" /> |
| | | <mimeMap fileExtension=".wml" mimeType="text/vnd.wap.wml" /> |
| | | <mimeMap fileExtension=".wmlc" mimeType="application/vnd.wap.wmlc" /> |
| | | <mimeMap fileExtension=".wmls" mimeType="text/vnd.wap.wmlscript" /> |
| | | <mimeMap fileExtension=".wmlsc" mimeType="application/vnd.wap.wmlscriptc" /> |
| | | <mimeMap fileExtension=".wmp" mimeType="video/x-ms-wmp" /> |
| | | <mimeMap fileExtension=".wmv" mimeType="video/x-ms-wmv" /> |
| | | <mimeMap fileExtension=".wmx" mimeType="video/x-ms-wmx" /> |
| | | <mimeMap fileExtension=".wmz" mimeType="application/x-ms-wmz" /> |
| | | <mimeMap fileExtension=".woff" mimeType="font/x-woff" /> |
| | | <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" /> |
| | | <mimeMap fileExtension=".wps" mimeType="application/vnd.ms-works" /> |
| | | <mimeMap fileExtension=".wri" mimeType="application/x-mswrite" /> |
| | | <mimeMap fileExtension=".wrl" mimeType="x-world/x-vrml" /> |
| | | <mimeMap fileExtension=".wrz" mimeType="x-world/x-vrml" /> |
| | | <mimeMap fileExtension=".wsdl" mimeType="text/xml" /> |
| | | <mimeMap fileExtension=".wtv" mimeType="video/x-ms-wtv" /> |
| | | <mimeMap fileExtension=".wvx" mimeType="video/x-ms-wvx" /> |
| | | <mimeMap fileExtension=".x" mimeType="application/directx" /> |
| | | <mimeMap fileExtension=".xaf" mimeType="x-world/x-vrml" /> |
| | | <mimeMap fileExtension=".xaml" mimeType="application/xaml+xml" /> |
| | | <mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app" /> |
| | | <mimeMap fileExtension=".xbap" mimeType="application/x-ms-xbap" /> |
| | | <mimeMap fileExtension=".xbm" mimeType="image/x-xbitmap" /> |
| | | <mimeMap fileExtension=".xdr" mimeType="text/plain" /> |
| | | <mimeMap fileExtension=".xht" mimeType="application/xhtml+xml" /> |
| | | <mimeMap fileExtension=".xhtml" mimeType="application/xhtml+xml" /> |
| | | <mimeMap fileExtension=".xla" mimeType="application/vnd.ms-excel" /> |
| | | <mimeMap fileExtension=".xlam" mimeType="application/vnd.ms-excel.addin.macroEnabled.12" /> |
| | | <mimeMap fileExtension=".xlc" mimeType="application/vnd.ms-excel" /> |
| | | <mimeMap fileExtension=".xlm" mimeType="application/vnd.ms-excel" /> |
| | | <mimeMap fileExtension=".xls" mimeType="application/vnd.ms-excel" /> |
| | | <mimeMap fileExtension=".xlsb" mimeType="application/vnd.ms-excel.sheet.binary.macroEnabled.12" /> |
| | | <mimeMap fileExtension=".xlsm" mimeType="application/vnd.ms-excel.sheet.macroEnabled.12" /> |
| | | <mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /> |
| | | <mimeMap fileExtension=".xlt" mimeType="application/vnd.ms-excel" /> |
| | | <mimeMap fileExtension=".xltm" mimeType="application/vnd.ms-excel.template.macroEnabled.12" /> |
| | | <mimeMap fileExtension=".xltx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.template" /> |
| | | <mimeMap fileExtension=".xlw" mimeType="application/vnd.ms-excel" /> |
| | | <mimeMap fileExtension=".xml" mimeType="text/xml" /> |
| | | <mimeMap fileExtension=".xof" mimeType="x-world/x-vrml" /> |
| | | <mimeMap fileExtension=".xpm" mimeType="image/x-xpixmap" /> |
| | | <mimeMap fileExtension=".xps" mimeType="application/vnd.ms-xpsdocument" /> |
| | | <mimeMap fileExtension=".xsd" mimeType="text/xml" /> |
| | | <mimeMap fileExtension=".xsf" mimeType="text/xml" /> |
| | | <mimeMap fileExtension=".xsl" mimeType="text/xml" /> |
| | | <mimeMap fileExtension=".xslt" mimeType="text/xml" /> |
| | | <mimeMap fileExtension=".xsn" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".xtp" mimeType="application/octet-stream" /> |
| | | <mimeMap fileExtension=".xwd" mimeType="image/x-xwindowdump" /> |
| | | <mimeMap fileExtension=".z" mimeType="application/x-compress" /> |
| | | <mimeMap fileExtension=".zip" mimeType="application/x-zip-compressed" /> |
| | | </staticContent> |
| | | |
| | | <tracing> |
| | | |
| | | <traceFailedRequests> |
| | | <add path="*"> |
| | | <traceAreas> |
| | | <add provider="ASP" verbosity="Verbose" /> |
| | | <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" /> |
| | | <add provider="ISAPI Extension" verbosity="Verbose" /> |
| | | <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket" verbosity="Verbose" /> |
| | | </traceAreas> |
| | | <failureDefinitions statusCodes="200-999" /> |
| | | </add> |
| | | </traceFailedRequests> |
| | | |
| | | <traceProviderDefinitions> |
| | | <add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}"> |
| | | <areas> |
| | | <clear /> |
| | | <add name="Authentication" value="2" /> |
| | | <add name="Security" value="4" /> |
| | | <add name="Filter" value="8" /> |
| | | <add name="StaticFile" value="16" /> |
| | | <add name="CGI" value="32" /> |
| | | <add name="Compression" value="64" /> |
| | | <add name="Cache" value="128" /> |
| | | <add name="RequestNotifications" value="256" /> |
| | | <add name="Module" value="512" /> |
| | | <add name="Rewrite" value="1024" /> |
| | | <add name="FastCGI" value="4096" /> |
| | | <add name="WebSocket" value="16384" /> |
| | | </areas> |
| | | </add> |
| | | <add name="ASP" guid="{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}"> |
| | | <areas> |
| | | <clear /> |
| | | </areas> |
| | | </add> |
| | | <add name="ISAPI Extension" guid="{a1c2040e-8840-4c31-ba11-9871031a19ea}"> |
| | | <areas> |
| | | <clear /> |
| | | </areas> |
| | | </add> |
| | | <add name="ASPNET" guid="{AFF081FE-0247-4275-9C4E-021F3DC1DA35}"> |
| | | <areas> |
| | | <add name="Infrastructure" value="1" /> |
| | | <add name="Module" value="2" /> |
| | | <add name="Page" value="4" /> |
| | | <add name="AppServices" value="8" /> |
| | | </areas> |
| | | </add> |
| | | </traceProviderDefinitions> |
| | | |
| | | </tracing> |
| | | |
| | | <urlCompression /> |
| | | |
| | | <validation /> |
| | | <webdav> |
| | | <globalSettings> |
| | | <propertyStores> |
| | | <add name="webdav_simple_prop" image="%IIS_BIN%\webdav_simple_prop.dll" image32="%IIS_BIN%\webdav_simple_prop.dll" /> |
| | | </propertyStores> |
| | | <lockStores> |
| | | <add name="webdav_simple_lock" image="%IIS_BIN%\webdav_simple_lock.dll" image32="%IIS_BIN%\webdav_simple_lock.dll" /> |
| | | </lockStores> |
| | | |
| | | </globalSettings> |
| | | <authoring> |
| | | <locks enabled="true" lockStore="webdav_simple_lock" /> |
| | | </authoring> |
| | | <authoringRules /> |
| | | </webdav> |
| | | <webSocket /> |
| | | <applicationInitialization /> |
| | | |
| | | </system.webServer> |
| | | <location path="" overrideMode="Allow"> |
| | | <system.webServer> |
| | | <modules> |
| | | <add name="IsapiFilterModule" lockItem="true" /> |
| | | <add name="BasicAuthenticationModule" lockItem="true" /> |
| | | <add name="IsapiModule" lockItem="true" /> |
| | | <add name="HttpLoggingModule" lockItem="true" /> |
| | | <add name="DynamicCompressionModule" lockItem="true" /> |
| | | <add name="StaticCompressionModule" lockItem="true" /> |
| | | <add name="DefaultDocumentModule" lockItem="true" /> |
| | | <add name="DirectoryListingModule" lockItem="true" /> |
| | | <add name="ProtocolSupportModule" lockItem="true" /> |
| | | <add name="HttpRedirectionModule" lockItem="true" /> |
| | | <add name="ServerSideIncludeModule" lockItem="true" /> |
| | | <add name="StaticFileModule" lockItem="true" /> |
| | | <add name="AnonymousAuthenticationModule" lockItem="true" /> |
| | | <add name="CertificateMappingAuthenticationModule" lockItem="true" /> |
| | | <add name="UrlAuthorizationModule" lockItem="true" /> |
| | | <add name="WindowsAuthenticationModule" lockItem="true" /> |
| | | <add name="IISCertificateMappingAuthenticationModule" lockItem="true" /> |
| | | <add name="WebMatrixSupportModule" lockItem="true" /> |
| | | <add name="IpRestrictionModule" lockItem="true" /> |
| | | <add name="DynamicIpRestrictionModule" lockItem="true" /> |
| | | <add name="RequestFilteringModule" lockItem="true" /> |
| | | <add name="CustomLoggingModule" lockItem="true" /> |
| | | <add name="CustomErrorModule" lockItem="true" /> |
| | | <add name="FailedRequestsTracingModule" lockItem="true" /> |
| | | <add name="CgiModule" lockItem="true" /> |
| | | <add name="FastCgiModule" lockItem="true" /> |
| | | <!-- <add name="WebDAVModule" /> --> |
| | | <add name="RewriteModule" /> |
| | | <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" /> |
| | | <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" /> |
| | | <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" /> |
| | | <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" /> |
| | | <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" /> |
| | | <add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" /> |
| | | <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" /> |
| | | <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" /> |
| | | <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" /> |
| | | <add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" /> |
| | | <add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" /> |
| | | <add name="ApplicationInitializationModule" lockItem="true" /> |
| | | <add name="WebSocketModule" lockItem="true" /> |
| | | <add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" /> |
| | | <add name="ConfigurationValidationModule" lockItem="true" /> |
| | | <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" /> |
| | | <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" /> |
| | | <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler,runtimeVersionv2.0" /> |
| | | </modules> |
| | | <handlers accessPolicy="Read, Script"> |
| | | <!-- <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> --> |
| | | <add name="AXD-ISAPI-4.0_64bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="SimpleHandlerFactory-ISAPI-4.0_64bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" /> |
| | | <add name="rules-ISAPI-4.0_64bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" /> |
| | | <add name="xoml-ISAPI-4.0_64bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" /> |
| | | <add name="xamlx-ISAPI-4.0_64bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" /> |
| | | <add name="aspq-ISAPI-4.0_64bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="cshtm-ISAPI-4.0_64bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" /> |
| | | <add name="svc-ISAPI-2.0" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" /> |
| | | <add name="xoml-Integrated" path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" /> |
| | | <add name="xoml-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" /> |
| | | <add name="rules-Integrated" path="*.rules" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" /> |
| | | <add name="rules-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" /> |
| | | <add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" /> |
| | | <add name="rules-ISAPI-4.0_32bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" /> |
| | | <add name="xoml-ISAPI-4.0_32bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" /> |
| | | <add name="xamlx-ISAPI-4.0_32bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" /> |
| | | <add name="aspq-ISAPI-4.0_32bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="cshtm-ISAPI-4.0_32bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="cshtml-ISAPI-4.0_32bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="vbhtm-ISAPI-4.0_32bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="vbhtml-ISAPI-4.0_32bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="AssemblyResourceLoader-Integrated-4.0" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="HttpRemotingHandlerFactory-rem-Integrated-4.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="HttpRemotingHandlerFactory-soap-Integrated-4.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="rules-Integrated-4.0" path="*.rules" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="xoml-Integrated-4.0" path="*.xoml" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="xamlx-Integrated-4.0" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="aspq-Integrated-4.0" path="*.aspq" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="cshtm-Integrated-4.0" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="cshtml-Integrated-4.0" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="vbhtm-Integrated-4.0" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="vbhtml-Integrated-4.0" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="ScriptHandlerFactoryAppServices-Integrated-4.0" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="ScriptResourceIntegrated-4.0" path="*ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" /> |
| | | <add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" /> |
| | | <add name="SecurityCertificate" path="*.cer" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" /> |
| | | <add name="ISAPI-dll" path="*.dll" verb="*" modules="IsapiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" /> |
| | | <add name="TraceHandler-Integrated" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv2.0" /> |
| | | <add name="WebAdminHandler-Integrated" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv2.0" /> |
| | | <add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv2.0" /> |
| | | <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" /> |
| | | <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" /> |
| | | <add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" /> |
| | | <add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" /> |
| | | <add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" /> |
| | | <add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="svc-ISAPI-2.0-64" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" /> |
| | | <add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="rules-64-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" /> |
| | | <add name="xoml-64-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" /> |
| | | <add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" /> |
| | | <add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" /> |
| | | <add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" /> |
| | | <add name="SSINC-shtml" path="*.shtml" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" /> |
| | | <add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" /> |
| | | <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" /> |
| | | <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> |
| | | <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> |
| | | <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" /> |
| | | <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" /> |
| | | </handlers> |
| | | </system.webServer> |
| | | </location> |
| | | </configuration> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "Version": 1, |
| | | "WorkspaceRootPath": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\", |
| | | "Documents": [ |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\api\\responses\\apiresponse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\api\\responses\\apiresponse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\api\\documentation\\swagger\\swaggersetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\api\\documentation\\swagger\\swaggersetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\api\\responses\\pagination.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\api\\responses\\pagination.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\setup\\monitoringsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\setup\\monitoringsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\setup\\servicecollectionsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\setup\\servicecollectionsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\setup\\middlewaresetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\setup\\middlewaresetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\setup\\loggingsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\setup\\loggingsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\setup\\databasesetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\setup\\databasesetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\setup\\apidocumentationsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\setup\\apidocumentationsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\monitoring\\miniprofiler\\miniprofilersetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\monitoring\\miniprofiler\\miniprofilersetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\repositories\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\repositories\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\repositories\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\repositories\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\dependencyinjection\\serviceregistrar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\dependencyinjection\\serviceregistrar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\dependencyinjection\\serviceextensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\dependencyinjection\\serviceextensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\dependencyinjection\\iserviceregistrar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\dependencyinjection\\iserviceregistrar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\dependencyinjection\\servicelifetimes\\selfregisteredserviceattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\dependencyinjection\\servicelifetimes\\selfregisteredserviceattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\dependencyinjection\\servicelifetimes\\registeredserviceattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\dependencyinjection\\servicelifetimes\\registeredserviceattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\constants\\appsettingsconstants.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\constants\\appsettingsconstants.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\unitofworks\\unitofworkextensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\unitofworks\\unitofworkextensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\serilog\\serilogsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\serilog\\serilogsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\unitofworks\\unitofwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\unitofworks\\unitofwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\unitofworks\\iunitofwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\unitofworks\\iunitofwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\idbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\idbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\sqlsugar\\sqlsugardbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\sqlsugar\\sqlsugardbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\sqlsugar\\sqlsugarsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\sqlsugar\\sqlsugarsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\attributes\\loginterceptorattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\attributes\\loginterceptorattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\logcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\logcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\iloggerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\iloggerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\serilog\\serilogoptions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\serilog\\serilogoptions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\serilog\\loggerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\serilog\\loggerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\aop\\logginginterceptor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\aop\\logginginterceptor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\logs\\warning-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\logs\\warning-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\logs\\log-20260203.txt||{8B382828-6202-11D1-8870-0000F87579D2}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\logs\\log-20260203.txt||{8B382828-6202-11D1-8870-0000F87579D2}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\logs\\log-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\logs\\log-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\logs\\error-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\logs\\error-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\logs\\custom\\cachinginterceptor-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\logs\\custom\\cachinginterceptor-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{E2D70705-05DB-5D0E-169D-82766317D467}|Extensions\\KH.WMS.Extensions\\KH.WMS.Extensions.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\extensions\\kh.wms.extensions\\kh.wms.extensions.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{E2D70705-05DB-5D0E-169D-82766317D467}|Extensions\\KH.WMS.Extensions\\KH.WMS.Extensions.csproj|solutionrelative:extensions\\kh.wms.extensions\\kh.wms.extensions.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\logenums\\logleveltype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\logenums\\logleveltype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{C45B4DD7-40D4-C442-2392-8568CE6151A5}|KH.WMS.Model\\KH.WMS.Model.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.model\\kh.wms.model.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{C45B4DD7-40D4-C442-2392-8568CE6151A5}|KH.WMS.Model\\KH.WMS.Model.csproj|solutionrelative:kh.wms.model\\kh.wms.model.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\kh.wms.core.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\kh.wms.core.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\logmoduledetector.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\logmoduledetector.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}|Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\test\\kh.wms.testproj\\testoneservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}|Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj|solutionrelative:test\\kh.wms.testproj\\testoneservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}|Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\test\\kh.wms.testproj\\testservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}|Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj|solutionrelative:test\\kh.wms.testproj\\testservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{F51A470B-FC5D-43A3-A721-23007FD3416B}|Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\tools\\kh.wms.tools\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{F51A470B-FC5D-43A3-A721-23007FD3416B}|Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj|solutionrelative:tools\\kh.wms.tools\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\kh.wms.server.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\kh.wms.server.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{FAAC50D0-A5C3-9EAF-DB00-7CE5583285B4}|Common\\KH.WMS.Common\\KH.WMS.Common.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\common\\kh.wms.common\\kh.wms.common.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{FAAC50D0-A5C3-9EAF-DB00-7CE5583285B4}|Common\\KH.WMS.Common\\KH.WMS.Common.csproj|solutionrelative:common\\kh.wms.common\\kh.wms.common.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}|Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\test\\kh.wms.testproj\\kh.wms.testproj.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}|Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj|solutionrelative:test\\kh.wms.testproj\\kh.wms.testproj.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{F51A470B-FC5D-43A3-A721-23007FD3416B}|Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\tools\\kh.wms.tools\\kh.wms.tools.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{F51A470B-FC5D-43A3-A721-23007FD3416B}|Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj|solutionrelative:tools\\kh.wms.tools\\kh.wms.tools.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | } |
| | | ], |
| | | "DocumentGroupContainers": [ |
| | | { |
| | | "Orientation": 0, |
| | | "VerticalTabListWidth": 256, |
| | | "DocumentGroups": [ |
| | | { |
| | | "DockedWidth": 200, |
| | | "SelectedChildIndex": 6, |
| | | "Children": [ |
| | | { |
| | | "$type": "Bookmark", |
| | | "Name": "ST:0:0:{0174dea2-fdbe-4ef1-8f99-c0beae78880f}" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 7, |
| | | "Title": "DatabaseSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\DatabaseSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Setup\\DatabaseSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\DatabaseSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Setup\\DatabaseSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:26:00.802Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 6, |
| | | "Title": "LoggingSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\LoggingSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Setup\\LoggingSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\LoggingSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Setup\\LoggingSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAAVAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T06:03:10.917Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 5, |
| | | "Title": "MiddlewareSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\MiddlewareSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Setup\\MiddlewareSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\MiddlewareSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Setup\\MiddlewareSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAACgAAAALAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T06:03:35.073Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 3, |
| | | "Title": "MonitoringSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\MonitoringSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Setup\\MonitoringSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\MonitoringSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Setup\\MonitoringSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAuwBwAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T06:04:43.444Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 4, |
| | | "Title": "ServiceCollectionSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\ServiceCollectionSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Setup\\ServiceCollectionSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\ServiceCollectionSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Setup\\ServiceCollectionSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAACAAAAALAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T06:05:46.174Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 0, |
| | | "Title": "ApiResponse.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Api\\Responses\\ApiResponse.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Api\\Responses\\ApiResponse.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Api\\Responses\\ApiResponse.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Api\\Responses\\ApiResponse.cs", |
| | | "ViewState": "AgIAAAEAAAAAAAAAAAAIwAwAAAAsAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T09:14:06.616Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 2, |
| | | "Title": "Pagination.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Api\\Responses\\Pagination.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Api\\Responses\\Pagination.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Api\\Responses\\Pagination.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Api\\Responses\\Pagination.cs", |
| | | "ViewState": "AgIAAHoAAAAAAAAAAAAlwKEAAAAYAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T09:14:54.116Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 1, |
| | | "Title": "SwaggerSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Api\\Documentation\\Swagger\\SwaggerSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Api\\Documentation\\Swagger\\SwaggerSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Api\\Documentation\\Swagger\\SwaggerSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Api\\Documentation\\Swagger\\SwaggerSetup.cs", |
| | | "ViewState": "AgIAACUAAAAAAAAAAAAQwE4AAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T09:12:25.805Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 8, |
| | | "Title": "ApiDocumentationSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\ApiDocumentationSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Setup\\ApiDocumentationSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\ApiDocumentationSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Setup\\ApiDocumentationSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAjAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T06:01:39.163Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 9, |
| | | "Title": "MiniProfilerSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Monitoring\\MiniProfiler\\MiniProfilerSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Monitoring\\MiniProfiler\\MiniProfilerSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Monitoring\\MiniProfiler\\MiniProfilerSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Monitoring\\MiniProfiler\\MiniProfilerSetup.cs", |
| | | "ViewState": "AgIAABIAAAAAAAAAAAArwDgAAAAeAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T09:16:38.586Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 10, |
| | | "Title": "RepositoryBase.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\Repositories\\RepositoryBase.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\Repositories\\RepositoryBase.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\Repositories\\RepositoryBase.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\Repositories\\RepositoryBase.cs", |
| | | "ViewState": "AgIAAAIAAAAAAAAAAADwvwkAAAAoAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:34.673Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 11, |
| | | "Title": "IRepository.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\Repositories\\IRepository.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\Repositories\\IRepository.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\Repositories\\IRepository.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\Repositories\\IRepository.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:31.839Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 18, |
| | | "Title": "UnitOfWorkExtensions.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWorkExtensions.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWorkExtensions.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWorkExtensions.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWorkExtensions.cs", |
| | | "ViewState": "AgIAAHIAAAAAAAAAAAAAwIgAAAAmAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:45.808Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 12, |
| | | "Title": "ServiceRegistrar.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceRegistrar.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\DependencyInjection\\ServiceRegistrar.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceRegistrar.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\DependencyInjection\\ServiceRegistrar.cs", |
| | | "ViewState": "AgIAAG0AAAAAAAAAAAArwIsAAAAQAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T02:38:53.95Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 14, |
| | | "Title": "IServiceRegistrar.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\IServiceRegistrar.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\DependencyInjection\\IServiceRegistrar.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\IServiceRegistrar.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\DependencyInjection\\IServiceRegistrar.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T06:11:16.444Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 15, |
| | | "Title": "SelfRegisteredServiceAttribute.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\SelfRegisteredServiceAttribute.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\SelfRegisteredServiceAttribute.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\SelfRegisteredServiceAttribute.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\SelfRegisteredServiceAttribute.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-03T08:13:43.016Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 16, |
| | | "Title": "RegisteredServiceAttribute.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\RegisteredServiceAttribute.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\RegisteredServiceAttribute.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\RegisteredServiceAttribute.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\RegisteredServiceAttribute.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAWAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-03T08:13:35.889Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 13, |
| | | "Title": "ServiceExtensions.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceExtensions.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\DependencyInjection\\ServiceExtensions.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceExtensions.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\DependencyInjection\\ServiceExtensions.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAC8AAAANAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T02:52:40.728Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 17, |
| | | "Title": "AppSettingsConstants.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Constants\\AppSettingsConstants.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Constants\\AppSettingsConstants.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Constants\\AppSettingsConstants.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Constants\\AppSettingsConstants.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAABgAAAAFAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T05:54:17.718Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 19, |
| | | "Title": "SerilogSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\Serilog\\SerilogSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\Serilog\\SerilogSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\Serilog\\SerilogSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\Serilog\\SerilogSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAAgAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-03T06:48:55.7Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 20, |
| | | "Title": "UnitOfWork.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWork.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWork.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWork.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWork.cs", |
| | | "ViewState": "AgIAADQAAAAAAAAAAAAowDQAAAAjAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:45.074Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 21, |
| | | "Title": "IUnitOfWork.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\UnitOfWorks\\IUnitOfWork.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\UnitOfWorks\\IUnitOfWork.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\UnitOfWorks\\IUnitOfWork.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\UnitOfWorks\\IUnitOfWork.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAVAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:44.31Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 22, |
| | | "Title": "IDbContext.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\IDbContext.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\IDbContext.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\IDbContext.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\IDbContext.cs", |
| | | "ViewState": "AgIAAAgAAAAAAAAAAAAxwB0AAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:25:23.173Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 23, |
| | | "Title": "SqlSugarDbContext.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\SqlSugar\\SqlSugarDbContext.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\SqlSugar\\SqlSugarDbContext.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\SqlSugar\\SqlSugarDbContext.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\SqlSugar\\SqlSugarDbContext.cs", |
| | | "ViewState": "AgIAABYAAAAAAAAAAAASwEIAAAAsAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:41.069Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 24, |
| | | "Title": "SqlSugarSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\SqlSugar\\SqlSugarSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\SqlSugar\\SqlSugarSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\SqlSugar\\SqlSugarSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\SqlSugar\\SqlSugarSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:42.689Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 25, |
| | | "Title": "LogInterceptorAttribute.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Attributes\\LogInterceptorAttribute.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Attributes\\LogInterceptorAttribute.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Attributes\\LogInterceptorAttribute.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Attributes\\LogInterceptorAttribute.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-11T02:50:01.612Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 26, |
| | | "Title": "LogContext.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\LogContext.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\LogContext.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\LogContext.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\LogContext.cs", |
| | | "ViewState": "AgIAACUAAAAAAAAAAAAkwCkAAAAQAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T08:53:24.449Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 27, |
| | | "Title": "ILoggerService.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\ILoggerService.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\ILoggerService.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\ILoggerService.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\ILoggerService.cs", |
| | | "ViewState": "AgIAADQAAAAAAAAAAADwv0UAAABIAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T07:23:08.095Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 28, |
| | | "Title": "SerilogOptions.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\Serilog\\SerilogOptions.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\Serilog\\SerilogOptions.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\Serilog\\SerilogOptions.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\Serilog\\SerilogOptions.cs", |
| | | "ViewState": "AgIAABoAAAAAAAAAAAA3wAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T07:09:37.957Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 29, |
| | | "Title": "LoggerService.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\Serilog\\LoggerService.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\Serilog\\LoggerService.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\Serilog\\LoggerService.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\Serilog\\LoggerService.cs", |
| | | "ViewState": "AgIAAJ4AAAAAAAAAAAAnwLMAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T08:50:03.054Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 30, |
| | | "Title": "LoggingInterceptor.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\AOP\\LoggingInterceptor.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\AOP\\LoggingInterceptor.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\AOP\\LoggingInterceptor.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\AOP\\LoggingInterceptor.cs", |
| | | "ViewState": "AgIAAAsAAAAAAAAAAAAxwCoAAABIAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T08:45:33.609Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 31, |
| | | "Title": "appsettings.json", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\appsettings.json", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\appsettings.json", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\appsettings.json", |
| | | "RelativeToolTip": "KH.WMS.Server\\appsettings.json", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAARAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", |
| | | "WhenOpened": "2026-02-02T06:37:23.257Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 32, |
| | | "Title": "Program.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Program.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Program.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Program.cs", |
| | | "RelativeToolTip": "KH.WMS.Server\\Program.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T09:23:10.575Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 33, |
| | | "Title": "warning-20260202.txt", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\warning-20260202.txt", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Logs\\warning-20260202.txt", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\warning-20260202.txt", |
| | | "RelativeToolTip": "KH.WMS.Server\\Logs\\warning-20260202.txt", |
| | | "ViewState": "AgIAAAMAAAAAAAAAAAAAACAAAADEAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|", |
| | | "WhenOpened": "2026-02-02T07:07:25.434Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 34, |
| | | "Title": "log-20260203.txt", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\log-20260203.txt", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Logs\\log-20260203.txt", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\log-20260203.txt", |
| | | "RelativeToolTip": "KH.WMS.Server\\Logs\\log-20260203.txt", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|", |
| | | "WhenOpened": "2026-02-03T03:30:40.49Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 35, |
| | | "Title": "log-20260202.txt", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\log-20260202.txt", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Logs\\log-20260202.txt", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\log-20260202.txt", |
| | | "RelativeToolTip": "KH.WMS.Server\\Logs\\log-20260202.txt", |
| | | "ViewState": "AgIAALkAAAAAAAAAAAAWwAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|", |
| | | "WhenOpened": "2026-02-02T07:07:26.104Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 36, |
| | | "Title": "error-20260202.txt", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\error-20260202.txt", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Logs\\error-20260202.txt", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\error-20260202.txt", |
| | | "RelativeToolTip": "KH.WMS.Server\\Logs\\error-20260202.txt", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|", |
| | | "WhenOpened": "2026-02-02T08:14:49.932Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 37, |
| | | "Title": "CachingInterceptor-20260202.txt", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\custom\\CachingInterceptor-20260202.txt", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Logs\\custom\\CachingInterceptor-20260202.txt", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\custom\\CachingInterceptor-20260202.txt", |
| | | "RelativeToolTip": "KH.WMS.Server\\Logs\\custom\\CachingInterceptor-20260202.txt", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|", |
| | | "WhenOpened": "2026-02-03T03:30:02.819Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 38, |
| | | "Title": "KH.WMS.Extensions.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Extensions\\KH.WMS.Extensions\\KH.WMS.Extensions.csproj", |
| | | "RelativeDocumentMoniker": "Extensions\\KH.WMS.Extensions\\KH.WMS.Extensions.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Extensions\\KH.WMS.Extensions\\KH.WMS.Extensions.csproj", |
| | | "RelativeToolTip": "Extensions\\KH.WMS.Extensions\\KH.WMS.Extensions.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAZAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-02-02T01:57:58.377Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 39, |
| | | "Title": "launchSettings.json", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Properties\\launchSettings.json", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Properties\\launchSettings.json", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Properties\\launchSettings.json", |
| | | "RelativeToolTip": "KH.WMS.Server\\Properties\\launchSettings.json", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAcAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", |
| | | "WhenOpened": "2026-01-30T08:44:08.796Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 40, |
| | | "Title": "LogLevelType.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\LogEnums\\LogLevelType.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\LogEnums\\LogLevelType.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\LogEnums\\LogLevelType.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\LogEnums\\LogLevelType.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAiAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-03T02:44:25.368Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 41, |
| | | "Title": "KH.WMS.Model.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Model\\KH.WMS.Model.csproj", |
| | | "RelativeDocumentMoniker": "KH.WMS.Model\\KH.WMS.Model.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Model\\KH.WMS.Model.csproj", |
| | | "RelativeToolTip": "KH.WMS.Model\\KH.WMS.Model.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAZAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-02-02T01:57:40.591Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 42, |
| | | "Title": "KH.WMS.Core.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\KH.WMS.Core.csproj", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\KH.WMS.Core.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\KH.WMS.Core.csproj", |
| | | "RelativeToolTip": "KH.WMS.Core\\KH.WMS.Core.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-01-30T09:13:04.723Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 43, |
| | | "Title": "LogModuleDetector.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\LogModuleDetector.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\LogModuleDetector.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\LogModuleDetector.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\LogModuleDetector.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAGwAAAAVAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T08:50:32.068Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 44, |
| | | "Title": "TestOneService.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Test\\KH.WMS.TestProj\\TestOneService.cs", |
| | | "RelativeDocumentMoniker": "Test\\KH.WMS.TestProj\\TestOneService.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Test\\KH.WMS.TestProj\\TestOneService.cs", |
| | | "RelativeToolTip": "Test\\KH.WMS.TestProj\\TestOneService.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T02:37:25.677Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 45, |
| | | "Title": "TestService.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Test\\KH.WMS.TestProj\\TestService.cs", |
| | | "RelativeDocumentMoniker": "Test\\KH.WMS.TestProj\\TestService.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Test\\KH.WMS.TestProj\\TestService.cs", |
| | | "RelativeToolTip": "Test\\KH.WMS.TestProj\\TestService.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T03:25:38.474Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 46, |
| | | "Title": "Program.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Tools\\KH.WMS.Tools\\Program.cs", |
| | | "RelativeDocumentMoniker": "Tools\\KH.WMS.Tools\\Program.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Tools\\KH.WMS.Tools\\Program.cs", |
| | | "RelativeToolTip": "Tools\\KH.WMS.Tools\\Program.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T02:37:19.895Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 49, |
| | | "Title": "KH.WMS.TestProj.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj", |
| | | "RelativeDocumentMoniker": "Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj", |
| | | "RelativeToolTip": "Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAZAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-02-02T01:55:09.175Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 47, |
| | | "Title": "KH.WMS.Server.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\KH.WMS.Server.csproj", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\KH.WMS.Server.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\KH.WMS.Server.csproj", |
| | | "RelativeToolTip": "KH.WMS.Server\\KH.WMS.Server.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-02-02T01:57:16.348Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 48, |
| | | "Title": "KH.WMS.Common.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Common\\KH.WMS.Common\\KH.WMS.Common.csproj", |
| | | "RelativeDocumentMoniker": "Common\\KH.WMS.Common\\KH.WMS.Common.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Common\\KH.WMS.Common\\KH.WMS.Common.csproj", |
| | | "RelativeToolTip": "Common\\KH.WMS.Common\\KH.WMS.Common.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAZAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-02-02T01:58:02.392Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 50, |
| | | "Title": "KH.WMS.Tools.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj", |
| | | "RelativeDocumentMoniker": "Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj", |
| | | "RelativeToolTip": "Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAAZAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-02-02T01:57:48.749Z" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "Version": 1, |
| | | "WorkspaceRootPath": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\", |
| | | "Documents": [ |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\aop\\logginginterceptor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\aop\\logginginterceptor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\api\\responses\\apiresponse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\api\\responses\\apiresponse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\api\\documentation\\swagger\\swaggersetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\api\\documentation\\swagger\\swaggersetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\api\\responses\\pagination.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\api\\responses\\pagination.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\setup\\monitoringsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\setup\\monitoringsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\setup\\servicecollectionsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\setup\\servicecollectionsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\setup\\middlewaresetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\setup\\middlewaresetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\setup\\loggingsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\setup\\loggingsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\setup\\databasesetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\setup\\databasesetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\setup\\apidocumentationsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\setup\\apidocumentationsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\monitoring\\miniprofiler\\miniprofilersetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\monitoring\\miniprofiler\\miniprofilersetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\repositories\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\repositories\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\repositories\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\repositories\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\dependencyinjection\\serviceregistrar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\dependencyinjection\\serviceregistrar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\dependencyinjection\\serviceextensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\dependencyinjection\\serviceextensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\dependencyinjection\\iserviceregistrar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\dependencyinjection\\iserviceregistrar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\dependencyinjection\\servicelifetimes\\selfregisteredserviceattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\dependencyinjection\\servicelifetimes\\selfregisteredserviceattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\dependencyinjection\\servicelifetimes\\registeredserviceattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\dependencyinjection\\servicelifetimes\\registeredserviceattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\constants\\appsettingsconstants.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\constants\\appsettingsconstants.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\unitofworks\\unitofworkextensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\unitofworks\\unitofworkextensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\serilog\\serilogsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\serilog\\serilogsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\unitofworks\\unitofwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\unitofworks\\unitofwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\unitofworks\\iunitofwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\unitofworks\\iunitofwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\idbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\idbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\sqlsugar\\sqlsugardbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\sqlsugar\\sqlsugardbcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\database\\sqlsugar\\sqlsugarsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\database\\sqlsugar\\sqlsugarsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\attributes\\loginterceptorattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\attributes\\loginterceptorattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\logcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\logcontext.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\iloggerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\iloggerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\serilog\\serilogoptions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\serilog\\serilogoptions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\serilog\\loggerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\serilog\\loggerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\logs\\warning-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\logs\\warning-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\logs\\log-20260203.txt||{8B382828-6202-11D1-8870-0000F87579D2}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\logs\\log-20260203.txt||{8B382828-6202-11D1-8870-0000F87579D2}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\logs\\log-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\logs\\log-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\logs\\error-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\logs\\error-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\logs\\custom\\cachinginterceptor-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\logs\\custom\\cachinginterceptor-20260202.txt||{8B382828-6202-11D1-8870-0000F87579D2}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{E2D70705-05DB-5D0E-169D-82766317D467}|Extensions\\KH.WMS.Extensions\\KH.WMS.Extensions.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\extensions\\kh.wms.extensions\\kh.wms.extensions.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{E2D70705-05DB-5D0E-169D-82766317D467}|Extensions\\KH.WMS.Extensions\\KH.WMS.Extensions.csproj|solutionrelative:extensions\\kh.wms.extensions\\kh.wms.extensions.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\logenums\\logleveltype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\logenums\\logleveltype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{C45B4DD7-40D4-C442-2392-8568CE6151A5}|KH.WMS.Model\\KH.WMS.Model.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.model\\kh.wms.model.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{C45B4DD7-40D4-C442-2392-8568CE6151A5}|KH.WMS.Model\\KH.WMS.Model.csproj|solutionrelative:kh.wms.model\\kh.wms.model.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\kh.wms.core.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\kh.wms.core.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.core\\logging\\logmoduledetector.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}|KH.WMS.Core\\KH.WMS.Core.csproj|solutionrelative:kh.wms.core\\logging\\logmoduledetector.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}|Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\test\\kh.wms.testproj\\testoneservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}|Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj|solutionrelative:test\\kh.wms.testproj\\testoneservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}|Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\test\\kh.wms.testproj\\testservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}|Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj|solutionrelative:test\\kh.wms.testproj\\testservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{F51A470B-FC5D-43A3-A721-23007FD3416B}|Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\tools\\kh.wms.tools\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{F51A470B-FC5D-43A3-A721-23007FD3416B}|Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj|solutionrelative:tools\\kh.wms.tools\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\kh.wms.server\\kh.wms.server.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{30290226-69D6-B736-0678-A3950D90BAA9}|KH.WMS.Server\\KH.WMS.Server.csproj|solutionrelative:kh.wms.server\\kh.wms.server.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{FAAC50D0-A5C3-9EAF-DB00-7CE5583285B4}|Common\\KH.WMS.Common\\KH.WMS.Common.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\common\\kh.wms.common\\kh.wms.common.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{FAAC50D0-A5C3-9EAF-DB00-7CE5583285B4}|Common\\KH.WMS.Common\\KH.WMS.Common.csproj|solutionrelative:common\\kh.wms.common\\kh.wms.common.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}|Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\test\\kh.wms.testproj\\kh.wms.testproj.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}|Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj|solutionrelative:test\\kh.wms.testproj\\kh.wms.testproj.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | }, |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{F51A470B-FC5D-43A3-A721-23007FD3416B}|Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj|e:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\wmsrefactor\\kh.wms\\tools\\kh.wms.tools\\kh.wms.tools.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", |
| | | "RelativeMoniker": "D:0:0:{F51A470B-FC5D-43A3-A721-23007FD3416B}|Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj|solutionrelative:tools\\kh.wms.tools\\kh.wms.tools.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" |
| | | } |
| | | ], |
| | | "DocumentGroupContainers": [ |
| | | { |
| | | "Orientation": 0, |
| | | "VerticalTabListWidth": 256, |
| | | "DocumentGroups": [ |
| | | { |
| | | "DockedWidth": 200, |
| | | "SelectedChildIndex": 8, |
| | | "Children": [ |
| | | { |
| | | "$type": "Bookmark", |
| | | "Name": "ST:0:0:{0174dea2-fdbe-4ef1-8f99-c0beae78880f}" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 6, |
| | | "Title": "MiddlewareSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\MiddlewareSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Setup\\MiddlewareSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\MiddlewareSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Setup\\MiddlewareSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAACgAAAALAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T06:03:35.073Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 4, |
| | | "Title": "MonitoringSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\MonitoringSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Setup\\MonitoringSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\MonitoringSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Setup\\MonitoringSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAuwBwAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T06:04:43.444Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 5, |
| | | "Title": "ServiceCollectionSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\ServiceCollectionSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Setup\\ServiceCollectionSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\ServiceCollectionSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Setup\\ServiceCollectionSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAACAAAAALAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T06:05:46.174Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 1, |
| | | "Title": "ApiResponse.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Api\\Responses\\ApiResponse.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Api\\Responses\\ApiResponse.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Api\\Responses\\ApiResponse.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Api\\Responses\\ApiResponse.cs", |
| | | "ViewState": "AgIAAAEAAAAAAAAAAAAIwAwAAAAsAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T09:14:06.616Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 3, |
| | | "Title": "Pagination.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Api\\Responses\\Pagination.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Api\\Responses\\Pagination.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Api\\Responses\\Pagination.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Api\\Responses\\Pagination.cs", |
| | | "ViewState": "AgIAAHoAAAAAAAAAAAAlwKEAAAAYAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T09:14:54.116Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 2, |
| | | "Title": "SwaggerSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Api\\Documentation\\Swagger\\SwaggerSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Api\\Documentation\\Swagger\\SwaggerSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Api\\Documentation\\Swagger\\SwaggerSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Api\\Documentation\\Swagger\\SwaggerSetup.cs", |
| | | "ViewState": "AgIAACUAAAAAAAAAAAAQwE4AAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T09:12:25.805Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 9, |
| | | "Title": "ApiDocumentationSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\ApiDocumentationSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Setup\\ApiDocumentationSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\ApiDocumentationSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Setup\\ApiDocumentationSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAjAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T06:01:39.163Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 0, |
| | | "Title": "LoggingInterceptor.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\AOP\\LoggingInterceptor.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\AOP\\LoggingInterceptor.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\AOP\\LoggingInterceptor.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\AOP\\LoggingInterceptor.cs", |
| | | "ViewState": "AgIAABsAAAAAAAAAAAAYwCwAAAA0AAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T08:45:33.609Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 7, |
| | | "Title": "LoggingSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\LoggingSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Setup\\LoggingSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\LoggingSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Setup\\LoggingSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAAVAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T06:03:10.917Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 8, |
| | | "Title": "DatabaseSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\DatabaseSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Setup\\DatabaseSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Setup\\DatabaseSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Setup\\DatabaseSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:26:00.802Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 10, |
| | | "Title": "MiniProfilerSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Monitoring\\MiniProfiler\\MiniProfilerSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Monitoring\\MiniProfiler\\MiniProfilerSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Monitoring\\MiniProfiler\\MiniProfilerSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Monitoring\\MiniProfiler\\MiniProfilerSetup.cs", |
| | | "ViewState": "AgIAABIAAAAAAAAAAAArwDgAAAAeAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T09:16:38.586Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 11, |
| | | "Title": "RepositoryBase.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\Repositories\\RepositoryBase.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\Repositories\\RepositoryBase.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\Repositories\\RepositoryBase.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\Repositories\\RepositoryBase.cs", |
| | | "ViewState": "AgIAAAIAAAAAAAAAAADwvwkAAAAoAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:34.673Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 12, |
| | | "Title": "IRepository.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\Repositories\\IRepository.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\Repositories\\IRepository.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\Repositories\\IRepository.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\Repositories\\IRepository.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:31.839Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 19, |
| | | "Title": "UnitOfWorkExtensions.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWorkExtensions.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWorkExtensions.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWorkExtensions.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWorkExtensions.cs", |
| | | "ViewState": "AgIAAHIAAAAAAAAAAAAAwIgAAAAmAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:45.808Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 13, |
| | | "Title": "ServiceRegistrar.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceRegistrar.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\DependencyInjection\\ServiceRegistrar.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceRegistrar.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\DependencyInjection\\ServiceRegistrar.cs", |
| | | "ViewState": "AgIAAG0AAAAAAAAAAAArwIsAAAAQAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T02:38:53.95Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 15, |
| | | "Title": "IServiceRegistrar.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\IServiceRegistrar.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\DependencyInjection\\IServiceRegistrar.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\IServiceRegistrar.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\DependencyInjection\\IServiceRegistrar.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T06:11:16.444Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 16, |
| | | "Title": "SelfRegisteredServiceAttribute.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\SelfRegisteredServiceAttribute.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\SelfRegisteredServiceAttribute.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\SelfRegisteredServiceAttribute.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\SelfRegisteredServiceAttribute.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-03T08:13:43.016Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 17, |
| | | "Title": "RegisteredServiceAttribute.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\RegisteredServiceAttribute.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\RegisteredServiceAttribute.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\RegisteredServiceAttribute.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\DependencyInjection\\ServiceLifetimes\\RegisteredServiceAttribute.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAWAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-03T08:13:35.889Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 14, |
| | | "Title": "ServiceExtensions.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceExtensions.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\DependencyInjection\\ServiceExtensions.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\DependencyInjection\\ServiceExtensions.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\DependencyInjection\\ServiceExtensions.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAC8AAAANAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T02:52:40.728Z", |
| | | "EditorCaption": "" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 18, |
| | | "Title": "AppSettingsConstants.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Constants\\AppSettingsConstants.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Constants\\AppSettingsConstants.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Constants\\AppSettingsConstants.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Constants\\AppSettingsConstants.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAABgAAAAFAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T05:54:17.718Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 20, |
| | | "Title": "SerilogSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\Serilog\\SerilogSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\Serilog\\SerilogSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\Serilog\\SerilogSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\Serilog\\SerilogSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAAgAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-03T06:48:55.7Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 21, |
| | | "Title": "UnitOfWork.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWork.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWork.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWork.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\UnitOfWorks\\UnitOfWork.cs", |
| | | "ViewState": "AgIAADQAAAAAAAAAAAAowDQAAAAjAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:45.074Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 22, |
| | | "Title": "IUnitOfWork.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\UnitOfWorks\\IUnitOfWork.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\UnitOfWorks\\IUnitOfWork.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\UnitOfWorks\\IUnitOfWork.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\UnitOfWorks\\IUnitOfWork.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAVAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:44.31Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 23, |
| | | "Title": "IDbContext.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\IDbContext.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\IDbContext.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\IDbContext.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\IDbContext.cs", |
| | | "ViewState": "AgIAAAgAAAAAAAAAAAAxwB0AAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:25:23.173Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 24, |
| | | "Title": "SqlSugarDbContext.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\SqlSugar\\SqlSugarDbContext.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\SqlSugar\\SqlSugarDbContext.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\SqlSugar\\SqlSugarDbContext.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\SqlSugar\\SqlSugarDbContext.cs", |
| | | "ViewState": "AgIAABYAAAAAAAAAAAASwEIAAAAsAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:41.069Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 25, |
| | | "Title": "SqlSugarSetup.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\SqlSugar\\SqlSugarSetup.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Database\\SqlSugar\\SqlSugarSetup.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Database\\SqlSugar\\SqlSugarSetup.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Database\\SqlSugar\\SqlSugarSetup.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-10T06:24:42.689Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 26, |
| | | "Title": "LogInterceptorAttribute.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Attributes\\LogInterceptorAttribute.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Attributes\\LogInterceptorAttribute.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Attributes\\LogInterceptorAttribute.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Attributes\\LogInterceptorAttribute.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-11T02:50:01.612Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 27, |
| | | "Title": "LogContext.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\LogContext.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\LogContext.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\LogContext.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\LogContext.cs", |
| | | "ViewState": "AgIAACUAAAAAAAAAAAAkwCkAAAAQAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T08:53:24.449Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 28, |
| | | "Title": "ILoggerService.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\ILoggerService.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\ILoggerService.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\ILoggerService.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\ILoggerService.cs", |
| | | "ViewState": "AgIAADQAAAAAAAAAAADwv0UAAABIAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T07:23:08.095Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 29, |
| | | "Title": "SerilogOptions.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\Serilog\\SerilogOptions.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\Serilog\\SerilogOptions.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\Serilog\\SerilogOptions.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\Serilog\\SerilogOptions.cs", |
| | | "ViewState": "AgIAABoAAAAAAAAAAAA3wAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T07:09:37.957Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 30, |
| | | "Title": "LoggerService.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\Serilog\\LoggerService.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\Serilog\\LoggerService.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\Serilog\\LoggerService.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\Serilog\\LoggerService.cs", |
| | | "ViewState": "AgIAAJ4AAAAAAAAAAAAnwLMAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T08:50:03.054Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 31, |
| | | "Title": "appsettings.json", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\appsettings.json", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\appsettings.json", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\appsettings.json", |
| | | "RelativeToolTip": "KH.WMS.Server\\appsettings.json", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAARAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", |
| | | "WhenOpened": "2026-02-02T06:37:23.257Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 32, |
| | | "Title": "Program.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Program.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Program.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Program.cs", |
| | | "RelativeToolTip": "KH.WMS.Server\\Program.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T09:23:10.575Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 33, |
| | | "Title": "warning-20260202.txt", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\warning-20260202.txt", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Logs\\warning-20260202.txt", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\warning-20260202.txt", |
| | | "RelativeToolTip": "KH.WMS.Server\\Logs\\warning-20260202.txt", |
| | | "ViewState": "AgIAAAMAAAAAAAAAAAAAACAAAADEAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|", |
| | | "WhenOpened": "2026-02-02T07:07:25.434Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 34, |
| | | "Title": "log-20260203.txt", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\log-20260203.txt", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Logs\\log-20260203.txt", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\log-20260203.txt", |
| | | "RelativeToolTip": "KH.WMS.Server\\Logs\\log-20260203.txt", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|", |
| | | "WhenOpened": "2026-02-03T03:30:40.49Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 35, |
| | | "Title": "log-20260202.txt", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\log-20260202.txt", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Logs\\log-20260202.txt", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\log-20260202.txt", |
| | | "RelativeToolTip": "KH.WMS.Server\\Logs\\log-20260202.txt", |
| | | "ViewState": "AgIAALkAAAAAAAAAAAAWwAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|", |
| | | "WhenOpened": "2026-02-02T07:07:26.104Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 36, |
| | | "Title": "error-20260202.txt", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\error-20260202.txt", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Logs\\error-20260202.txt", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\error-20260202.txt", |
| | | "RelativeToolTip": "KH.WMS.Server\\Logs\\error-20260202.txt", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|", |
| | | "WhenOpened": "2026-02-02T08:14:49.932Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 37, |
| | | "Title": "CachingInterceptor-20260202.txt", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\custom\\CachingInterceptor-20260202.txt", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Logs\\custom\\CachingInterceptor-20260202.txt", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Logs\\custom\\CachingInterceptor-20260202.txt", |
| | | "RelativeToolTip": "KH.WMS.Server\\Logs\\custom\\CachingInterceptor-20260202.txt", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003109|", |
| | | "WhenOpened": "2026-02-03T03:30:02.819Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 38, |
| | | "Title": "KH.WMS.Extensions.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Extensions\\KH.WMS.Extensions\\KH.WMS.Extensions.csproj", |
| | | "RelativeDocumentMoniker": "Extensions\\KH.WMS.Extensions\\KH.WMS.Extensions.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Extensions\\KH.WMS.Extensions\\KH.WMS.Extensions.csproj", |
| | | "RelativeToolTip": "Extensions\\KH.WMS.Extensions\\KH.WMS.Extensions.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAZAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-02-02T01:57:58.377Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 39, |
| | | "Title": "launchSettings.json", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Properties\\launchSettings.json", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\Properties\\launchSettings.json", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\Properties\\launchSettings.json", |
| | | "RelativeToolTip": "KH.WMS.Server\\Properties\\launchSettings.json", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAcAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", |
| | | "WhenOpened": "2026-01-30T08:44:08.796Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 40, |
| | | "Title": "LogLevelType.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\LogEnums\\LogLevelType.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\LogEnums\\LogLevelType.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\LogEnums\\LogLevelType.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\LogEnums\\LogLevelType.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAiAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-03T02:44:25.368Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 41, |
| | | "Title": "KH.WMS.Model.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Model\\KH.WMS.Model.csproj", |
| | | "RelativeDocumentMoniker": "KH.WMS.Model\\KH.WMS.Model.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Model\\KH.WMS.Model.csproj", |
| | | "RelativeToolTip": "KH.WMS.Model\\KH.WMS.Model.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAZAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-02-02T01:57:40.591Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 42, |
| | | "Title": "KH.WMS.Core.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\KH.WMS.Core.csproj", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\KH.WMS.Core.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\KH.WMS.Core.csproj", |
| | | "RelativeToolTip": "KH.WMS.Core\\KH.WMS.Core.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-01-30T09:13:04.723Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 43, |
| | | "Title": "LogModuleDetector.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\LogModuleDetector.cs", |
| | | "RelativeDocumentMoniker": "KH.WMS.Core\\Logging\\LogModuleDetector.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Core\\Logging\\LogModuleDetector.cs", |
| | | "RelativeToolTip": "KH.WMS.Core\\Logging\\LogModuleDetector.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAGwAAAAVAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-01-30T08:50:32.068Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 44, |
| | | "Title": "TestOneService.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Test\\KH.WMS.TestProj\\TestOneService.cs", |
| | | "RelativeDocumentMoniker": "Test\\KH.WMS.TestProj\\TestOneService.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Test\\KH.WMS.TestProj\\TestOneService.cs", |
| | | "RelativeToolTip": "Test\\KH.WMS.TestProj\\TestOneService.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T02:37:25.677Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 45, |
| | | "Title": "TestService.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Test\\KH.WMS.TestProj\\TestService.cs", |
| | | "RelativeDocumentMoniker": "Test\\KH.WMS.TestProj\\TestService.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Test\\KH.WMS.TestProj\\TestService.cs", |
| | | "RelativeToolTip": "Test\\KH.WMS.TestProj\\TestService.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T03:25:38.474Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 46, |
| | | "Title": "Program.cs", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Tools\\KH.WMS.Tools\\Program.cs", |
| | | "RelativeDocumentMoniker": "Tools\\KH.WMS.Tools\\Program.cs", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Tools\\KH.WMS.Tools\\Program.cs", |
| | | "RelativeToolTip": "Tools\\KH.WMS.Tools\\Program.cs", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2026-02-02T02:37:19.895Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 49, |
| | | "Title": "KH.WMS.TestProj.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj", |
| | | "RelativeDocumentMoniker": "Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj", |
| | | "RelativeToolTip": "Test\\KH.WMS.TestProj\\KH.WMS.TestProj.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAZAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-02-02T01:55:09.175Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 47, |
| | | "Title": "KH.WMS.Server.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\KH.WMS.Server.csproj", |
| | | "RelativeDocumentMoniker": "KH.WMS.Server\\KH.WMS.Server.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\KH.WMS.Server\\KH.WMS.Server.csproj", |
| | | "RelativeToolTip": "KH.WMS.Server\\KH.WMS.Server.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-02-02T01:57:16.348Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 48, |
| | | "Title": "KH.WMS.Common.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Common\\KH.WMS.Common\\KH.WMS.Common.csproj", |
| | | "RelativeDocumentMoniker": "Common\\KH.WMS.Common\\KH.WMS.Common.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Common\\KH.WMS.Common\\KH.WMS.Common.csproj", |
| | | "RelativeToolTip": "Common\\KH.WMS.Common\\KH.WMS.Common.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAZAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-02-02T01:58:02.392Z" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 50, |
| | | "Title": "KH.WMS.Tools.csproj", |
| | | "DocumentMoniker": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj", |
| | | "RelativeDocumentMoniker": "Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj", |
| | | "ToolTip": "E:\\4.\u91CD\u6784\\2026\u5E742\u67083\u65E5\\WMSrefactor\\KH.WMS\\Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj", |
| | | "RelativeToolTip": "Tools\\KH.WMS.Tools\\KH.WMS.Tools.csproj", |
| | | "ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAAZAAAAAAAAAA==", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", |
| | | "WhenOpened": "2026-02-02T01:57:48.749Z" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <Project Sdk="Microsoft.NET.Sdk"> |
| | | |
| | | <PropertyGroup> |
| | | <TargetFramework>net8.0</TargetFramework> |
| | | <ImplicitUsings>enable</ImplicitUsings> |
| | | <Nullable>enable</Nullable> |
| | | </PropertyGroup> |
| | | |
| | | </Project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <Project Sdk="Microsoft.NET.Sdk"> |
| | | |
| | | <PropertyGroup> |
| | | <TargetFramework>net8.0</TargetFramework> |
| | | <ImplicitUsings>enable</ImplicitUsings> |
| | | <Nullable>enable</Nullable> |
| | | </PropertyGroup> |
| | | |
| | | </Project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System.Reflection; |
| | | using Castle.DynamicProxy; |
| | | using KH.WMS.Core.Attributes; |
| | | using KH.WMS.Core.Logging; |
| | | using Microsoft.Extensions.Logging; |
| | | |
| | | namespace KH.WMS.Core.AOP; |
| | | |
| | | /// <summary> |
| | | /// æ¦æªå¨åºç±» |
| | | /// </summary> |
| | | public class LoggingInterceptor : IInterceptor |
| | | { |
| | | private readonly ILoggerService _logger; |
| | | |
| | | |
| | | public LoggingInterceptor(ILoggerService logger) |
| | | { |
| | | _logger = logger; |
| | | } |
| | | |
| | | public void Intercept(IInvocation invocation) |
| | | { |
| | | string methodName = $"{invocation.TargetType.Name}.{invocation.Method.Name}"; |
| | | MethodInfo method = invocation.Method; |
| | | |
| | | try |
| | | { |
| | | // 仿¹æ³ä¸è·åç¹æ§ |
| | | LogInterceptorAttribute? _attribute = invocation.MethodInvocationTarget.GetCustomAttributes(typeof(LogInterceptorAttribute), false) |
| | | .FirstOrDefault() as LogInterceptorAttribute; |
| | | |
| | | // å¦ææ¹æ³ä¸æ²¡æç¹æ§ï¼å°è¯ä»ç±»ä¸è·å |
| | | if (_attribute == null) |
| | | { |
| | | _attribute = invocation.TargetType.GetCustomAttributes(typeof(LogInterceptorAttribute), false) |
| | | .FirstOrDefault() as LogInterceptorAttribute; |
| | | } |
| | | if (_attribute == null) |
| | | return; |
| | | |
| | | // å¦ææ²¡æç¹æ§ï¼ä½¿ç¨é»è®¤å¼ |
| | | var logLevel = _attribute?.LogLevel ?? LogLevel.Information; |
| | | |
| | | _logger.LogInfo("[æ¹æ³å¼å§] -> {MethodName}", |
| | | methodName); |
| | | // æ§è¡æ¹æ³ |
| | | invocation.Proceed(); |
| | | |
| | | if (_attribute == null) |
| | | return; |
| | | |
| | | var message = $"[æ¹æ³ç»æ] <- {methodName}"; |
| | | |
| | | _logger.LogInfo(message); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // å¼å¸¸å¤ç |
| | | OnException(invocation, methodName, ex); |
| | | } |
| | | finally |
| | | { |
| | | // æ¸
çé»è¾ |
| | | OnFinally(invocation, methodName); |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¼å¸¸å¤ç |
| | | /// </summary> |
| | | protected void OnException(IInvocation invocation, string methodName, Exception ex) |
| | | { |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¸
çé»è¾ |
| | | /// </summary> |
| | | protected void OnFinally(IInvocation invocation, string methodName) |
| | | { |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.OpenApi; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using Microsoft.Extensions.Configuration; |
| | | using Microsoft.AspNetCore.Builder; |
| | | |
| | | namespace KH.WMS.Core.Api.Documentation.Swagger; |
| | | |
| | | /// <summary> |
| | | /// Swagger é
ç½® |
| | | /// </summary> |
| | | public static class SwaggerSetup |
| | | { |
| | | /// <summary> |
| | | /// æ·»å Swagger æå¡ |
| | | /// </summary> |
| | | public static IServiceCollection AddSwaggerDocumentation(this IServiceCollection services, IConfiguration configuration) |
| | | { |
| | | var swaggerOptions = configuration.GetSection("Swagger").Get<SwaggerOptions>(); |
| | | swaggerOptions ??= new SwaggerOptions(); |
| | | |
| | | services.AddSwaggerGen(options => |
| | | { |
| | | var info = new OpenApiInfo |
| | | { |
| | | Title = swaggerOptions.Title, |
| | | Version = swaggerOptions.Version, |
| | | Description = swaggerOptions.Description |
| | | }; |
| | | |
| | | // åªæå¨ URL ä¸ä¸ºç©ºæ¶æè®¾ç½® Contact |
| | | if (!string.IsNullOrWhiteSpace(swaggerOptions.ContactName) || |
| | | !string.IsNullOrWhiteSpace(swaggerOptions.ContactEmail) || |
| | | !string.IsNullOrWhiteSpace(swaggerOptions.ContactUrl)) |
| | | { |
| | | info.Contact = new OpenApiContact |
| | | { |
| | | Name = swaggerOptions.ContactName, |
| | | Email = swaggerOptions.ContactEmail |
| | | }; |
| | | if (!string.IsNullOrWhiteSpace(swaggerOptions.ContactUrl)) |
| | | { |
| | | info.Contact.Url = new Uri(swaggerOptions.ContactUrl); |
| | | } |
| | | } |
| | | |
| | | // åªæå¨ URL ä¸ä¸ºç©ºæ¶æè®¾ç½® License |
| | | if (!string.IsNullOrWhiteSpace(swaggerOptions.LicenseName) || |
| | | !string.IsNullOrWhiteSpace(swaggerOptions.LicenseUrl)) |
| | | { |
| | | info.License = new OpenApiLicense |
| | | { |
| | | Name = swaggerOptions.LicenseName |
| | | }; |
| | | if (!string.IsNullOrWhiteSpace(swaggerOptions.LicenseUrl)) |
| | | { |
| | | info.License.Url = new Uri(swaggerOptions.LicenseUrl); |
| | | } |
| | | } |
| | | |
| | | options.SwaggerDoc(swaggerOptions.Version, info); |
| | | |
| | | // æ·»å JWT è®¤è¯ |
| | | if (swaggerOptions.EnableJwt) |
| | | { |
| | | options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme |
| | | { |
| | | Description = "JWT ææä»¤çï¼è¯·å¨ä¸æ¹è¾å
¥æ¡ä¸è¾å
¥ Bearer {token}ï¼æ³¨æä¸¤è
ä¹é´æä¸ä¸ªç©ºæ ¼ï¼", |
| | | Name = "Authorization", |
| | | In = ParameterLocation.Header, |
| | | Type = SecuritySchemeType.ApiKey, |
| | | Scheme = "Bearer" |
| | | }); |
| | | |
| | | options.AddSecurityRequirement(document => new OpenApiSecurityRequirement |
| | | { |
| | | [new OpenApiSecuritySchemeReference("Bearer")] = new List<string>() |
| | | }); |
| | | } |
| | | |
| | | }); |
| | | |
| | | return services; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä½¿ç¨ Swagger ä¸é´ä»¶ |
| | | /// </summary> |
| | | public static IApplicationBuilder UseSwaggerDocumentation(this IApplicationBuilder app, IConfiguration configuration) |
| | | { |
| | | var swaggerOptions = configuration.GetSection("Swagger").Get<SwaggerOptions>(); |
| | | swaggerOptions ??= new SwaggerOptions(); |
| | | |
| | | app.UseSwagger(); |
| | | app.UseSwaggerUI(options => |
| | | { |
| | | options.SwaggerEndpoint($"/swagger/{swaggerOptions.Version}/swagger.json", $"{swaggerOptions.Title} {swaggerOptions.Version}"); |
| | | options.RoutePrefix = swaggerOptions.RoutePrefix; |
| | | options.DocumentTitle = swaggerOptions.Title; |
| | | options.DefaultModelsExpandDepth(-1); // éèæ¨¡å |
| | | }); |
| | | |
| | | return app; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// Swagger é
ç½®é项 |
| | | /// </summary> |
| | | public class SwaggerOptions |
| | | { |
| | | /// <summary> |
| | | /// æ é¢ |
| | | /// </summary> |
| | | public string Title { get; set; } = "API Documentation"; |
| | | |
| | | /// <summary> |
| | | /// çæ¬ |
| | | /// </summary> |
| | | public string Version { get; set; } = "v1"; |
| | | |
| | | /// <summary> |
| | | /// æè¿° |
| | | /// </summary> |
| | | public string Description { get; set; } = "API Documentation"; |
| | | |
| | | /// <summary> |
| | | /// è系人åç§° |
| | | /// </summary> |
| | | public string ContactName { get; set; } = ""; |
| | | |
| | | /// <summary> |
| | | /// è系人é®ç®± |
| | | /// </summary> |
| | | public string ContactEmail { get; set; } = ""; |
| | | |
| | | /// <summary> |
| | | /// è系人URL |
| | | /// </summary> |
| | | public string ContactUrl { get; set; } = ""; |
| | | |
| | | /// <summary> |
| | | /// 许å¯è¯åç§° |
| | | /// </summary> |
| | | public string LicenseName { get; set; } = ""; |
| | | |
| | | /// <summary> |
| | | /// 许å¯è¯URL |
| | | /// </summary> |
| | | public string LicenseUrl { get; set; } = ""; |
| | | |
| | | /// <summary> |
| | | /// è·¯ç±åç¼ |
| | | /// </summary> |
| | | public string RoutePrefix { get; set; } = "swagger"; |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦å¯ç¨ JWT è®¤è¯ |
| | | /// </summary> |
| | | public bool EnableJwt { get; set; } = true; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System.ComponentModel.DataAnnotations; |
| | | |
| | | namespace KH.WMS.Core.Api.Responses; |
| | | |
| | | /// <summary> |
| | | /// API ç»ä¸ååºæ ¼å¼ |
| | | /// </summary> |
| | | public class ApiResponse |
| | | { |
| | | /// <summary> |
| | | /// ååºç |
| | | /// </summary> |
| | | public string Code { get; set; } = "200"; |
| | | |
| | | /// <summary> |
| | | /// ååºæ¶æ¯ |
| | | /// </summary> |
| | | public string Message { get; set; } = "æä½æå"; |
| | | |
| | | /// <summary> |
| | | /// æ¶é´æ³ |
| | | /// </summary> |
| | | public long Timestamp { get; set; } = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); |
| | | |
| | | /// <summary> |
| | | /// ååºæ°æ® |
| | | /// </summary> |
| | | public object? Data { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 请æ±è·è¸ªID |
| | | /// </summary> |
| | | public string? TraceId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å建æåååº |
| | | /// </summary> |
| | | public static ApiResponse Ok(object? data = null, string message = "æä½æå") |
| | | { |
| | | return new ApiResponse |
| | | { |
| | | Code = "200", |
| | | Message = message, |
| | | Data = data |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å建失败ååº |
| | | /// </summary> |
| | | public static ApiResponse Fail(string code, string message) |
| | | { |
| | | return new ApiResponse |
| | | { |
| | | Code = code, |
| | | Message = message |
| | | }; |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// API æ³åååºæ ¼å¼ |
| | | /// </summary> |
| | | public class ApiResponse<T> : ApiResponse |
| | | { |
| | | /// <summary> |
| | | /// ååºæ°æ® |
| | | /// </summary> |
| | | public new T? Data { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å建æåååº |
| | | /// </summary> |
| | | public static ApiResponse<T> Ok(T? data, string message = "æä½æå") |
| | | { |
| | | return new ApiResponse<T> |
| | | { |
| | | Code = "200", |
| | | Message = message, |
| | | Data = data |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å建失败ååº |
| | | /// </summary> |
| | | public static new ApiResponse<T> Fail(string code, string message) |
| | | { |
| | | return new ApiResponse<T> |
| | | { |
| | | Code = code, |
| | | Message = message |
| | | }; |
| | | } |
| | | } |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System.ComponentModel.DataAnnotations; |
| | | |
| | | namespace KH.WMS.Core.Api.Responses; |
| | | |
| | | /// <summary> |
| | | /// å页请æ±åæ° |
| | | /// </summary> |
| | | public class Pagination |
| | | { |
| | | private int _pageIndex = 1; |
| | | private int _pageSize = 20; |
| | | |
| | | /// <summary> |
| | | /// 页ç ï¼ä»1å¼å§ï¼ |
| | | /// </summary> |
| | | [Range(1, int.MaxValue, ErrorMessage = "页ç å¿
须大äº0")] |
| | | public int PageIndex |
| | | { |
| | | get => _pageIndex; |
| | | set => _pageIndex = value < 1 ? 1 : value; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¯é¡µæ°é |
| | | /// </summary> |
| | | [Range(1, 100, ErrorMessage = "æ¯é¡µæ°éå¿
é¡»å¨1-100ä¹é´")] |
| | | public int PageSize |
| | | { |
| | | get => _pageSize; |
| | | set => _pageSize = value < 1 ? 20 : value > 100 ? 100 : value; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æåºå段 |
| | | /// </summary> |
| | | public string? SortField { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æåºæ¹åï¼asc/descï¼ |
| | | /// </summary> |
| | | public string SortDirection { get; set; } = "asc"; |
| | | |
| | | /// <summary> |
| | | /// 计ç®è·³è¿æ°é |
| | | /// </summary> |
| | | public int Skip => (PageIndex - 1) * PageSize; |
| | | |
| | | /// <summary> |
| | | /// è·åæ°é |
| | | /// </summary> |
| | | public int Take => PageSize; |
| | | |
| | | /// <summary> |
| | | /// å建å页忰 |
| | | /// </summary> |
| | | public static Pagination Create(int pageIndex = 1, int pageSize = 20, string? sortField = null, string sortDirection = "asc") |
| | | { |
| | | return new Pagination |
| | | { |
| | | PageIndex = pageIndex, |
| | | PageSize = pageSize, |
| | | SortField = sortField, |
| | | SortDirection = sortDirection |
| | | }; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// åé¡µç»æ |
| | | /// </summary> |
| | | public class PagedResult<T> |
| | | { |
| | | /// <summary> |
| | | /// æ°æ®å表 |
| | | /// </summary> |
| | | public List<T> Items { get; set; } = new(); |
| | | |
| | | /// <summary> |
| | | /// æ»è®°å½æ° |
| | | /// </summary> |
| | | public int Total { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å½å页ç |
| | | /// </summary> |
| | | public int PageIndex { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¯é¡µæ°é |
| | | /// </summary> |
| | | public int PageSize { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ»é¡µæ° |
| | | /// </summary> |
| | | public int PageCount => PageSize > 0 ? (int)Math.Ceiling((double)Total / PageSize) : 0; |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦æä¸ä¸é¡µ |
| | | /// </summary> |
| | | public bool HasPrevious => PageIndex > 1; |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦æä¸ä¸é¡µ |
| | | /// </summary> |
| | | public bool HasNext => PageIndex < PageCount; |
| | | |
| | | /// <summary> |
| | | /// å建åé¡µç»æ |
| | | /// </summary> |
| | | public static PagedResult<T> Create(List<T> items, int total, int pageIndex, int pageSize) |
| | | { |
| | | return new PagedResult<T> |
| | | { |
| | | Items = items, |
| | | Total = total, |
| | | PageIndex = pageIndex, |
| | | PageSize = pageSize |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å建空åé¡µç»æ |
| | | /// </summary> |
| | | public static PagedResult<T> Empty(int pageIndex = 1, int pageSize = 20) |
| | | { |
| | | return new PagedResult<T> |
| | | { |
| | | Items = new List<T>(), |
| | | Total = 0, |
| | | PageIndex = pageIndex, |
| | | PageSize = pageSize |
| | | }; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å页ååºå
è£
|
| | | /// </summary> |
| | | public class PagedResponse<T> : ApiResponse<PagedResult<T>> |
| | | { |
| | | /// <summary> |
| | | /// å建æåå页ååº |
| | | /// </summary> |
| | | public static PagedResponse<T> Ok(List<T> items, int total, int pageIndex, int pageSize, string message = "æ¥è¯¢æå") |
| | | { |
| | | return new PagedResponse<T> |
| | | { |
| | | Code = "200", |
| | | Message = message, |
| | | Data = PagedResult<T>.Create(items, total, pageIndex, pageSize) |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å建空å页ååº |
| | | /// </summary> |
| | | public static PagedResponse<T> Empty(int pageIndex = 1, int pageSize = 20, string message = "ææ æ°æ®") |
| | | { |
| | | return new PagedResponse<T> |
| | | { |
| | | Code = "200", |
| | | Message = message, |
| | | Data = PagedResult<T>.Empty(pageIndex, pageSize) |
| | | }; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Microsoft.Extensions.Logging; |
| | | |
| | | namespace KH.WMS.Core.Attributes |
| | | { |
| | | /// <summary> |
| | | /// æ¥å¿æ¦æªå¨ç¹æ§ |
| | | /// </summary> |
| | | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] |
| | | public class LogInterceptorAttribute : Attribute |
| | | { |
| | | /// <summary> |
| | | /// æ¯å¦è®°å½åæ° |
| | | /// </summary> |
| | | public bool LogParameters { get; set; } = true; |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦è®°å½è¿åå¼ |
| | | /// </summary> |
| | | public bool LogReturnValue { get; set; } = false; |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦è®°å½æ§è¡æ¶é´ |
| | | /// </summary> |
| | | public bool LogExecutionTime { get; set; } = true; |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿çº§å« |
| | | /// </summary> |
| | | public LogLevel LogLevel { get; set; } = LogLevel.Information; |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace KH.WMS.Core.Constants |
| | | { |
| | | public class AppSettingsConstants |
| | | { |
| | | /// <summary> |
| | | /// æ°æ®åºè¿æ¥å符串é
ç½®èç¹ |
| | | /// </summary> |
| | | public const string DbConnection = "DbConnection"; |
| | | |
| | | public const string DbType_MySql = "mysql"; |
| | | |
| | | public const string DbType_SqlServer = "sqlserver"; |
| | | |
| | | public const string DbType_PostgreSql = "postgresql"; |
| | | |
| | | public const string DbType_Oracle = "oracle"; |
| | | |
| | | public const string DbType_Sqlite = "sqlite"; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using KH.WMS.Core.Database.Repositories; |
| | | using SqlSugar; |
| | | |
| | | namespace KH.WMS.Core.Database; |
| | | |
| | | /// <summary> |
| | | /// æ°æ®åºä¸ä¸ææ¥å£ |
| | | /// </summary> |
| | | public interface IDbContext : IDisposable |
| | | { |
| | | /// <summary> |
| | | /// æ°æ®åºæä½å¯¹è±¡ |
| | | /// </summary> |
| | | ISqlSugarClient Db { get; } |
| | | |
| | | /// <summary> |
| | | /// å¼å§äºå¡ |
| | | /// </summary> |
| | | Task BeginTransactionAsync(System.Data.IsolationLevel isolationLevel = System.Data.IsolationLevel.ReadCommitted); |
| | | |
| | | /// <summary> |
| | | /// æäº¤äºå¡ |
| | | /// </summary> |
| | | Task CommitTransactionAsync(); |
| | | |
| | | /// <summary> |
| | | /// åæ»äºå¡ |
| | | /// </summary> |
| | | Task RollbackTransactionAsync(); |
| | | |
| | | /// <summary> |
| | | /// è·åå½åäºå¡éç¦»çº§å« |
| | | /// </summary> |
| | | System.Data.IsolationLevel? CurrentIsolationLevel { get; } |
| | | |
| | | /// <summary> |
| | | /// è·åä»å¨ |
| | | /// </summary> |
| | | IRepository<T, TKey> GetRepository<T, TKey>() |
| | | where T : class |
| | | where TKey : struct; |
| | | } |
| | | |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System.Linq.Expressions; |
| | | using SqlSugar; |
| | | |
| | | namespace KH.WMS.Core.Database.Repositories; |
| | | |
| | | /// <summary> |
| | | /// ä»å¨æ¥å£ |
| | | /// </summary> |
| | | /// <typeparam name="T">å®ä½ç±»å</typeparam> |
| | | public interface IRepository<T, TKey> |
| | | where T : class |
| | | where TKey : struct |
| | | { |
| | | /// <summary> |
| | | /// æ ¹æ®IDè·åå®ä½ |
| | | /// </summary> |
| | | Task<T?> GetByIdAsync(TKey id); |
| | | |
| | | /// <summary> |
| | | /// è·åææå®ä½ |
| | | /// </summary> |
| | | Task<List<T>> GetAllAsync(); |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®æ¡ä»¶æ¥è¯¢å®ä½ |
| | | /// </summary> |
| | | Task<List<T>> GetListAsync(Expression<Func<T, bool>> expression); |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®æ¡ä»¶æ¥è¯¢å个å®ä½ |
| | | /// </summary> |
| | | Task<T?> GetFirstOrDefaultAsync(Expression<Func<T, bool>> expression); |
| | | |
| | | /// <summary> |
| | | /// å页æ¥è¯¢ |
| | | /// </summary> |
| | | Task<(List<T> Items, int Total)> GetPagedListAsync(int pageIndex, int pageSize, Expression<Func<T, bool>>? expression = null); |
| | | |
| | | /// <summary> |
| | | /// æå
¥å®ä½ |
| | | /// </summary> |
| | | Task<TKey> InsertAsync(T entity); |
| | | |
| | | /// <summary> |
| | | /// æ¹éæå
¥å®ä½ |
| | | /// </summary> |
| | | Task<List<TKey>> InsertAsync(List<T> entities); |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="entity"></param> |
| | | /// <returns></returns> |
| | | Task<T> InsertReturnEntityAsync(T entity); |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="entities"></param> |
| | | /// <returns></returns> |
| | | Task<List<T>> InsertReturnEntityAsync(List<T> entities); |
| | | |
| | | /// <summary> |
| | | /// æ´æ°å®ä½ |
| | | /// </summary> |
| | | Task<bool> UpdateAsync(T entity); |
| | | |
| | | /// <summary> |
| | | /// æ¹éæ´æ°å®ä½ |
| | | /// </summary> |
| | | Task<bool> UpdateAsync(List<T> entities); |
| | | |
| | | /// <summary> |
| | | /// å é¤å®ä½ |
| | | /// </summary> |
| | | Task<bool> DeleteAsync(TKey id); |
| | | |
| | | /// <summary> |
| | | /// æ¹éå é¤å®ä½ |
| | | /// </summary> |
| | | Task<bool> DeleteAsync(List<TKey> ids); |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®æ¡ä»¶å é¤å®ä½ |
| | | /// </summary> |
| | | Task<bool> DeleteAsync(Expression<Func<T, bool>> expression); |
| | | |
| | | /// <summary> |
| | | /// æ£æ¥å®ä½æ¯å¦åå¨ |
| | | /// </summary> |
| | | Task<bool> ExistsAsync(Expression<Func<T, bool>> expression); |
| | | |
| | | /// <summary> |
| | | /// è·åå®ä½æ°é |
| | | /// </summary> |
| | | Task<int> CountAsync(Expression<Func<T, bool>>? expression = null); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using SqlSugar; |
| | | using Microsoft.Extensions.Logging; |
| | | using KH.WMS.Core.DependencyInjection.ServiceLifetimes; |
| | | |
| | | namespace KH.WMS.Core.Database.Repositories; |
| | | |
| | | /// <summary> |
| | | /// ä»å¨åºç±»å®ç° |
| | | /// </summary> |
| | | /// <typeparam name="T">å®ä½ç±»å</typeparam> |
| | | public class RepositoryBase<T, TKey> : IRepository<T, TKey> |
| | | where T : class, new() |
| | | where TKey : struct |
| | | { |
| | | protected readonly ISqlSugarClient _db; |
| | | protected readonly ILogger? _logger; |
| | | |
| | | public RepositoryBase(ISqlSugarClient db, ILogger? logger = null) |
| | | { |
| | | _db = db; |
| | | _logger = logger; |
| | | } |
| | | |
| | | public async Task<T?> GetByIdAsync(TKey id) |
| | | { |
| | | return await _db.Queryable<T>().In(id).FirstAsync(); |
| | | } |
| | | |
| | | public async Task<List<T>> GetAllAsync() |
| | | { |
| | | return await _db.Queryable<T>().ToListAsync(); |
| | | } |
| | | |
| | | public async Task<List<T>> GetListAsync(System.Linq.Expressions.Expression<Func<T, bool>> expression) |
| | | { |
| | | return await _db.Queryable<T>().Where(expression).ToListAsync(); |
| | | } |
| | | |
| | | public async Task<T?> GetFirstOrDefaultAsync(System.Linq.Expressions.Expression<Func<T, bool>> expression) |
| | | { |
| | | return await _db.Queryable<T>().FirstAsync(expression); |
| | | } |
| | | |
| | | public async Task<(List<T> Items, int Total)> GetPagedListAsync(int pageIndex, int pageSize, System.Linq.Expressions.Expression<Func<T, bool>>? expression = null) |
| | | { |
| | | var query = _db.Queryable<T>(); |
| | | |
| | | if (expression != null) |
| | | { |
| | | query = query.Where(expression); |
| | | } |
| | | |
| | | var total = await query.CountAsync(); |
| | | var items = await query.ToPageListAsync(pageIndex, pageSize); |
| | | |
| | | return (items, total); |
| | | } |
| | | |
| | | public async Task<TKey> InsertAsync(T entity) |
| | | { |
| | | return (await _db.Insertable(entity).ExecuteReturnPkListAsync<TKey>()).First(); |
| | | } |
| | | |
| | | public async Task<List<TKey>> InsertAsync(List<T> entities) |
| | | { |
| | | return await _db.Insertable(entities).ExecuteReturnPkListAsync<TKey>(); |
| | | } |
| | | |
| | | public async Task<T> InsertReturnEntityAsync(T entity) |
| | | { |
| | | return await _db.Insertable(entity).ExecuteReturnEntityAsync(); |
| | | } |
| | | |
| | | public async Task<List<T>> InsertReturnEntityAsync(List<T> entities) |
| | | { |
| | | List<TKey> keys = await _db.Insertable(entities).ExecuteReturnPkListAsync<TKey>(); |
| | | return await _db.Queryable<T>().In(keys).ToListAsync(); |
| | | } |
| | | |
| | | public async Task<bool> UpdateAsync(T entity) |
| | | { |
| | | return await _db.Updateable(entity).ExecuteCommandAsync() > 0; |
| | | } |
| | | |
| | | public async Task<bool> UpdateAsync(List<T> entities) |
| | | { |
| | | return await _db.Updateable(entities).ExecuteCommandAsync() > 0; |
| | | } |
| | | |
| | | public async Task<bool> DeleteAsync(TKey id) |
| | | { |
| | | return await _db.Deleteable<T>().In(id).ExecuteCommandAsync() > 0; |
| | | } |
| | | |
| | | public async Task<bool> DeleteAsync(List<TKey> ids) |
| | | { |
| | | return await _db.Deleteable<T>().In(ids).ExecuteCommandAsync() > 0; |
| | | } |
| | | |
| | | public async Task<bool> DeleteAsync(System.Linq.Expressions.Expression<Func<T, bool>> expression) |
| | | { |
| | | return await _db.Deleteable<T>().Where(expression).ExecuteCommandAsync() > 0; |
| | | } |
| | | |
| | | public async Task<bool> ExistsAsync(System.Linq.Expressions.Expression<Func<T, bool>> expression) |
| | | { |
| | | return await _db.Queryable<T>().Where(expression).AnyAsync(); |
| | | } |
| | | |
| | | public async Task<int> CountAsync(System.Linq.Expressions.Expression<Func<T, bool>>? expression = null) |
| | | { |
| | | var query = _db.Queryable<T>(); |
| | | |
| | | if (expression != null) |
| | | { |
| | | query = query.Where(expression); |
| | | } |
| | | |
| | | return await query.CountAsync(); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using KH.WMS.Core.Database.Repositories; |
| | | using KH.WMS.Core.DependencyInjection.ServiceLifetimes; |
| | | using Microsoft.AspNetCore.DataProtection.KeyManagement; |
| | | using Microsoft.Extensions.Logging; |
| | | using Microsoft.Extensions.Options; |
| | | using SqlSugar; |
| | | |
| | | namespace KH.WMS.Core.Database.SqlSugar; |
| | | |
| | | /// <summary> |
| | | /// SQL Sugar æ°æ®åºä¸ä¸æï¼æ¯æäºå¡åµå¥ï¼ |
| | | /// </summary> |
| | | [RegisteredService(Lifetime = Microsoft.Extensions.DependencyInjection.ServiceLifetime.Scoped)] |
| | | public class SqlSugarDbContext : IDbContext |
| | | { |
| | | private readonly ISqlSugarClient _sqlSugarClient; |
| | | private readonly ILogger<SqlSugarDbContext> _logger; |
| | | private readonly DatabaseOptions _options; |
| | | |
| | | // äºå¡æ ï¼ç¨äºæ¯æåµå¥äºå¡ |
| | | private readonly Stack<TransactionScope> _transactionScopes = new(); |
| | | |
| | | public SqlSugarDbContext( |
| | | ISqlSugarClient sqlSugarClient, |
| | | ILogger<SqlSugarDbContext> logger, |
| | | IOptions<DatabaseOptions> options) |
| | | { |
| | | _sqlSugarClient = sqlSugarClient; |
| | | _logger = logger; |
| | | _options = options.Value; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åå½åäºå¡éç¦»çº§å« |
| | | /// </summary> |
| | | public System.Data.IsolationLevel? CurrentIsolationLevel => |
| | | _transactionScopes.Count > 0 ? _transactionScopes.Peek().IsolationLevel : null; |
| | | |
| | | public ISqlSugarClient Db => _sqlSugarClient; |
| | | |
| | | public async Task BeginTransactionAsync(System.Data.IsolationLevel isolationLevel = System.Data.IsolationLevel.ReadCommitted) |
| | | { |
| | | await _sqlSugarClient.Ado.BeginTranAsync(isolationLevel); |
| | | } |
| | | |
| | | public async Task CommitTransactionAsync() |
| | | { |
| | | await _sqlSugarClient.Ado.CommitTranAsync(); |
| | | _logger.LogInformation("äºå¡å·²æäº¤"); |
| | | } |
| | | |
| | | public async Task RollbackTransactionAsync() |
| | | { |
| | | await _sqlSugarClient.Ado.RollbackTranAsync(); |
| | | _logger.LogInformation("äºå¡å·²åæ»"); |
| | | } |
| | | |
| | | public IRepository<T, TKey> GetRepository<T, TKey>() where T : class, new() where TKey : struct |
| | | { |
| | | return new RepositoryBase<T, TKey>(_sqlSugarClient, _logger); |
| | | } |
| | | |
| | | public void Dispose() |
| | | { |
| | | // å¦æææªæäº¤çäºå¡ï¼èªå¨åæ» |
| | | |
| | | _sqlSugarClient?.Ado.RollbackTran(); |
| | | |
| | | _sqlSugarClient?.Dispose(); |
| | | } |
| | | |
| | | IRepository<T, TKey> IDbContext.GetRepository<T, TKey>() |
| | | { |
| | | throw new NotImplementedException(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// äºå¡ä½ç¨å |
| | | /// </summary> |
| | | private class TransactionScope |
| | | { |
| | | public System.Data.IsolationLevel IsolationLevel { get; } |
| | | public bool IsCompleted { get; set; } |
| | | public bool RequiresRollback { get; set; } |
| | | |
| | | public TransactionScope(System.Data.IsolationLevel isolationLevel) |
| | | { |
| | | IsolationLevel = isolationLevel; |
| | | IsCompleted = false; |
| | | RequiresRollback = false; |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using KH.WMS.Core.Constants; |
| | | using KH.WMS.Core.Database.UnitOfWorks; |
| | | using Microsoft.Extensions.Configuration; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using Microsoft.Extensions.Logging; |
| | | using Microsoft.Extensions.Options; |
| | | using SqlSugar; |
| | | using StackExchange.Profiling; |
| | | |
| | | namespace KH.WMS.Core.Database.SqlSugar; |
| | | |
| | | /// <summary> |
| | | /// SQL Sugar é
ç½® |
| | | /// </summary> |
| | | public static class SqlSugarSetup |
| | | { |
| | | /// <summary> |
| | | /// æ·»å SQL Sugar æå¡ |
| | | /// </summary> |
| | | public static IServiceCollection AddSqlSugar(this IServiceCollection services, IConfiguration configuration) |
| | | { |
| | | services.Configure<DatabaseOptions>(configuration.GetSection(AppSettingsConstants.DbConnection)); |
| | | |
| | | Console.WriteLine("SqlSugar æ£å¨åå§åæ°æ®åºè¿æ¥..."); |
| | | |
| | | services.AddSingleton<ISqlSugarClient>(provider => |
| | | { |
| | | var options = provider.GetRequiredService<IOptions<DatabaseOptions>>().Value; |
| | | var logger = provider.GetService<ILogger<SqlSugarClient>>(); |
| | | |
| | | var config = new ConnectionConfig |
| | | { |
| | | ConnectionString = options.ConnectionString, |
| | | DbType = GetDbType(options.DbType), |
| | | IsAutoCloseConnection = true, |
| | | InitKeyType = InitKeyType.Attribute, |
| | | AopEvents = new AopEvents |
| | | { |
| | | OnLogExecuting = (sql, pars) => |
| | | { |
| | | var paramStr = string.Join(", ", pars.Select(p => $"{p.ParameterName}={p.Value}")); |
| | | Parallel.For(0, 1, e => |
| | | { |
| | | MiniProfiler.Current.CustomTiming("SQLï¼", paramStr + "ãSQLè¯å¥ãï¼" + sql); |
| | | }); |
| | | |
| | | // ä½¿ç¨ Verbose 级å«è®°å½æ¯ä¸è¡ SQL æ§è¡ |
| | | if (options.EnableSqlLog && logger != null) |
| | | { |
| | | logger.LogTrace("[SQLæ§è¡] {Sql} | åæ°: {Params}", sql, paramStr); |
| | | } |
| | | |
| | | // å¼åç¯å¢åæ¶è¾åºå°æ§å¶å° |
| | | if (options.EnableSqlLog) |
| | | { |
| | | Console.WriteLine($"SQL: {sql}\nPARAMS: {paramStr}"); |
| | | } |
| | | } |
| | | }, |
| | | }; |
| | | |
| | | // å¼åç¯å¢æå°SQL |
| | | if (options.EnableSqlLog) |
| | | { |
| | | config.ConfigureExternalServices = new ConfigureExternalServices |
| | | { |
| | | //SqlFuncServices = new SqlFuncExternalService(), |
| | | EntityService = null, |
| | | //DataInfoCacheService = |
| | | }; |
| | | } |
| | | |
| | | return new SqlSugarClient(config); |
| | | }); |
| | | |
| | | //services.AddScoped<IDbContext, SqlSugarDbContext>(); |
| | | //services.AddScoped<IUnitOfWork, UnitOfWork>(); |
| | | |
| | | return services; |
| | | } |
| | | |
| | | private static DbType GetDbType(string dbType) |
| | | { |
| | | return dbType.ToLower() switch |
| | | { |
| | | AppSettingsConstants.DbType_MySql => DbType.MySql, |
| | | AppSettingsConstants.DbType_SqlServer => DbType.SqlServer, |
| | | AppSettingsConstants.DbType_PostgreSql => DbType.PostgreSQL, |
| | | AppSettingsConstants.DbType_Oracle => DbType.Oracle, |
| | | AppSettingsConstants.DbType_Sqlite => DbType.Sqlite, |
| | | _ => DbType.SqlServer |
| | | }; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ°æ®åºé
ç½®é项 |
| | | /// </summary> |
| | | public class DatabaseOptions |
| | | { |
| | | /// <summary> |
| | | /// è¿æ¥å符串 |
| | | /// </summary> |
| | | public string ConnectionString { get; set; } = string.Empty; |
| | | |
| | | /// <summary> |
| | | /// æ°æ®åºç±»å |
| | | /// </summary> |
| | | public string DbType { get; set; } = AppSettingsConstants.DbType_SqlServer; |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦å¯ç¨SQLæ¥å¿ |
| | | /// </summary> |
| | | public bool EnableSqlLog { get; set; } = true; |
| | | |
| | | /// <summary> |
| | | /// å½ä»¤è¶
æ¶æ¶é´ï¼ç§ï¼ |
| | | /// </summary> |
| | | public int CommandTimeout { get; set; } = 30; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using KH.WMS.Core.Database.Repositories; |
| | | |
| | | namespace KH.WMS.Core.Database.UnitOfWorks |
| | | { |
| | | /// <summary> |
| | | /// å·¥ä½åå
æ¥å£ |
| | | /// </summary> |
| | | public interface IUnitOfWork : IDisposable |
| | | { |
| | | /// <summary> |
| | | /// å¼å§äºå¡ |
| | | /// </summary> |
| | | Task BeginTransactionAsync(System.Data.IsolationLevel isolationLevel = System.Data.IsolationLevel.ReadCommitted); |
| | | |
| | | /// <summary> |
| | | /// æäº¤äºå¡ |
| | | /// </summary> |
| | | Task CommitAsync(); |
| | | |
| | | /// <summary> |
| | | /// åæ»äºå¡ |
| | | /// </summary> |
| | | Task RollbackAsync(); |
| | | |
| | | /// <summary> |
| | | /// è·åæ°æ®åºä¸ä¸æ |
| | | /// </summary> |
| | | IDbContext DbContext { get; } |
| | | |
| | | /// <summary> |
| | | /// è·åä»å¨ |
| | | /// </summary> |
| | | IRepository<T, TKey> GetRepository<T, TKey>() where T : class where TKey : struct; |
| | | |
| | | /// <summary> |
| | | /// æ§è¡ SQL å½ä»¤ |
| | | /// </summary> |
| | | Task<int> ExecuteSqlAsync<TKey>(string sql, params object?[] parameters) where TKey : struct; |
| | | |
| | | /// <summary> |
| | | /// æ§è¡ SQL å½ä»¤ï¼è¿ååè¡¨ï¼ |
| | | /// </summary> |
| | | Task<List<T>> ExecuteSqlAsync<T, TKey>(string sql, params object?[] parameters) where T : class where TKey : struct; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | |
| | | using Microsoft.Extensions.Logging; |
| | | using KH.WMS.Core.Database.Repositories; |
| | | using KH.WMS.Core.DependencyInjection.ServiceLifetimes; |
| | | |
| | | namespace KH.WMS.Core.Database.UnitOfWorks; |
| | | |
| | | /// <summary> |
| | | /// å·¥ä½åå
å®ç°ï¼é¢åæ¥å£ï¼æ¯æäºå¡åµå¥ï¼ |
| | | /// </summary> |
| | | [RegisteredService(Lifetime = Microsoft.Extensions.DependencyInjection.ServiceLifetime.Scoped)] |
| | | public class UnitOfWork : IUnitOfWork |
| | | { |
| | | private readonly IDbContext _dbContext; |
| | | private readonly ILogger<UnitOfWork> _logger; |
| | | private bool _disposed; |
| | | |
| | | public UnitOfWork(IDbContext dbContext, ILogger<UnitOfWork> logger) |
| | | { |
| | | _dbContext = dbContext; |
| | | _logger = logger; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åæ°æ®åºä¸ä¸æ |
| | | /// </summary> |
| | | public IDbContext DbContext => _dbContext; |
| | | |
| | | /// <summary> |
| | | /// å¼å§äºå¡ |
| | | /// </summary> |
| | | public async Task BeginTransactionAsync(System.Data.IsolationLevel isolationLevel = System.Data.IsolationLevel.ReadCommitted) |
| | | { |
| | | await _dbContext.BeginTransactionAsync(isolationLevel); |
| | | _logger.LogDebug("å·¥ä½åå
äºå¡å·²å¼å¯"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æäº¤äºå¡ |
| | | /// </summary> |
| | | public async Task CommitAsync() |
| | | { |
| | | await _dbContext.CommitTransactionAsync(); |
| | | _logger.LogDebug("å·¥ä½åå
äºå¡å·²æäº¤"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// åæ»äºå¡ |
| | | /// </summary> |
| | | public async Task RollbackAsync() |
| | | { |
| | | await _dbContext.RollbackTransactionAsync(); |
| | | _logger.LogDebug("å·¥ä½åå
äºå¡å·²åæ»"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åä»å¨ |
| | | /// </summary> |
| | | public IRepository<T, TKey> GetRepository<T, TKey>() where T : class where TKey : struct |
| | | { |
| | | return _dbContext.GetRepository<T, TKey>(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ§è¡ SQL å½ä»¤ |
| | | /// </summary> |
| | | public async Task<int> ExecuteSqlAsync<TKey>(string sql, params object?[] parameters) where TKey : struct |
| | | { |
| | | var repository = GetRepository<dynamic, TKey>(); |
| | | // ä½¿ç¨ Ado æ§è¡å½ä»¤ |
| | | // è¿ééè¦æ ¹æ®å®é
ç ISqlSugarClient å®ç°æ¥æ§è¡ SQL |
| | | return await Task.FromResult(0); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ§è¡ SQL å½ä»¤ï¼è¿ååè¡¨ï¼ |
| | | /// </summary> |
| | | public async Task<List<T>> ExecuteSqlAsync<T, TKey>(string sql, params object?[] parameters) where T : class where TKey : struct |
| | | { |
| | | var repository = GetRepository<T, TKey>(); |
| | | // ä½¿ç¨ Ado æ§è¡æ¥è¯¢ |
| | | // è¿ééè¦æ ¹æ®å®é
ç ISqlSugarClient å®ç°æ¥æ§è¡ SQL |
| | | return await Task.FromResult(new List<T>()); |
| | | } |
| | | |
| | | public void Dispose() |
| | | { |
| | | if (!_disposed) |
| | | { |
| | | _dbContext?.Dispose(); |
| | | _disposed = true; |
| | | } |
| | | } |
| | | |
| | | IRepository<T, TKey> IUnitOfWork.GetRepository<T, TKey>() where T : class where TKey : struct |
| | | { |
| | | return _dbContext.GetRepository<T, TKey>(); |
| | | } |
| | | } |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | |
| | | namespace KH.WMS.Core.Database.UnitOfWorks; |
| | | |
| | | /// <summary> |
| | | /// UnitOfWork æ©å±æ¹æ³ |
| | | /// </summary> |
| | | public static class UnitOfWorkExtensions |
| | | { |
| | | /// <summary> |
| | | /// å建äºå¡ä½ç¨åï¼èªå¨ç®¡çäºå¡çå½å¨æ |
| | | /// </summary> |
| | | /// <param name="unitOfWork">å·¥ä½åå
</param> |
| | | /// <param name="logger">æ¥å¿è®°å½å¨</param> |
| | | /// <param name="isolationLevel">äºå¡é离级å«</param> |
| | | /// <returns>äºå¡ä½ç¨å</returns> |
| | | public static async Task<ITransactionScope> BeginTransactionScopeAsync( |
| | | this IUnitOfWork unitOfWork, |
| | | ILogger logger, |
| | | System.Data.IsolationLevel isolationLevel = System.Data.IsolationLevel.ReadCommitted) |
| | | { |
| | | await unitOfWork.BeginTransactionAsync(isolationLevel); |
| | | return new TransactionScopeWrapper(unitOfWork, logger); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¨äºå¡ä½ç¨å䏿§è¡æä½ |
| | | /// </summary> |
| | | /// <param name="unitOfWork">å·¥ä½åå
</param> |
| | | /// <param name="logger">æ¥å¿è®°å½å¨</param> |
| | | /// <param name="action">è¦æ§è¡çæä½</param> |
| | | /// <param name="isolationLevel">äºå¡é离级å«</param> |
| | | public static async Task ExecuteInTransactionAsync( |
| | | this IUnitOfWork unitOfWork, |
| | | ILogger logger, |
| | | Func<Task> action, |
| | | System.Data.IsolationLevel isolationLevel = System.Data.IsolationLevel.ReadCommitted) |
| | | { |
| | | await using var scope = await unitOfWork.BeginTransactionScopeAsync(logger, isolationLevel); |
| | | try |
| | | { |
| | | await action(); |
| | | await scope.CommitAsync(); |
| | | } |
| | | catch |
| | | { |
| | | await scope.RollbackAsync(); |
| | | throw; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¨äºå¡ä½ç¨å䏿§è¡æä½ï¼å¸¦è¿åå¼ï¼ |
| | | /// </summary> |
| | | /// <typeparam name="T">è¿åå¼ç±»å</typeparam> |
| | | /// <param name="unitOfWork">å·¥ä½åå
</param> |
| | | /// <param name="logger">æ¥å¿è®°å½å¨</param> |
| | | /// <param name="action">è¦æ§è¡çæä½</param> |
| | | /// <param name="isolationLevel">äºå¡é离级å«</param> |
| | | /// <returns>æä½ç»æ</returns> |
| | | public static async Task<T> ExecuteInTransactionAsync<T>( |
| | | this IUnitOfWork unitOfWork, |
| | | ILogger logger, |
| | | Func<Task<T>> action, |
| | | System.Data.IsolationLevel isolationLevel = System.Data.IsolationLevel.ReadCommitted) |
| | | { |
| | | await using var scope = await unitOfWork.BeginTransactionScopeAsync(logger, isolationLevel); |
| | | try |
| | | { |
| | | var result = await action(); |
| | | await scope.CommitAsync(); |
| | | return result; |
| | | } |
| | | catch |
| | | { |
| | | await scope.RollbackAsync(); |
| | | throw; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// äºå¡ä½ç¨åæ¥å£ |
| | | /// </summary> |
| | | public interface ITransactionScope : IAsyncDisposable |
| | | { |
| | | /// <summary> |
| | | /// æäº¤äºå¡ |
| | | /// </summary> |
| | | Task CommitAsync(); |
| | | |
| | | /// <summary> |
| | | /// åæ»äºå¡ |
| | | /// </summary> |
| | | Task RollbackAsync(); |
| | | |
| | | /// <summary> |
| | | /// äºå¡æ¯å¦å·²æäº¤ |
| | | /// </summary> |
| | | bool IsCommitted { get; } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// äºå¡ä½ç¨åå
è£
å¨ |
| | | /// </summary> |
| | | public class TransactionScopeWrapper : ITransactionScope |
| | | { |
| | | private readonly IUnitOfWork _unitOfWork; |
| | | private readonly ILogger _logger; |
| | | private bool _disposed; |
| | | private bool _committed; |
| | | |
| | | public TransactionScopeWrapper(IUnitOfWork unitOfWork, ILogger logger) |
| | | { |
| | | _unitOfWork = unitOfWork; |
| | | _logger = logger; |
| | | } |
| | | |
| | | public bool IsCommitted => _committed; |
| | | |
| | | public async Task CommitAsync() |
| | | { |
| | | if (!_committed) |
| | | { |
| | | await _unitOfWork.CommitAsync(); |
| | | _committed = true; |
| | | _logger.LogDebug("äºå¡ä½ç¨åå·²æäº¤"); |
| | | } |
| | | } |
| | | |
| | | public async Task RollbackAsync() |
| | | { |
| | | if (!_committed) |
| | | { |
| | | await _unitOfWork.RollbackAsync(); |
| | | _committed = true; |
| | | _logger.LogDebug("äºå¡ä½ç¨å已忻"); |
| | | } |
| | | } |
| | | |
| | | public async ValueTask DisposeAsync() |
| | | { |
| | | if (!_disposed) |
| | | { |
| | | if (!_committed) |
| | | { |
| | | _logger.LogWarning("äºå¡ä½ç¨åéæ¾æ¶æªæäº¤ï¼èªå¨åæ»"); |
| | | try |
| | | { |
| | | await _unitOfWork.RollbackAsync(); |
| | | } |
| | | catch |
| | | { |
| | | // å¿½ç¥ dispose æ¶çå¼å¸¸ |
| | | } |
| | | } |
| | | _disposed = true; |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Autofac; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | |
| | | namespace KH.WMS.Core.DependencyInjection; |
| | | |
| | | /// <summary> |
| | | /// æå¡æ³¨å卿¥å£ |
| | | /// </summary> |
| | | public interface IServiceRegistrar |
| | | { |
| | | /// <summary> |
| | | /// 注åæå¡ |
| | | /// </summary> |
| | | void Register(ContainerBuilder builder, params System.Reflection.Assembly[] assemblies); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System.Reflection; |
| | | using Autofac; |
| | | using Autofac.Core; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using Microsoft.Extensions.DependencyModel; |
| | | |
| | | namespace KH.WMS.Core.DependencyInjection; |
| | | |
| | | /// <summary> |
| | | /// æå¡é忩屿¹æ³ |
| | | /// </summary> |
| | | public class ServiceExtensions : Autofac.Module |
| | | { |
| | | protected override void Load(ContainerBuilder builder) |
| | | { |
| | | List<Assembly> assemblies = GetReferencedAssemblies(); |
| | | |
| | | IServiceRegistrar registrar = new ServiceRegistrar(); |
| | | registrar.Register(builder, assemblies.ToArray()); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·å项ç®å
çç¨åºé |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | private List<Assembly> GetReferencedAssemblies() |
| | | { |
| | | List<Assembly> assemblies = new(); |
| | | string basePath = AppContext.BaseDirectory; |
| | | try |
| | | { |
| | | List<RuntimeLibrary> compilationLibraries = DependencyContext.Default.RuntimeLibraries.Where(x => x.Name.StartsWith("KH.WMS")).ToList(); |
| | | foreach (var library in compilationLibraries) |
| | | { |
| | | try |
| | | { |
| | | string path = Path.Combine(basePath, $"{library.Name}.dll"); |
| | | if (!File.Exists(path)) |
| | | { |
| | | continue; |
| | | } |
| | | assemblies.Add(Assembly.LoadFrom(path)); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine(library.Name + ex.Message); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine($"é误: è·åç¨åºé失败: {ex.Message}"); |
| | | } |
| | | |
| | | return assemblies; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | |
| | | namespace KH.WMS.Core.DependencyInjection.ServiceLifetimes |
| | | { |
| | | /// <summary> |
| | | /// èªæ³¨åæå¡æ è®° - ç¨äºæ è®°éè¦èªå¨æ³¨åå°ä¾èµæ³¨å
¥å®¹å¨çæå¡ |
| | | /// </summary> |
| | | [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] |
| | | public class RegisteredServiceAttribute : Attribute |
| | | { |
| | | /// <summary> |
| | | /// æå¡çå½å¨æ |
| | | /// </summary> |
| | | public ServiceLifetime Lifetime { get; set; } = ServiceLifetime.Scoped; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | |
| | | namespace KH.WMS.Core.DependencyInjection.ServiceLifetimes; |
| | | |
| | | /// <summary> |
| | | /// èªæ³¨åæå¡æ è®° - æå¡èªèº«ä½ä¸ºå®ç°ç±»å |
| | | /// </summary> |
| | | [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] |
| | | public class SelfRegisteredServiceAttribute : Attribute |
| | | { |
| | | /// <summary> |
| | | /// æå¡çå½å¨æ |
| | | /// </summary> |
| | | public ServiceLifetime Lifetime { get; set; } = ServiceLifetime.Scoped; |
| | | } |
| | | |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System.Reflection; |
| | | using Autofac; |
| | | using Autofac.Extras.DynamicProxy; |
| | | using Castle.DynamicProxy; |
| | | using KH.WMS.Core.AOP; |
| | | using KH.WMS.Core.DependencyInjection.ServiceLifetimes; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using Microsoft.Extensions.Logging; |
| | | |
| | | namespace KH.WMS.Core.DependencyInjection; |
| | | |
| | | /// <summary> |
| | | /// èªå¨æå¡æ³¨åå¨ |
| | | /// </summary> |
| | | public class ServiceRegistrar : IServiceRegistrar |
| | | { |
| | | public void Register(ContainerBuilder builder, params Assembly[] assemblies) |
| | | { |
| | | // å¦ææ²¡æä¼ å
¥ç¨åºéï¼ä½¿ç¨è°ç¨ç¨åºé |
| | | if (assemblies == null || assemblies.Length == 0) |
| | | { |
| | | assemblies = new[] { Assembly.GetCallingAssembly() }; |
| | | } |
| | | |
| | | // æ³¨åææå¸¦çå½å¨ææ è®°çæå¡ |
| | | RegisterServicesWithLifetime(builder, assemblies); |
| | | |
| | | Console.WriteLine("æå¡æ³¨å宿"); |
| | | } |
| | | |
| | | private Type[] interceptors = new Type[] |
| | | { |
| | | typeof(LoggingInterceptor), |
| | | }; |
| | | |
| | | private void RegisterServicesWithLifetime(ContainerBuilder builder, Assembly[] assemblies) |
| | | { |
| | | var serviceTypes = new[] |
| | | { |
| | | typeof(RegisteredServiceAttribute), |
| | | typeof(SelfRegisteredServiceAttribute) |
| | | }; |
| | | |
| | | builder.RegisterType<LoggingInterceptor>(); |
| | | |
| | | foreach (var assembly in assemblies) |
| | | { |
| | | var types = assembly.GetTypes() |
| | | .Where(t => t.IsClass && !t.IsAbstract && !t.IsInterface) |
| | | .SelectMany(t => t.GetCustomAttributes(), (t, attr) => new { Type = t, Attribute = attr }) |
| | | .Where(x => serviceTypes.Contains(x.Attribute.GetType())); |
| | | |
| | | foreach (var item in types) |
| | | { |
| | | if (item.Type.Name.Contains("LoggerService")) |
| | | { |
| | | RegisterServiceWithoutInterceptor(builder, item.Type, item.Attribute, assemblies); |
| | | continue; |
| | | } |
| | | |
| | | var interfaces = item.Type.GetInterfaces(); |
| | | var serviceType = interfaces.FirstOrDefault() ?? item.Type; |
| | | |
| | | if (item.Attribute is RegisteredServiceAttribute registeredAttr) |
| | | { |
| | | if (serviceType == item.Type) |
| | | { |
| | | Console.WriteLine($"ç±»å {item.Type.Name} æ 记为 RegisteredServiceAttributeï¼ä½æªå®ç°ä»»ä½æ¥å£ï¼å»ºè®®ä½¿ç¨ SelfRegisteredServiceAttribute è¿è¡èªæ³¨åã"); |
| | | Console.WriteLine($"ç»§ç»æ³¨å {item.Type.Name} ä¸ºèªæ³¨åæå¡ã"); |
| | | |
| | | RegisterSelfService(builder, item.Type, registeredAttr.Lifetime); |
| | | continue; |
| | | } |
| | | |
| | | RegisterService(builder, serviceType, item.Type, registeredAttr.Lifetime); |
| | | } |
| | | else if (item.Attribute is SelfRegisteredServiceAttribute selfRegisteredAttr) |
| | | { |
| | | RegisterSelfService(builder, item.Type, selfRegisteredAttr.Lifetime); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 注åæå¡ä½ä¸æ·»å æ¦æªå¨ï¼ç¨äº LoggerService çåºç¡æå¡ï¼ |
| | | /// </summary> |
| | | private void RegisterServiceWithoutInterceptor(ContainerBuilder builder, Type implementationType, Attribute attribute, Assembly[] assemblies) |
| | | { |
| | | if (attribute is RegisteredServiceAttribute registeredAttr) |
| | | { |
| | | var interfaces = implementationType.GetInterfaces(); |
| | | var serviceType = interfaces.FirstOrDefault() ?? implementationType; |
| | | |
| | | switch (registeredAttr.Lifetime) |
| | | { |
| | | case ServiceLifetime.Singleton: |
| | | builder.RegisterType(implementationType).As(serviceType).SingleInstance(); |
| | | Console.WriteLine($"注å Singleton æå¡ï¼æ æ¦æªå¨ï¼: {serviceType.Name}"); |
| | | break; |
| | | case ServiceLifetime.Scoped: |
| | | builder.RegisterType(implementationType).As(serviceType).InstancePerLifetimeScope(); |
| | | Console.WriteLine($"注å Scoped æå¡ï¼æ æ¦æªå¨ï¼: {serviceType.Name}"); |
| | | break; |
| | | case ServiceLifetime.Transient: |
| | | builder.RegisterType(implementationType).As(serviceType).InstancePerDependency(); |
| | | Console.WriteLine($"注å Transient æå¡ï¼æ æ¦æªå¨ï¼: {serviceType.Name}"); |
| | | break; |
| | | } |
| | | } |
| | | else if (attribute is SelfRegisteredServiceAttribute selfRegisteredAttr) |
| | | { |
| | | switch (selfRegisteredAttr.Lifetime) |
| | | { |
| | | case ServiceLifetime.Singleton: |
| | | builder.RegisterType(implementationType).SingleInstance(); |
| | | Console.WriteLine($"注åèªæ³¨å Singleton æå¡ï¼æ æ¦æªå¨ï¼: {implementationType.Name}"); |
| | | break; |
| | | case ServiceLifetime.Scoped: |
| | | builder.RegisterType(implementationType).InstancePerLifetimeScope(); |
| | | Console.WriteLine($"注åèªæ³¨å Scoped æå¡ï¼æ æ¦æªå¨ï¼: {implementationType.Name}"); |
| | | break; |
| | | case ServiceLifetime.Transient: |
| | | builder.RegisterType(implementationType).InstancePerDependency(); |
| | | Console.WriteLine($"注åèªæ³¨å Transient æå¡ï¼æ æ¦æªå¨ï¼: {implementationType.Name}"); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void RegisterService(ContainerBuilder builder, Type serviceType, Type implementationType, ServiceLifetime lifetime) |
| | | { |
| | | switch (lifetime) |
| | | { |
| | | case ServiceLifetime.Singleton: |
| | | builder.RegisterType(implementationType).As(serviceType).SingleInstance().EnableInterfaceInterceptors().InterceptedBy(interceptors); |
| | | Console.WriteLine($"注å Singleton æå¡: {serviceType.Name}"); |
| | | break; |
| | | case ServiceLifetime.Scoped: |
| | | builder.RegisterType(implementationType).As(serviceType).InstancePerLifetimeScope().EnableInterfaceInterceptors().InterceptedBy(interceptors); |
| | | Console.WriteLine($"注å Scoped æå¡: {serviceType.Name}"); |
| | | break; |
| | | case ServiceLifetime.Transient: |
| | | builder.RegisterType(implementationType).As(serviceType).InstancePerDependency().EnableInterfaceInterceptors().InterceptedBy(interceptors); |
| | | Console.WriteLine($"注å Transient æå¡: {serviceType.Name}"); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | private void RegisterSelfService(ContainerBuilder builder, Type implementationType, ServiceLifetime lifetime) |
| | | { |
| | | switch (lifetime) |
| | | { |
| | | case ServiceLifetime.Singleton: |
| | | builder.RegisterType(implementationType).SingleInstance().EnableClassInterceptors().InterceptedBy(interceptors); |
| | | Console.WriteLine($"注åèªæ³¨å Singleton æå¡: {implementationType.Name}"); |
| | | break; |
| | | case ServiceLifetime.Scoped: |
| | | builder.RegisterType(implementationType).InstancePerLifetimeScope().EnableClassInterceptors().InterceptedBy(interceptors); |
| | | Console.WriteLine($"注åèªæ³¨å Scoped æå¡: {implementationType.Name}"); |
| | | break; |
| | | case ServiceLifetime.Transient: |
| | | builder.RegisterType(implementationType).InstancePerDependency().EnableClassInterceptors().InterceptedBy(interceptors); |
| | | Console.WriteLine($"注åèªæ³¨å Transient æå¡: {implementationType.Name}"); |
| | | break; |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <Project Sdk="Microsoft.NET.Sdk"> |
| | | |
| | | <PropertyGroup> |
| | | <TargetFramework>net8.0</TargetFramework> |
| | | <ImplicitUsings>enable</ImplicitUsings> |
| | | <Nullable>enable</Nullable> |
| | | </PropertyGroup> |
| | | <ItemGroup> |
| | | <PackageReference Include="AutoMapper" Version="16.0.0" /> |
| | | <PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.5.4" /> |
| | | <PackageReference Include="Serilog.AspNetCore" Version="10.0.0" /> |
| | | <PackageReference Include="Serilog.Sinks.File" Version="7.0.0" /> |
| | | <PackageReference Include="Serilog.Sinks.Map" Version="2.0.0" /> |
| | | <PackageReference Include="Serilog.Sinks.Seq" Version="9.0.0" /> |
| | | <PackageReference Include="Serilog.Enrichers.CorrelationId" Version="3.0.1" /> |
| | | <PackageReference Include="Autofac" Version="9.0.0" /> |
| | | <PackageReference Include="SqlSugarCore" Version="5.1.4.211" /> |
| | | <PackageReference Include="Autofac.Extras.DynamicProxy" Version="7.1.0" /> |
| | | <PackageReference Include="Castle.Core.AsyncInterceptor" Version="2.1.0" /> |
| | | <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" /> |
| | | <PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.1" /> |
| | | <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.29" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <Folder Include="Authentication\" /> |
| | | <Folder Include="Caching\" /> |
| | | <Folder Include="Configuration\" /> |
| | | <Folder Include="Extensions\" /> |
| | | <Folder Include="Filters\" /> |
| | | <Folder Include="Middlewares\" /> |
| | | <Folder Include="Models\" /> |
| | | <Folder Include="Helpers\" /> |
| | | <Folder Include="Security\" /> |
| | | <Folder Include="Serialization\" /> |
| | | <Folder Include="Services\" /> |
| | | </ItemGroup> |
| | | |
| | | </Project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System.Runtime.CompilerServices; |
| | | using Microsoft.Extensions.Logging; |
| | | |
| | | namespace KH.WMS.Core.Logging; |
| | | |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿æå¡æ¥å£ï¼èªå¨è¯å«æ¨¡åï¼ |
| | | /// </summary> |
| | | public interface ILoggerService |
| | | { |
| | | /// <summary> |
| | | /// è®°å½è¯¦ç»è·è¸ªæ¥å¿ - æ¯ä¸è¡SQLæ§è¡ãè¯¦ç»æµç¨è·è¸ª |
| | | /// </summary> |
| | | void LogVerbose(string message, params object?[] args); |
| | | |
| | | /// <summary> |
| | | /// è®°å½è°è¯æ¥å¿ - æ¹æ³åæ°ãä¸é´åé |
| | | /// </summary> |
| | | void LogDebug(string message, params object?[] args); |
| | | |
| | | /// <summary> |
| | | /// è®°å½ä¿¡æ¯æ¥å¿ - ç¨æ·ç»å½ãåæ®å建 |
| | | /// </summary> |
| | | void LogInfo(string message, params object?[] args); |
| | | |
| | | /// <summary> |
| | | /// è®°å½è¦åæ¥å¿ - APIè°ç¨æ
¢ãç¼åæªå½ä¸ï¼éå
³æ³¨ |
| | | /// </summary> |
| | | void LogWarning(string message, params object?[] args); |
| | | |
| | | /// <summary> |
| | | /// è®°å½é误æ¥å¿ - HTTP 500ãä¸å¡å¼å¸¸ï¼ä½ç³»ç»å¯ç»§ç» |
| | | /// </summary> |
| | | void LogError(string message, params object?[] args); |
| | | |
| | | /// <summary> |
| | | /// è®°å½é误æ¥å¿ï¼å¸¦å¼å¸¸ï¼- HTTP 500ãä¸å¡å¼å¸¸ï¼ä½ç³»ç»å¯ç»§ç» |
| | | /// </summary> |
| | | void LogError(Exception exception, string message, params object?[] args); |
| | | |
| | | /// <summary> |
| | | /// è®°å½è´å½é误æ¥å¿ - æ°æ®åºè¿æ¥å¤±è´¥ãç£ç满ï¼ç³»ç»æ æ³ç»§ç» |
| | | /// </summary> |
| | | void LogFatal(string message, params object?[] args); |
| | | |
| | | /// <summary> |
| | | /// è®°å½è´å½é误æ¥å¿ï¼å¸¦å¼å¸¸ï¼- æ°æ®åºè¿æ¥å¤±è´¥ãç£ç满ï¼ç³»ç»æ æ³ç»§ç» |
| | | /// </summary> |
| | | void LogFatal(Exception exception, string message, params object?[] args); |
| | | |
| | | /// <summary> |
| | | /// è®°å½æä½æ¥å¿ |
| | | /// </summary> |
| | | void LogOperation(string operation, string? userName = null, long? userId = null, object? data = null); |
| | | |
| | | /// <summary> |
| | | /// è®°å½ä¸å¡æ¥å¿ |
| | | /// </summary> |
| | | void LogBusiness(string businessType, string message, object? data = null); |
| | | |
| | | /// <summary> |
| | | /// è®°å½æ§è½æ¥å¿ |
| | | /// </summary> |
| | | void LogPerformance(string operation, long elapsedMs, object? data = null); |
| | | |
| | | /// <summary> |
| | | /// 使ç¨ä¸ä¸æè®°å½æ¥å¿ï¼å¯æå¨æå®æ¨¡åï¼ |
| | | /// </summary> |
| | | void Log(LogContext context, string message, params object?[] args); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using KH.WMS.Core.Logging.LogEnums; |
| | | |
| | | namespace KH.WMS.Core.Logging |
| | | { |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿ä¸ä¸æ |
| | | /// </summary> |
| | | public class LogContext |
| | | { |
| | | /// <summary> |
| | | /// æ¥å¿çº§å« |
| | | /// </summary> |
| | | public LogLevelType Level { get; set; } = LogLevelType.Information; |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿æ¨¡å |
| | | /// </summary> |
| | | public LogModule Module { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿ç±»å |
| | | /// </summary> |
| | | public LogType Type { get; set; } = LogType.System; |
| | | |
| | | /// <summary> |
| | | /// ç¨æ·ID |
| | | /// </summary> |
| | | public long? UserId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç¨æ·å |
| | | /// </summary> |
| | | public string? UserName { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ç§æ·ID |
| | | /// </summary> |
| | | public long? TenantId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 请æ±ID |
| | | /// </summary> |
| | | public string? RequestId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å
³èID |
| | | /// </summary> |
| | | public string? CorrelationId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 客æ·ç«¯IP |
| | | /// </summary> |
| | | public string? ClientIp { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æä½ç±»å |
| | | /// </summary> |
| | | public string? Operation { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ä¸å¡æ°æ® |
| | | /// </summary> |
| | | public Dictionary<string, object?> Data { get; set; } = new(); |
| | | |
| | | /// <summary> |
| | | /// æ©å±å±æ§ |
| | | /// </summary> |
| | | public Dictionary<string, object?> Properties { get; set; } = new(); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace KH.WMS.Core.Logging.LogEnums |
| | | { |
| | | /// <summary> |
| | | /// æ¥å¿çº§å«æä¸¾ |
| | | /// </summary> |
| | | public enum LogLevelType |
| | | { |
| | | /// <summary> |
| | | /// 详ç»è·è¸ª - æ¯ä¸è¡SQLæ§è¡ãè¯¦ç»æµç¨è·è¸ª |
| | | /// </summary> |
| | | Verbose = 0, |
| | | |
| | | /// <summary> |
| | | /// è°è¯ä¿¡æ¯ - æ¹æ³åæ°ãä¸é´åé |
| | | /// </summary> |
| | | Debug = 1, |
| | | |
| | | /// <summary> |
| | | /// ä¸è¬ä¿¡æ¯ - ç¨æ·ç»å½ãåæ®å建 |
| | | /// </summary> |
| | | Information = 2, |
| | | |
| | | /// <summary> |
| | | /// è¦å - APIè°ç¨æ
¢ãç¼åæªå½ä¸ï¼éå
³æ³¨ |
| | | /// </summary> |
| | | Warning = 3, |
| | | |
| | | /// <summary> |
| | | /// é误 - HTTP 500ãä¸å¡å¼å¸¸ï¼ä½ç³»ç»å¯ç»§ç» |
| | | /// </summary> |
| | | Error = 4, |
| | | |
| | | /// <summary> |
| | | /// è´å½é误 - æ°æ®åºè¿æ¥å¤±è´¥ãç£ç满ï¼ç³»ç»æ æ³ç»§ç» |
| | | /// </summary> |
| | | Fatal = 5, |
| | | |
| | | /// <summary> |
| | | /// æ |
| | | /// </summary> |
| | | None = 6 |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace KH.WMS.Core.Logging.LogEnums |
| | | { |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿æ¨¡åæä¸¾ |
| | | /// </summary> |
| | | public enum LogModule |
| | | { |
| | | /// <summary> |
| | | /// ç³»ç»æ ¸å¿ |
| | | /// </summary> |
| | | Core = 1000, |
| | | |
| | | /// <summary> |
| | | /// APIæ¥å£ |
| | | /// </summary> |
| | | Api = 1001, |
| | | |
| | | /// <summary> |
| | | /// æ°æ®åº |
| | | /// </summary> |
| | | Database = 1002, |
| | | |
| | | /// <summary> |
| | | /// ç¼å |
| | | /// </summary> |
| | | Cache = 1003, |
| | | |
| | | /// <summary> |
| | | /// è®¤è¯ææ |
| | | /// </summary> |
| | | Auth = 1004, |
| | | |
| | | /// <summary> |
| | | /// ä¸å¡é»è¾ |
| | | /// </summary> |
| | | Business = 1005, |
| | | |
| | | /// <summary> |
| | | /// å¤é¨æå¡ |
| | | /// </summary> |
| | | External = 1006, |
| | | |
| | | /// <summary> |
| | | /// ä»»å¡è°åº¦ |
| | | /// </summary> |
| | | Job = 1007, |
| | | |
| | | /// <summary> |
| | | /// æä»¶å¤ç |
| | | /// </summary> |
| | | File = 1008, |
| | | |
| | | // WMS 模å |
| | | /// <summary> |
| | | /// å
¥åºç®¡ç |
| | | /// </summary> |
| | | WMS_Inbound = 2001, |
| | | |
| | | /// <summary> |
| | | /// åºåºç®¡ç |
| | | /// </summary> |
| | | WMS_Outbound = 2002, |
| | | |
| | | /// <summary> |
| | | /// åºå管ç |
| | | /// </summary> |
| | | WMS_Inventory = 2003, |
| | | |
| | | /// <summary> |
| | | /// 货主管ç |
| | | /// </summary> |
| | | WMS_Owner = 2004, |
| | | |
| | | /// <summary> |
| | | /// åå管ç |
| | | /// </summary> |
| | | WMS_Product = 2005, |
| | | |
| | | /// <summary> |
| | | /// ä»åºç®¡ç |
| | | /// </summary> |
| | | WMS_Warehouse = 2006, |
| | | |
| | | /// <summary> |
| | | /// åºåºç®¡ç |
| | | /// </summary> |
| | | WMS_Zone = 2007, |
| | | |
| | | /// <summary> |
| | | /// åºä½ç®¡ç |
| | | /// </summary> |
| | | WMS_Location = 2008, |
| | | |
| | | /// <summary> |
| | | /// çç¹ç®¡ç |
| | | /// </summary> |
| | | WMS_Counting = 2009, |
| | | |
| | | /// <summary> |
| | | /// ç§»åºç®¡ç |
| | | /// </summary> |
| | | WMS_Transfer = 2010, |
| | | |
| | | /// <summary> |
| | | /// 波次管ç |
| | | /// </summary> |
| | | WMS_Wave = 2011, |
| | | |
| | | /// <summary> |
| | | /// æ£è´§ç®¡ç |
| | | /// </summary> |
| | | WMS_Picking = 2012, |
| | | |
| | | /// <summary> |
| | | /// è£
车管ç |
| | | /// </summary> |
| | | WMS_Loading = 2013, |
| | | |
| | | /// <summary> |
| | | /// å¸è½¦ç®¡ç |
| | | /// </summary> |
| | | WMS_Unloading = 2014, |
| | | |
| | | /// <summary> |
| | | /// åºå
å å·¥ |
| | | /// </summary> |
| | | WMS_Processing = 2015, |
| | | |
| | | /// <summary> |
| | | /// 补货管ç |
| | | /// </summary> |
| | | WMS_Replenishment = 2016, |
| | | |
| | | /// <summary> |
| | | /// çç¥ç®¡ç |
| | | /// </summary> |
| | | WMS_Strategy = 2017, |
| | | |
| | | /// <summary> |
| | | /// åæ®ç®¡ç |
| | | /// </summary> |
| | | WMS_Order = 2018, |
| | | |
| | | /// <summary> |
| | | /// è¿è¾ç®¡ç |
| | | /// </summary> |
| | | WMS_Transport = 2019, |
| | | |
| | | /// <summary> |
| | | /// 计费管ç |
| | | /// </summary> |
| | | WMS_Billing = 2020, |
| | | |
| | | /// <summary> |
| | | /// æ¥è¡¨ç®¡ç |
| | | /// </summary> |
| | | WMS_Report = 2021 |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace KH.WMS.Core.Logging.LogEnums |
| | | { |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿ç±»åæä¸¾ |
| | | /// </summary> |
| | | public enum LogType |
| | | { |
| | | /// <summary> |
| | | /// ç³»ç»æ¥å¿ |
| | | /// </summary> |
| | | System = 0, |
| | | |
| | | /// <summary> |
| | | /// æä½æ¥å¿ |
| | | /// </summary> |
| | | Operation = 1, |
| | | |
| | | /// <summary> |
| | | /// ä¸å¡æ¥å¿ |
| | | /// </summary> |
| | | Business = 2, |
| | | |
| | | /// <summary> |
| | | /// å¼å¸¸æ¥å¿ |
| | | /// </summary> |
| | | Exception = 3, |
| | | |
| | | /// <summary> |
| | | /// æ§è½æ¥å¿ |
| | | /// </summary> |
| | | Performance = 4, |
| | | |
| | | /// <summary> |
| | | /// å®å
¨æ¥å¿ |
| | | /// </summary> |
| | | Security = 5, |
| | | |
| | | /// <summary> |
| | | /// 审计æ¥å¿ |
| | | /// </summary> |
| | | Audit = 6, |
| | | |
| | | /// <summary> |
| | | /// è°è¯æ¥å¿ |
| | | /// </summary> |
| | | Debug = 7, |
| | | |
| | | /// <summary> |
| | | /// è®¿é®æ¥å¿ |
| | | /// </summary> |
| | | Access = 8, |
| | | |
| | | /// <summary> |
| | | /// 任塿¥å¿ |
| | | /// </summary> |
| | | Job = 9 |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System.Diagnostics; |
| | | using System.Runtime.CompilerServices; |
| | | using KH.WMS.Core.Logging.LogEnums; |
| | | |
| | | namespace KH.WMS.Core.Logging; |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿æ¨¡åèªå¨è¯å«å¨ |
| | | /// </summary> |
| | | public static class LogModuleDetector |
| | | { |
| | | /// <summary> |
| | | /// 模åå½åç©ºé´æ å°é
ç½® |
| | | /// </summary> |
| | | private static readonly Dictionary<string, LogModule> NamespaceModuleMapping = new(StringComparer.OrdinalIgnoreCase) |
| | | { |
| | | // åºç¡è®¾æ½å± |
| | | ["KH.WMS.Core.Api"] = LogModule.Api, |
| | | ["KH.WMS.Core.Database"] = LogModule.Database, |
| | | ["KH.WMS.Core.Cache"] = LogModule.Cache, |
| | | ["KH.WMS.Core.Authentication"] = LogModule.Auth, |
| | | ["KH.WMS.Core.Security"] = LogModule.Auth, |
| | | ["KH.WMS.Core.Middleware"] = LogModule.Core, |
| | | ["KH.WMS.Core.BackgroundServices"] = LogModule.Job, |
| | | ["KH.WMS.Core.Logging"] = LogModule.Core, |
| | | |
| | | // WMS ä¸å¡å± - å
¥åºç®¡ç |
| | | ["KH.WMS.Core.Inbound"] = LogModule.WMS_Inbound, |
| | | ["KH.WMS.Core.Receiving"] = LogModule.WMS_Inbound, |
| | | ["KH.WMS.Core.PutAway"] = LogModule.WMS_Inbound, |
| | | ["KH.WMS.Core.Quality"] = LogModule.WMS_Inbound, |
| | | |
| | | // WMS ä¸å¡å± - åºåºç®¡ç |
| | | ["KH.WMS.Core.Outbound"] = LogModule.WMS_Outbound, |
| | | ["KH.WMS.Core.Picking"] = LogModule.WMS_Picking, |
| | | ["KH.WMS.Core.Packing"] = LogModule.WMS_Outbound, |
| | | ["KH.WMS.Core.Shipping"] = LogModule.WMS_Outbound, |
| | | ["KH.WMS.Core.Loading"] = LogModule.WMS_Loading, |
| | | |
| | | // WMS ä¸å¡å± - åºå管ç |
| | | ["KH.WMS.Core.Inventory"] = LogModule.WMS_Inventory, |
| | | ["KH.WMS.Core.Stock"] = LogModule.WMS_Inventory, |
| | | ["KH.WMS.Core.Stocktaking"] = LogModule.WMS_Counting, |
| | | ["KH.WMS.Core.Counting"] = LogModule.WMS_Counting, |
| | | |
| | | // WMS ä¸å¡å± - åºç¡æ°æ® |
| | | ["WMKH.WMS.CoreS.Owner"] = LogModule.WMS_Owner, |
| | | ["KH.WMS.Core.Product"] = LogModule.WMS_Product, |
| | | ["KH.WMS.Core.Sku"] = LogModule.WMS_Product, |
| | | ["KH.WMS.Core.Warehouse"] = LogModule.WMS_Warehouse, |
| | | ["KH.WMS.Core.Zone"] = LogModule.WMS_Zone, |
| | | ["KH.WMS.Core.Location"] = LogModule.WMS_Location, |
| | | |
| | | // WMS ä¸å¡å± - å
¶ä» |
| | | ["KH.WMS.Core.Transfer"] = LogModule.WMS_Transfer, |
| | | ["KH.WMS.Core.Move"] = LogModule.WMS_Transfer, |
| | | ["KH.WMS.Core.Wave"] = LogModule.WMS_Wave, |
| | | ["KH.WMS.Core.Unloading"] = LogModule.WMS_Unloading, |
| | | ["KH.WMS.Core.Processing"] = LogModule.WMS_Processing, |
| | | ["KH.WMS.Core.Replenishment"] = LogModule.WMS_Replenishment, |
| | | ["KH.WMS.Core.Strategy"] = LogModule.WMS_Strategy, |
| | | ["KH.WMS.Core.Order"] = LogModule.WMS_Order, |
| | | ["KH.WMS.Core.Transport"] = LogModule.WMS_Transport, |
| | | ["KH.WMS.Core.Billing"] = LogModule.WMS_Billing, |
| | | ["KH.WMS.Core.Report"] = LogModule.WMS_Report, |
| | | |
| | | // TODO |
| | | // éç¨ä¸å¡å± |
| | | ["Application.Services"] = LogModule.Business, |
| | | ["Domain.Services"] = LogModule.Business, |
| | | ["Core.Services"] = LogModule.Business, |
| | | |
| | | // API å± |
| | | ["Controllers"] = LogModule.Api, |
| | | ["Api"] = LogModule.Api, |
| | | ["Controllers.Api"] = LogModule.Api, |
| | | |
| | | // å¤é¨æå¡ |
| | | ["External"] = LogModule.External, |
| | | ["ThirdParty"] = LogModule.External, |
| | | ["Integration"] = LogModule.External, |
| | | |
| | | // æä»¶å¤ç |
| | | ["File"] = LogModule.File, |
| | | ["Storage"] = LogModule.File, |
| | | ["Upload"] = LogModule.File, |
| | | ["Download"] = LogModule.File, |
| | | }; |
| | | |
| | | /// <summary> |
| | | /// ä»è°ç¨æ ä¸èªå¨è¯å«æ¨¡å |
| | | /// </summary> |
| | | /// <param name="skipFrames">è·³è¿ç帧æ°ï¼é»è®¤è·³è¿ LoggerService å
é¨è°ç¨ï¼</param> |
| | | /// <returns>è¯å«åºç模åï¼é»è®¤è¿å Core</returns> |
| | | public static LogModule DetectModule(int skipFrames = 2) |
| | | { |
| | | try |
| | | { |
| | | var stackTrace = new StackTrace(skipFrames, false); |
| | | |
| | | for (int i = 0; i < stackTrace.FrameCount; i++) |
| | | { |
| | | var frame = stackTrace.GetFrame(i); |
| | | if (frame == null) continue; |
| | | |
| | | var namespaceName = frame.GetMethod()?.DeclaringType?.Namespace; |
| | | if (string.IsNullOrEmpty(namespaceName)) continue; |
| | | |
| | | // è·³è¿æ¥å¿ç³»ç»æ¬èº«çå½åç©ºé´ |
| | | if (namespaceName.StartsWith("KH.WMS.Core.Logging", StringComparison.OrdinalIgnoreCase) || |
| | | namespaceName.StartsWith("Microsoft.Extensions.Logging", StringComparison.OrdinalIgnoreCase)) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | // æ¥æ¾å¹é
çæ¨¡å |
| | | var module = FindModuleByNamespace(namespaceName); |
| | | if (module != LogModule.Core) |
| | | { |
| | | return module; |
| | | } |
| | | } |
| | | |
| | | return LogModule.Core; |
| | | } |
| | | catch |
| | | { |
| | | return LogModule.Core; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®å½åç©ºé´æ¥æ¾å¯¹åºç模å |
| | | /// </summary> |
| | | private static LogModule FindModuleByNamespace(string namespaceName) |
| | | { |
| | | // å®å
¨å¹é
|
| | | if (NamespaceModuleMapping.TryGetValue(namespaceName, out var module)) |
| | | { |
| | | return module; |
| | | } |
| | | |
| | | // åç¼å¹é
|
| | | foreach (var mapping in NamespaceModuleMapping) |
| | | { |
| | | if (namespaceName.StartsWith(mapping.Key, StringComparison.OrdinalIgnoreCase)) |
| | | { |
| | | return mapping.Value; |
| | | } |
| | | } |
| | | |
| | | // é»è®¤è¿åä¸å¡æ¨¡å |
| | | if (namespaceName.Contains("Service", StringComparison.OrdinalIgnoreCase) || |
| | | namespaceName.Contains("Domain", StringComparison.OrdinalIgnoreCase) || |
| | | namespaceName.Contains("Application", StringComparison.OrdinalIgnoreCase)) |
| | | { |
| | | return LogModule.Business; |
| | | } |
| | | |
| | | return LogModule.Core; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä»ç±»åæ¨ææ¨¡å |
| | | /// </summary> |
| | | public static LogModule DetectModuleFromType(Type type) |
| | | { |
| | | if (type == null) return LogModule.Core; |
| | | |
| | | var namespaceName = type.Namespace; |
| | | return string.IsNullOrEmpty(namespaceName) ? LogModule.Core : FindModuleByNamespace(namespaceName); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ·»å èªå®ä¹å½åç©ºé´æ å° |
| | | /// </summary> |
| | | /// <param name="namespacePrefix">å½å空é´åç¼</param> |
| | | /// <param name="module">对åºç模å</param> |
| | | public static void AddMapping(string namespacePrefix, LogModule module) |
| | | { |
| | | NamespaceModuleMapping[namespacePrefix] = module; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¹éæ·»å å½åç©ºé´æ å° |
| | | /// </summary> |
| | | public static void AddMappings(Dictionary<string, LogModule> mappings) |
| | | { |
| | | foreach (var mapping in mappings) |
| | | { |
| | | NamespaceModuleMapping[mapping.Key] = mapping.Value; |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Text.Json; |
| | | using KH.WMS.Core.DependencyInjection.ServiceLifetimes; |
| | | using KH.WMS.Core.Logging.LogEnums; |
| | | using Microsoft.AspNetCore.Http; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using Microsoft.Extensions.Logging; |
| | | using SerilogLogContext = Serilog.Context.LogContext; |
| | | |
| | | namespace KH.WMS.Core.Logging.Serilog; |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿æå¡å®ç°ï¼èªå¨è¯å«æ¨¡åï¼ |
| | | /// </summary> |
| | | [RegisteredService(Lifetime = ServiceLifetime.Scoped)] |
| | | public class LoggerService : ILoggerService |
| | | { |
| | | private readonly ILogger<LoggerService> _logger; |
| | | private readonly IHttpContextAccessor? _httpContextAccessor; |
| | | |
| | | public LoggerService(ILogger<LoggerService> logger, IHttpContextAccessor? httpContextAccessor = null) |
| | | { |
| | | _logger = logger; |
| | | _httpContextAccessor = httpContextAccessor; |
| | | } |
| | | |
| | | public void LogVerbose(string message, params object?[] args) |
| | | { |
| | | var module = LogModuleDetector.DetectModule(); |
| | | WriteLog(LogLevel.Trace, message, module, null, args); |
| | | } |
| | | |
| | | public void LogDebug(string message, params object?[] args) |
| | | { |
| | | var module = LogModuleDetector.DetectModule(); |
| | | WriteLog(LogLevel.Debug, message, module, null, args); |
| | | } |
| | | |
| | | public void LogInfo(string message, params object?[] args) |
| | | { |
| | | var module = LogModuleDetector.DetectModule(); |
| | | WriteLog(LogLevel.Information, message, module, null, args); |
| | | } |
| | | |
| | | public void LogWarning(string message, params object?[] args) |
| | | { |
| | | var module = LogModuleDetector.DetectModule(); |
| | | WriteLog(LogLevel.Warning, message, module, null, args); |
| | | } |
| | | |
| | | public void LogError(string message, params object?[] args) |
| | | { |
| | | var module = LogModuleDetector.DetectModule(); |
| | | WriteLog(LogLevel.Error, message, module, null, args); |
| | | } |
| | | |
| | | public void LogError(Exception exception, string message, params object?[] args) |
| | | { |
| | | var module = LogModuleDetector.DetectModule(); |
| | | var context = CreateLogContext(LogLevel.Error, module); |
| | | context.Type = LogType.Exception; |
| | | |
| | | using (PushFileName(null)) |
| | | { |
| | | if (args != null && args.Length > 0) |
| | | { |
| | | var messageTemplate = $"[{GetModuleCode(module)}] {message}"; |
| | | _logger.LogError(exception, messageTemplate, args); |
| | | } |
| | | else |
| | | { |
| | | _logger.LogError(exception, "[{ModuleCode}] {Message}", GetModuleCode(module), message); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public void LogFatal(string message, params object?[] args) |
| | | { |
| | | var module = LogModuleDetector.DetectModule(); |
| | | WriteLog(LogLevel.Critical, message, module, null, args); |
| | | } |
| | | |
| | | public void LogFatal(Exception exception, string message, params object?[] args) |
| | | { |
| | | var module = LogModuleDetector.DetectModule(); |
| | | var context = CreateLogContext(LogLevel.Critical, module); |
| | | context.Type = LogType.Exception; |
| | | |
| | | using (PushFileName(null)) |
| | | { |
| | | if (args != null && args.Length > 0) |
| | | { |
| | | var messageTemplate = $"[{GetModuleCode(module)}] {message}"; |
| | | _logger.LogCritical(exception, messageTemplate, args); |
| | | } |
| | | else |
| | | { |
| | | _logger.LogCritical(exception, "[{ModuleCode}] {Message}", GetModuleCode(module), message); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public void LogOperation(string operation, string? userName = null, long? userId = null, object? data = null) |
| | | { |
| | | var module = LogModuleDetector.DetectModule(); |
| | | var context = CreateLogContext(LogLevel.Information, module); |
| | | context.Type = LogType.Operation; |
| | | context.Operation = operation; |
| | | context.UserName = userName ?? context.UserName; |
| | | context.UserId = userId ?? context.UserId; |
| | | |
| | | var dataJson = data != null ? JsonSerializer.Serialize(data) : null; |
| | | |
| | | using (PushFileName(null)) |
| | | { |
| | | _logger.LogInformation("[{ModuleCode}] [OPERATION] {Operation} by {UserName} (UserId:{UserId}) {Data}", |
| | | GetModuleCode(module), operation, context.UserName, context.UserId, dataJson ?? ""); |
| | | } |
| | | } |
| | | |
| | | public void LogBusiness(string businessType, string message, object? data = null) |
| | | { |
| | | var module = LogModuleDetector.DetectModule(); |
| | | var context = CreateLogContext(LogLevel.Information, module); |
| | | context.Type = LogType.Business; |
| | | context.Operation = businessType; |
| | | |
| | | var dataJson = data != null ? JsonSerializer.Serialize(data) : null; |
| | | |
| | | using (PushFileName(null)) |
| | | { |
| | | _logger.LogInformation("[{ModuleCode}] [BUSINESS:{Type}] {Message} {Data}", |
| | | GetModuleCode(module), businessType, message, dataJson ?? ""); |
| | | } |
| | | } |
| | | |
| | | public void LogPerformance(string operation, long elapsedMs, object? data = null) |
| | | { |
| | | var module = LogModuleDetector.DetectModule(); |
| | | var context = CreateLogContext(LogLevel.Information, module); |
| | | context.Type = LogType.Performance; |
| | | context.Operation = operation; |
| | | context.Data["ElapsedMs"] = elapsedMs; |
| | | context.Data["ElapsedSeconds"] = elapsedMs / 1000.0; |
| | | |
| | | if (elapsedMs > 3000) |
| | | { |
| | | context.Level = LogLevelType.Warning; |
| | | } |
| | | |
| | | var dataJson = data != null ? JsonSerializer.Serialize(data) : null; |
| | | var logLevel = elapsedMs > 3000 ? LogLevel.Warning : LogLevel.Information; |
| | | |
| | | using (PushFileName(null)) |
| | | { |
| | | _logger.Log(logLevel, "[{ModuleCode}] [PERFORMANCE] {Operation} èæ¶ {Elapsed}ms {Data}", |
| | | GetModuleCode(module), operation, elapsedMs, dataJson ?? ""); |
| | | } |
| | | } |
| | | |
| | | public void Log(LogContext context, string message, params object?[] args) |
| | | { |
| | | var logLevel = ConvertLogLevel(context.Level); |
| | | var messageFormat = $"[{GetModuleCode(context.Module)}] [LogType:{context.Type}] {message}"; |
| | | |
| | | var state = new Dictionary<string, object?> |
| | | { |
| | | ["UserId"] = context.UserId, |
| | | ["UserName"] = context.UserName, |
| | | ["TenantId"] = context.TenantId, |
| | | ["RequestId"] = context.RequestId, |
| | | ["Operation"] = context.Operation |
| | | }; |
| | | |
| | | using (_logger.BeginScope(state)) |
| | | { |
| | | _logger.Log(logLevel, messageFormat, args); |
| | | } |
| | | } |
| | | |
| | | // ==================== ç§ææ¹æ³ ==================== |
| | | |
| | | private void WriteLog(LogLevel level, string message, LogModule module, string? fileName, object?[] args) |
| | | { |
| | | using (PushFileName(fileName)) |
| | | { |
| | | if (args != null && args.Length > 0) |
| | | { |
| | | var messageTemplate = $"[{GetModuleCode(module)}] {message}"; |
| | | _logger.Log(level, messageTemplate, args); |
| | | } |
| | | else |
| | | { |
| | | _logger.Log(level, $"[{GetModuleCode(module)}] {message}"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private IDisposable? PushFileName(string? fileName) |
| | | { |
| | | if (string.IsNullOrEmpty(fileName)) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | return SerilogLogContext.PushProperty("FileName", fileName); |
| | | } |
| | | |
| | | private LogContext CreateLogContext(LogLevel level, LogModule module) |
| | | { |
| | | var context = new LogContext |
| | | { |
| | | Level = ConvertToLogLevelType(level), |
| | | Module = module |
| | | }; |
| | | |
| | | if (_httpContextAccessor?.HttpContext != null) |
| | | { |
| | | var httpContext = _httpContextAccessor.HttpContext; |
| | | var user = httpContext.User; |
| | | |
| | | var userIdClaim = user?.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value; |
| | | if (long.TryParse(userIdClaim, out var userId)) |
| | | { |
| | | context.UserId = userId; |
| | | } |
| | | |
| | | context.UserName = user?.FindFirst(System.Security.Claims.ClaimTypes.Name)?.Value; |
| | | |
| | | var tenantIdClaim = user?.FindFirst("TenantId")?.Value; |
| | | if (long.TryParse(tenantIdClaim, out var tenantId)) |
| | | { |
| | | context.TenantId = tenantId; |
| | | } |
| | | |
| | | context.RequestId = httpContext.TraceIdentifier; |
| | | context.CorrelationId = httpContext.Request.Headers["X-Correlation-ID"].FirstOrDefault(); |
| | | context.ClientIp = httpContext.Connection.RemoteIpAddress?.ToString(); |
| | | } |
| | | |
| | | return context; |
| | | } |
| | | |
| | | private LogLevel ConvertLogLevel(LogLevelType level) |
| | | { |
| | | return level switch |
| | | { |
| | | LogLevelType.Verbose => LogLevel.Trace, |
| | | LogLevelType.Debug => LogLevel.Debug, |
| | | LogLevelType.Information => LogLevel.Information, |
| | | LogLevelType.Warning => LogLevel.Warning, |
| | | LogLevelType.Error => LogLevel.Error, |
| | | LogLevelType.Fatal => LogLevel.Critical, |
| | | LogLevelType.None => LogLevel.None, |
| | | _ => LogLevel.Information |
| | | }; |
| | | } |
| | | |
| | | private LogLevelType ConvertToLogLevelType(LogLevel level) |
| | | { |
| | | return level switch |
| | | { |
| | | Microsoft.Extensions.Logging.LogLevel.Trace => LogLevelType.Verbose, |
| | | Microsoft.Extensions.Logging.LogLevel.Debug => LogLevelType.Debug, |
| | | Microsoft.Extensions.Logging.LogLevel.Information => LogLevelType.Information, |
| | | Microsoft.Extensions.Logging.LogLevel.Warning => LogLevelType.Warning, |
| | | Microsoft.Extensions.Logging.LogLevel.Error => LogLevelType.Error, |
| | | Microsoft.Extensions.Logging.LogLevel.Critical => LogLevelType.Fatal, |
| | | Microsoft.Extensions.Logging.LogLevel.None => LogLevelType.None, |
| | | _ => LogLevelType.Information |
| | | }; |
| | | } |
| | | |
| | | private string GetModuleCode(LogModule module) |
| | | { |
| | | return ((int)module).ToString() + " " + module; |
| | | } |
| | | |
| | | private string GetModuleName(LogModule module) |
| | | { |
| | | return module.ToString(); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace KH.WMS.Core.Logging.Serilog |
| | | { |
| | | /// <summary> |
| | | /// æ¥å¿é
ç½®é项 |
| | | /// </summary> |
| | | public class SerilogOptions |
| | | { |
| | | /// <summary> |
| | | /// æä½æ¥å¿çº§å« |
| | | /// </summary> |
| | | public string MinimumLevel { get; set; } = "Information"; |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿ç®å½ |
| | | /// </summary> |
| | | public string LogDirectory { get; set; } = "Logs"; |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿ä¿çå¤©æ° |
| | | /// </summary> |
| | | public int RetentionDays { get; set; } = 30; |
| | | |
| | | /// <summary> |
| | | /// å个æä»¶æå¤§å¤§å°ï¼MBï¼ |
| | | /// </summary> |
| | | public int MaxFileSizeMB { get; set; } = 100; |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦ææ¨¡åå离æ¥å¿ |
| | | /// </summary> |
| | | public bool SplitByModule { get; set; } = false; |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦è¾åºå°æ§å¶å° |
| | | /// </summary> |
| | | public bool WriteToConsole { get; set; } = true; |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦è¾åºå°æä»¶ |
| | | /// </summary> |
| | | public bool WriteToFile { get; set; } = true; |
| | | |
| | | /// <summary> |
| | | /// 模å级å«è¦ç |
| | | /// </summary> |
| | | public Dictionary<string, string> ModuleOverrides { get; set; } = new() |
| | | { |
| | | ["Microsoft"] = "Warning", |
| | | ["Microsoft.EntityFrameworkCore"] = "Warning", |
| | | ["System"] = "Warning" |
| | | }; |
| | | |
| | | /// <summary> |
| | | /// èªå®ä¹æ¥å¿æä»¶åï¼ä¸å«è·¯å¾åæ©å±åï¼ä¾å¦: "myapp" ä¼çæ "myapp-.txt"ï¼ |
| | | /// 为 null æ¶ä½¿ç¨é»è®¤æä»¶å |
| | | /// </summary> |
| | | public string? CustomLogFileName { get; set; } |
| | | |
| | | /// <summary> |
| | | /// èªå®ä¹é误æ¥å¿æä»¶åï¼ä¸å«è·¯å¾åæ©å±åï¼ |
| | | /// 为 null æ¶ä½¿ç¨é»è®¤æä»¶å "error" |
| | | /// </summary> |
| | | public string? CustomErrorFileName { get; set; } |
| | | |
| | | /// <summary> |
| | | /// èªå®ä¹è¦åæ¥å¿æä»¶åï¼ä¸å«è·¯å¾åæ©å±åï¼ |
| | | /// 为 null æ¶ä½¿ç¨é»è®¤æä»¶å "warning" |
| | | /// </summary> |
| | | public string? CustomWarningFileName { get; set; } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Serilog; |
| | | using Serilog.Events; |
| | | using Microsoft.Extensions.Hosting; |
| | | using Microsoft.Extensions.Configuration; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using Microsoft.AspNetCore.Http; |
| | | using KH.WMS.Core.Logging.LogEnums; |
| | | using System.Collections.Generic; |
| | | using Serilog.Core; |
| | | |
| | | namespace KH.WMS.Core.Logging.Serilog; |
| | | |
| | | /// <summary> |
| | | /// Serilog é
ç½® |
| | | /// </summary> |
| | | public static class SerilogSetup |
| | | { |
| | | /// <summary> |
| | | /// é
ç½® Serilogï¼æ¯ææä»¶å¤§å°éå¶ï¼ |
| | | /// </summary> |
| | | public static LoggerConfiguration ConfigureSerilog( |
| | | string appName, |
| | | string logDirectory = "Logs", |
| | | LogEventLevel minimumLevel = LogEventLevel.Information, |
| | | int retentionDays = 30, |
| | | int maxFileSizeMB = 100, |
| | | string? logFileName = null, |
| | | string? errorFileName = null, |
| | | string? warningFileName = null) |
| | | { |
| | | // ç¡®ä¿æ¥å¿ç®å½åå¨ |
| | | EnsureLogDirectoryExists(logDirectory); |
| | | |
| | | var fileSizeLimitBytes = maxFileSizeMB * 1024 * 1024L; |
| | | |
| | | // 使ç¨èªå®ä¹æä»¶åæé»è®¤å¼ |
| | | var logFile = string.IsNullOrEmpty(logFileName) ? "log-.txt" : $"{logFileName}-.txt"; |
| | | var errorFile = string.IsNullOrEmpty(errorFileName) ? "error-.txt" : $"{errorFileName}-.txt"; |
| | | var warningFile = string.IsNullOrEmpty(warningFileName) ? "warning-.txt" : $"{warningFileName}-.txt"; |
| | | |
| | | return new LoggerConfiguration() |
| | | .MinimumLevel.Is(minimumLevel) |
| | | .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) |
| | | .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) |
| | | .MinimumLevel.Override("System", LogEventLevel.Warning) |
| | | .Enrich.FromLogContext() |
| | | .Enrich.WithProperty("Application", appName) |
| | | .WriteTo.Console(outputTemplate: GetConsoleOutputTemplate()) |
| | | .WriteTo.File( |
| | | path: $"{logDirectory}/{logFile}", |
| | | rollingInterval: RollingInterval.Day, |
| | | outputTemplate: GetFileOutputTemplate(), |
| | | restrictedToMinimumLevel: LogEventLevel.Information, |
| | | encoding: System.Text.Encoding.UTF8, |
| | | fileSizeLimitBytes: fileSizeLimitBytes, |
| | | retainedFileCountLimit: retentionDays, |
| | | rollOnFileSizeLimit: true, |
| | | flushToDiskInterval: TimeSpan.FromSeconds(1)) |
| | | .WriteTo.File( |
| | | path: $"{logDirectory}/{errorFile}", |
| | | rollingInterval: RollingInterval.Day, |
| | | outputTemplate: GetFileOutputTemplate(), |
| | | restrictedToMinimumLevel: LogEventLevel.Error, |
| | | encoding: System.Text.Encoding.UTF8, |
| | | fileSizeLimitBytes: fileSizeLimitBytes, |
| | | retainedFileCountLimit: retentionDays, |
| | | rollOnFileSizeLimit: true, |
| | | flushToDiskInterval: TimeSpan.FromSeconds(1)) |
| | | .WriteTo.File( |
| | | path: $"{logDirectory}/{warningFile}", |
| | | rollingInterval: RollingInterval.Day, |
| | | outputTemplate: GetFileOutputTemplate(), |
| | | restrictedToMinimumLevel: LogEventLevel.Warning, |
| | | encoding: System.Text.Encoding.UTF8, |
| | | fileSizeLimitBytes: fileSizeLimitBytes, |
| | | retainedFileCountLimit: retentionDays, |
| | | rollOnFileSizeLimit: true, |
| | | flushToDiskInterval: TimeSpan.FromSeconds(1)); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// é
ç½® Serilogï¼ä½¿ç¨ SerilogOptionsï¼ |
| | | /// </summary> |
| | | public static LoggerConfiguration ConfigureSerilog( |
| | | string appName, |
| | | SerilogOptions options) |
| | | { |
| | | return ConfigureSerilog( |
| | | appName, |
| | | options.LogDirectory, |
| | | GetMinimumLogLevelFromString(options.MinimumLevel), |
| | | options.RetentionDays, |
| | | options.MaxFileSizeMB, |
| | | options.CustomLogFileName, |
| | | options.CustomErrorFileName, |
| | | options.CustomWarningFileName); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ·»å Serilog å°ä¸»æºï¼å®æ´çï¼æ¯ææä»¶å¤§å°éå¶åèªå®ä¹æä»¶åï¼ |
| | | /// </summary> |
| | | public static IHostBuilder AddSerilog( |
| | | this IHostBuilder hostBuilder, |
| | | string appName, |
| | | string logDirectory = "Logs", |
| | | int retentionDays = 30, |
| | | int maxFileSizeMB = 100, |
| | | string? logFileName = null, |
| | | string? errorFileName = null, |
| | | string? warningFileName = null) |
| | | { |
| | | return hostBuilder.UseSerilog((context, services, loggerConfiguration) => |
| | | { |
| | | var config = context.Configuration; |
| | | var appNameValue = config["App:AppName"] ?? appName; |
| | | |
| | | // ä»é
置读åæä½¿ç¨é»è®¤å¼ |
| | | var logPath = config["Serilog:LogPath"] ?? logDirectory; |
| | | var retention = int.Parse(config["Serilog:RetentionDays"] ?? retentionDays.ToString()); |
| | | var maxSize = int.Parse(config["Serilog:MaxFileSizeMB"] ?? maxFileSizeMB.ToString()); |
| | | var fileSizeLimitBytes = maxSize * 1024 * 1024L; |
| | | |
| | | // æ¯å¦è¾åºå°æ§å¶å° |
| | | var writeToConsole = bool.Parse(config["Serilog:WriteToConsole"] ?? "true"); |
| | | |
| | | // ä»é
置读åèªå®ä¹æä»¶åï¼æ¯æéè¿é
ç½®æä»¶è®¾ç½®ï¼ |
| | | var customLogFileName = config["Serilog:FileNames:Log"] ?? logFileName; |
| | | var customErrorFileName = config["Serilog:FileNames:Error"] ?? errorFileName; |
| | | var customWarningFileName = config["Serilog:FileNames:Warning"] ?? warningFileName; |
| | | |
| | | // 使ç¨èªå®ä¹æä»¶åæé»è®¤å¼ |
| | | var logFile = string.IsNullOrEmpty(customLogFileName) ? "log-.txt" : $"{customLogFileName}-.txt"; |
| | | var errorFile = string.IsNullOrEmpty(customErrorFileName) ? "error-.txt" : $"{customErrorFileName}-.txt"; |
| | | var warningFile = string.IsNullOrEmpty(customWarningFileName) ? "warning-.txt" : $"{customWarningFileName}-.txt"; |
| | | |
| | | // ç¡®ä¿æ¥å¿ç®å½åå¨ |
| | | EnsureLogDirectoryExists(logPath); |
| | | |
| | | loggerConfiguration |
| | | .ReadFrom.Configuration(config) |
| | | .ReadFrom.Services(services) |
| | | .MinimumLevel.Is(GetMinimumLogLevel(config)) |
| | | .MinimumLevel.Override("Microsoft", GetModuleLogLevel(config, "Microsoft")) |
| | | .MinimumLevel.Override("Microsoft.EntityFrameworkCore", GetModuleLogLevel(config, "EntityFrameworkCore")) |
| | | .MinimumLevel.Override("Microsoft.Hosting.Lifetime", LogEventLevel.Information) |
| | | .MinimumLevel.Override("System", GetModuleLogLevel(config, "System")) |
| | | .Enrich.FromLogContext() |
| | | .Enrich.WithProperty("Application", appNameValue) |
| | | .Enrich.WithProperty("Environment", context.HostingEnvironment.EnvironmentName); |
| | | |
| | | // æ ¹æ®é
ç½®å³å®æ¯å¦è¾åºå°æ§å¶å° |
| | | if (writeToConsole) |
| | | { |
| | | loggerConfiguration.WriteTo.Console(outputTemplate: GetConsoleOutputTemplate()); |
| | | } |
| | | |
| | | // æä»¶è¾åº |
| | | loggerConfiguration |
| | | // æ®éæ¥å¿ - åªè®°å½ Information çº§å« |
| | | .WriteTo.File( |
| | | path: Path.Combine(logPath, logFile), |
| | | rollingInterval: RollingInterval.Day, |
| | | outputTemplate: GetFileOutputTemplate(), |
| | | restrictedToMinimumLevel: LogEventLevel.Information, |
| | | encoding: System.Text.Encoding.UTF8, |
| | | fileSizeLimitBytes: fileSizeLimitBytes, |
| | | retainedFileCountLimit: retention, |
| | | rollOnFileSizeLimit: true, |
| | | flushToDiskInterval: TimeSpan.FromSeconds(1)) |
| | | // é误æ¥å¿ - åªè®°å½ Error å Fatal çº§å« |
| | | .WriteTo.Logger(lc => lc |
| | | .Filter.ByIncludingOnly(e => e.Level >= LogEventLevel.Error) |
| | | .WriteTo.File( |
| | | path: Path.Combine(logPath, errorFile), |
| | | rollingInterval: RollingInterval.Day, |
| | | outputTemplate: GetFileOutputTemplate(), |
| | | encoding: System.Text.Encoding.UTF8, |
| | | fileSizeLimitBytes: fileSizeLimitBytes, |
| | | retainedFileCountLimit: retention, |
| | | rollOnFileSizeLimit: true, |
| | | flushToDiskInterval: TimeSpan.FromSeconds(1))) |
| | | // è¦åæ¥å¿ - åªè®°å½ Warning 级å«ï¼ä¸å
æ¬ Errorï¼ |
| | | .WriteTo.Logger(lc => lc |
| | | .Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Warning) |
| | | .WriteTo.File( |
| | | path: Path.Combine(logPath, warningFile), |
| | | rollingInterval: RollingInterval.Day, |
| | | outputTemplate: GetFileOutputTemplate(), |
| | | encoding: System.Text.Encoding.UTF8, |
| | | fileSizeLimitBytes: fileSizeLimitBytes, |
| | | retainedFileCountLimit: retention, |
| | | rollOnFileSizeLimit: true, |
| | | flushToDiskInterval: TimeSpan.FromSeconds(1))); |
| | | }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ·»å Serilog å°ä¸»æºï¼ä½¿ç¨ SerilogOptionsï¼ |
| | | /// </summary> |
| | | public static IHostBuilder AddSerilog( |
| | | this IHostBuilder hostBuilder, |
| | | string appName, |
| | | SerilogOptions options) |
| | | { |
| | | return AddSerilog( |
| | | hostBuilder, |
| | | appName, |
| | | options.LogDirectory, |
| | | options.RetentionDays, |
| | | options.MaxFileSizeMB, |
| | | options.CustomLogFileName, |
| | | options.CustomErrorFileName, |
| | | options.CustomWarningFileName); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ç¡®ä¿æ¥å¿ç®å½åå¨ |
| | | /// </summary> |
| | | private static void EnsureLogDirectoryExists(string logDirectory) |
| | | { |
| | | if (!Directory.Exists(logDirectory)) |
| | | { |
| | | Directory.CreateDirectory(logDirectory); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åæ§å¶å°è¾åºæ¨¡æ¿ |
| | | /// </summary> |
| | | private static string GetConsoleOutputTemplate() |
| | | { |
| | | return "[{Timestamp:HH:mm:ss} {Level:u3}] [{ModuleCode}] {Message:lj}{NewLine}{Exception}"; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åæä»¶è¾åºæ¨¡æ¿ |
| | | /// </summary> |
| | | private static string GetFileOutputTemplate() |
| | | { |
| | | return "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] [{ModuleCode}] [LogType:{LogType}] [TenantId:{TenantId}] [UserId:{UserId}] [RequestId:{RequestId}] {Message:lj}{NewLine}{Exception}"; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åæä½æ¥å¿çº§å« |
| | | /// </summary> |
| | | private static LogEventLevel GetMinimumLogLevel(IConfiguration config) |
| | | { |
| | | var level = config["Serilog:MinimumLevel:Default"]; |
| | | return level switch |
| | | { |
| | | "Verbose" => LogEventLevel.Verbose, |
| | | "Debug" => LogEventLevel.Debug, |
| | | "Information" => LogEventLevel.Information, |
| | | "Warning" => LogEventLevel.Warning, |
| | | "Error" => LogEventLevel.Error, |
| | | "Fatal" => LogEventLevel.Fatal, |
| | | _ => LogEventLevel.Information |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åæ¨¡åæ¥å¿çº§å« |
| | | /// </summary> |
| | | private static LogEventLevel GetModuleLogLevel(IConfiguration config, string module) |
| | | { |
| | | var level = config[$"Serilog:MinimumLevel:Override:{module}"]; |
| | | return level switch |
| | | { |
| | | "Verbose" => LogEventLevel.Verbose, |
| | | "Debug" => LogEventLevel.Debug, |
| | | "Information" => LogEventLevel.Information, |
| | | "Warning" => LogEventLevel.Warning, |
| | | "Error" => LogEventLevel.Error, |
| | | "Fatal" => LogEventLevel.Fatal, |
| | | _ => LogEventLevel.Warning |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä»å符串è·åæ¥å¿çº§å« |
| | | /// </summary> |
| | | private static LogEventLevel GetMinimumLogLevelFromString(string level) |
| | | { |
| | | return level switch |
| | | { |
| | | "Verbose" => LogEventLevel.Verbose, |
| | | "Debug" => LogEventLevel.Debug, |
| | | "Information" => LogEventLevel.Information, |
| | | "Warning" => LogEventLevel.Warning, |
| | | "Error" => LogEventLevel.Error, |
| | | "Fatal" => LogEventLevel.Fatal, |
| | | _ => LogEventLevel.Information |
| | | }; |
| | | } |
| | | } |
| | | |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System.Text; |
| | | using Microsoft.AspNetCore.Builder; |
| | | using Microsoft.AspNetCore.Hosting; |
| | | using Microsoft.AspNetCore.Http; |
| | | using Microsoft.Extensions.Configuration; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using Microsoft.Extensions.Hosting; |
| | | using StackExchange.Profiling; |
| | | using StackExchange.Profiling.Storage; |
| | | |
| | | namespace KH.WMS.Core.Monitoring.MiniProfiler; |
| | | |
| | | /// <summary> |
| | | /// MiniProfiler é
ç½® |
| | | /// </summary> |
| | | public static class MiniProfilerSetup |
| | | { |
| | | /// <summary> |
| | | /// æ·»å MiniProfiler æå¡ |
| | | /// </summary> |
| | | public static IServiceCollection AddMiniProfilerCustom(this IServiceCollection services, IConfiguration configuration, IWebHostEnvironment environment) |
| | | { |
| | | var miniProfilerSettings = configuration.GetSection("MiniProfiler").Get<MiniProfilerSettings>(); |
| | | miniProfilerSettings ??= new MiniProfilerSettings(); |
| | | |
| | | // è°ç¨å®æ¹ MiniProfiler çæ©å±æ¹æ³ |
| | | services.AddMiniProfiler(options => |
| | | { |
| | | options.RouteBasePath = miniProfilerSettings.RouteBasePath; |
| | | options.PopupRenderPosition = RenderPosition.BottomLeft; |
| | | options.PopupShowTimeWithChildren = true; |
| | | |
| | | // ç产ç¯å¢é
ç½® |
| | | if (!miniProfilerSettings.EnableInProduction && !environment.IsDevelopment()) |
| | | { |
| | | options.ShouldProfile = _ => false; |
| | | } |
| | | else |
| | | { |
| | | // å¼åç¯å¢æé
置为å¯ç¨æ¶ï¼åæææè¯·æ± |
| | | options.ShouldProfile = _ => true; |
| | | } |
| | | |
| | | // æ°æ®åºä¼å |
| | | options.TrackConnectionOpenClose = miniProfilerSettings.TrackConnectionOpenClose; |
| | | |
| | | }); |
| | | |
| | | return services; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä½¿ç¨ MiniProfiler ä¸é´ä»¶ |
| | | /// </summary> |
| | | public static IApplicationBuilder UseMiniProfilerCustom(this IApplicationBuilder app) |
| | | { |
| | | app.UseMiniProfiler(); |
| | | return app; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// MiniProfiler é
ç½®é项 |
| | | /// </summary> |
| | | public class MiniProfilerSettings |
| | | { |
| | | /// <summary> |
| | | /// è·¯ç±åºç¡è·¯å¾ |
| | | /// </summary> |
| | | public string RouteBasePath { get; set; } = "/profiler"; |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦å¨ç产ç¯å¢å¯ç¨ |
| | | /// </summary> |
| | | public bool EnableInProduction { get; set; } = false; |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦è·è¸ªæ°æ®åºè¿æ¥ |
| | | /// </summary> |
| | | public bool TrackConnectionOpenClose { get; set; } = true; |
| | | |
| | | /// <summary> |
| | | /// å æ è·è¸ªé¿åº¦ |
| | | /// </summary> |
| | | public int StackTraceLength { get; set; } = 5; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.AspNetCore.Builder; |
| | | using Microsoft.Extensions.Configuration; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | |
| | | namespace KH.WMS.Core.Setup; |
| | | |
| | | /// <summary> |
| | | /// API ææ¡£é
ç½® |
| | | /// </summary> |
| | | public static class ApiDocumentationSetup |
| | | { |
| | | /// <summary> |
| | | /// é
ç½® Swagger |
| | | /// </summary> |
| | | public static IServiceCollection AddApiDocumentationSetup(this IServiceCollection services, IConfiguration configuration) |
| | | { |
| | | return KH.WMS.Core.Api.Documentation.Swagger.SwaggerSetup.AddSwaggerDocumentation(services, configuration); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä½¿ç¨ Swagger |
| | | /// </summary> |
| | | public static IApplicationBuilder UseSwaggerDocumentation(this IApplicationBuilder app) |
| | | { |
| | | // 仿å¡è·åé
ç½® |
| | | var serviceProvider = app.ApplicationServices; |
| | | var configuration = serviceProvider.GetRequiredService<IConfiguration>(); |
| | | return KH.WMS.Core.Api.Documentation.Swagger.SwaggerSetup.UseSwaggerDocumentation(app, configuration); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.Extensions.Configuration; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | |
| | | namespace KH.WMS.Core.Setup; |
| | | |
| | | /// <summary> |
| | | /// æ°æ®åºé
ç½® |
| | | /// </summary> |
| | | public static class DatabaseSetup |
| | | { |
| | | /// <summary> |
| | | /// é
ç½® SQL Sugar |
| | | /// </summary> |
| | | public static IServiceCollection AddSqlSugarSetup(this IServiceCollection services, IConfiguration configuration) |
| | | { |
| | | return KH.WMS.Core.Database.SqlSugar.SqlSugarSetup.AddSqlSugar(services, configuration); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.Extensions.Configuration; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using Microsoft.Extensions.Hosting; |
| | | using Serilog; |
| | | |
| | | namespace KH.WMS.Core.Setup; |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿é
ç½® |
| | | /// </summary> |
| | | public static class LoggingSetup |
| | | { |
| | | /// <summary> |
| | | /// é
ç½® Serilog |
| | | /// </summary> |
| | | public static IHostBuilder AddSerilog(this IHostBuilder hostBuilder) |
| | | { |
| | | return KH.WMS.Core.Logging.Serilog.SerilogSetup.AddSerilog(hostBuilder, "KH.WMS", "Logs"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// é
ç½®æå¡æ¥å¿ |
| | | /// </summary> |
| | | public static IServiceCollection AddLoggingSetup(this IServiceCollection services, IConfiguration configuration) |
| | | { |
| | | // æ·»å æ¥å¿æå¡ |
| | | services.AddSingleton<KH.WMS.Core.Logging.ILoggerService, KH.WMS.Core.Logging.Serilog.LoggerService>(); |
| | | |
| | | return services; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | |
| | | using KH.WMS.Core.Monitoring.MiniProfiler; |
| | | using Microsoft.AspNetCore.Builder; |
| | | using Microsoft.AspNetCore.Hosting; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using Microsoft.Extensions.Hosting; |
| | | |
| | | namespace KH.WMS.Core.Setup; |
| | | |
| | | /// <summary> |
| | | /// ä¸é´ä»¶é
ç½® - ç»ä¸å
¥å£ |
| | | /// </summary> |
| | | public static class MiddlewareSetup |
| | | { |
| | | /// <summary> |
| | | /// ä½¿ç¨ææèªå®ä¹ä¸é´ä»¶ï¼ææ¨è顺åºï¼ |
| | | /// </summary> |
| | | /// <summary> |
| | | /// ä½¿ç¨ææèªå®ä¹ä¸é´ä»¶ï¼ææ¨è顺åºï¼ |
| | | /// </summary> |
| | | public static IApplicationBuilder UseCustomMiddleware(this IApplicationBuilder app, IWebHostEnvironment env) |
| | | { |
| | | // HTTPS éå®åï¼ç产ç¯å¢ï¼ |
| | | if (!env.IsDevelopment()) |
| | | { |
| | | app.UseHttpsRedirection(); |
| | | } |
| | | |
| | | // è·¯ç± |
| | | app.UseRouting(); |
| | | |
| | | // æ§è½çæ§ï¼å¨ UseRouting ä¹åï¼ |
| | | app.UseMiniProfilerCustom(); |
| | | |
| | | // è®¤è¯ |
| | | app.UseAuthentication(); |
| | | |
| | | // ææ |
| | | app.UseAuthorization(); |
| | | |
| | | // ç«¯ç¹æ å° |
| | | app.UseEndpoints(endpoints => |
| | | { |
| | | endpoints.MapControllers(); |
| | | endpoints.MapRazorPages(); // MiniProfiler UI éè¦ |
| | | }); |
| | | |
| | | return app; |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.AspNetCore.Builder; |
| | | using Microsoft.AspNetCore.Hosting; |
| | | using Microsoft.Extensions.Configuration; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | |
| | | namespace KH.WMS.Core.Setup; |
| | | |
| | | /// <summary> |
| | | /// æ§è½çæ§é
ç½® |
| | | /// </summary> |
| | | public static class MonitoringSetup |
| | | { |
| | | /// <summary> |
| | | /// é
ç½® MiniProfiler |
| | | /// </summary> |
| | | public static IServiceCollection AddMonitoringSetup(this IServiceCollection services, IConfiguration configuration, IWebHostEnvironment environment) |
| | | { |
| | | return KH.WMS.Core.Monitoring.MiniProfiler.MiniProfilerSetup.AddMiniProfilerCustom(services, configuration, environment); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä½¿ç¨ MiniProfiler |
| | | /// </summary> |
| | | public static IApplicationBuilder UseMiniProfiler(this IApplicationBuilder app) |
| | | { |
| | | return KH.WMS.Core.Monitoring.MiniProfiler.MiniProfilerSetup.UseMiniProfilerCustom(app); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using Microsoft.Extensions.Configuration; |
| | | using Microsoft.AspNetCore.Hosting; |
| | | using Microsoft.AspNetCore.Builder; |
| | | using Microsoft.Extensions.Hosting; |
| | | using KH.WMS.Core.Setup; |
| | | |
| | | // æ¤å½åç©ºé´æ¯ä¸ºäºååå
¼å®¹ |
| | | namespace KH.WMS.Core.Setup; |
| | | |
| | | /// <summary> |
| | | /// æå¡éåé
ç½® - ç»ä¸å
¥å£ |
| | | /// </summary> |
| | | public static class ServiceCollectionSetup |
| | | { |
| | | /// <summary> |
| | | /// æ·»å ææåºç¡è®¾æ½æå¡ |
| | | /// </summary> |
| | | public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration, IWebHostEnvironment environment) |
| | | { |
| | | // æ°æ®åº |
| | | services.AddSqlSugarSetup(configuration); |
| | | |
| | | // æ¥å¿ |
| | | services.AddLoggingSetup(configuration); |
| | | |
| | | // æ§è½çæ§ |
| | | services.AddMonitoringSetup(configuration, environment); |
| | | |
| | | // API ææ¡£ |
| | | services.AddApiDocumentationSetup(configuration); |
| | | |
| | | // HTTP 客æ·ç«¯ |
| | | services.AddHttpClient(); |
| | | |
| | | return services; |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <Project Sdk="Microsoft.NET.Sdk"> |
| | | |
| | | <PropertyGroup> |
| | | <TargetFramework>net8.0</TargetFramework> |
| | | <ImplicitUsings>enable</ImplicitUsings> |
| | | <Nullable>enable</Nullable> |
| | | </PropertyGroup> |
| | | |
| | | </Project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using KH.WMS.TestProj; |
| | | using Microsoft.AspNetCore.Authorization; |
| | | using Microsoft.AspNetCore.Http; |
| | | using Microsoft.AspNetCore.Mvc; |
| | | |
| | | namespace KH.WMS.Server.Controllers |
| | | { |
| | | [Route("api/[controller]")] |
| | | [ApiController] |
| | | public class TestController : ControllerBase |
| | | { |
| | | private readonly ITestService _testService; |
| | | public TestController(ITestService testService) |
| | | { |
| | | _testService = testService; |
| | | } |
| | | |
| | | [HttpGet, Route("GetTestObject"), AllowAnonymous] |
| | | public object GetTestObject() |
| | | { |
| | | return _testService.GetTestObject(); |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <Project Sdk="Microsoft.NET.Sdk.Web"> |
| | | |
| | | <PropertyGroup> |
| | | <TargetFramework>net8.0</TargetFramework> |
| | | <Nullable>enable</Nullable> |
| | | <ImplicitUsings>enable</ImplicitUsings> |
| | | </PropertyGroup> |
| | | |
| | | <ItemGroup> |
| | | <ProjectReference Include="..\KH.WMS.Core\KH.WMS.Core.csproj" /> |
| | | <ProjectReference Include="..\Test\KH.WMS.TestProj\KH.WMS.TestProj.csproj" /> |
| | | </ItemGroup> |
| | | |
| | | <ItemGroup> |
| | | <Folder Include="wwwroot\" /> |
| | | </ItemGroup> |
| | | |
| | | </Project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Autofac; |
| | | using Autofac.Extensions.DependencyInjection; |
| | | using KH.WMS.Core.AOP; |
| | | using KH.WMS.Core.Api.Documentation.Swagger; |
| | | using KH.WMS.Core.DependencyInjection; |
| | | using KH.WMS.Core.Logging.Serilog; |
| | | using KH.WMS.Core.Monitoring.MiniProfiler; |
| | | using KH.WMS.Core.Setup; |
| | | using KH.WMS.TestProj; |
| | | using StackExchange.Profiling; |
| | | using Swashbuckle.AspNetCore.SwaggerUI; |
| | | |
| | | var builder = WebApplication.CreateBuilder(args); |
| | | |
| | | |
| | | // é
ç½® Serilog æ¥å¿ |
| | | builder.Host.AddSerilog( |
| | | appName: "KH.WMS", |
| | | logDirectory: "Logs", |
| | | retentionDays: 30, |
| | | maxFileSizeMB: 5); |
| | | |
| | | |
| | | builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureContainer<ContainerBuilder>(builder => |
| | | { |
| | | builder.RegisterModule(new ServiceExtensions());//å¸¦ææ¥å£å±çæå¡æ³¨å
¥ |
| | | }); |
| | | |
| | | // æ·»å HttpContextAccessorï¼ç¨äºæ¥å¿ä¸è·åç¨æ·ä¿¡æ¯ï¼ |
| | | builder.Services.AddHttpContextAccessor(); |
| | | |
| | | builder.Services.AddInfrastructure(builder.Configuration, builder.Environment); |
| | | |
| | | // Add services to the container. |
| | | builder.Services.AddControllers(); |
| | | builder.Services.AddRazorPages(); // MiniProfiler UI å¯è½éè¦ |
| | | builder.Services.AddEndpointsApiExplorer(); |
| | | |
| | | var app = builder.Build(); |
| | | |
| | | app.UseCustomMiddleware(app.Environment); |
| | | |
| | | // Configure the HTTP request pipeline. |
| | | if (app.Environment.IsDevelopment()) |
| | | { |
| | | app.UseSwaggerDocumentation(builder.Configuration); |
| | | } |
| | | |
| | | app.Run(); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "$schema": "https://json.schemastore.org/launchsettings.json", |
| | | "iisSettings": { |
| | | "windowsAuthentication": false, |
| | | "anonymousAuthentication": true, |
| | | "iisExpress": { |
| | | "applicationUrl": "http://localhost:9058", |
| | | "sslPort": 44305 |
| | | } |
| | | }, |
| | | "profiles": { |
| | | "KH.WMS.Server": { |
| | | "commandName": "Project", |
| | | "dotnetRunMessages": true, |
| | | "launchBrowser": false, |
| | | "applicationUrl": "http://localhost:5006", |
| | | "environmentVariables": { |
| | | "ASPNETCORE_ENVIRONMENT": "Development" |
| | | } |
| | | }, |
| | | "IIS Express": { |
| | | "commandName": "IISExpress", |
| | | "launchBrowser": true, |
| | | "environmentVariables": { |
| | | "ASPNETCORE_ENVIRONMENT": "Development" |
| | | } |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "Logging": { |
| | | "LogLevel": { |
| | | "Default": "Information", |
| | | "Microsoft.AspNetCore": "Warning" |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "urls": "http://*:9291", |
| | | // ==================== æ°æ®åºè¿æ¥é
ç½® ==================== |
| | | "DbConnection": { |
| | | // æ°æ®åºè¿æ¥å符串 |
| | | "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_TEST_Log;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | // æ°æ®åºç±»å: SqlServer, MySql, SQLite, PostgreSQL |
| | | "DbType": "SqlServer", |
| | | // æ¯å¦å¯ç¨ SQL æ¥å¿ |
| | | "EnableSqlLog": false, |
| | | // å½ä»¤è¶
æ¶æ¶é´ï¼ç§ï¼ |
| | | "CommandTimeout": 30 |
| | | }, |
| | | |
| | | // ==================== CORS è·¨åé
ç½® ==================== |
| | | "Cors": { |
| | | // æ¯å¦å
è®¸ä»»ä½æ¥æºï¼true=å
许ææï¼false=ä½¿ç¨ AllowedOrigins åè¡¨ï¼ |
| | | "AllowAnyOrigin": false, |
| | | // å
è®¸çæ¥æºå表ï¼å½ AllowAnyOrigin 为 false æ¶çæï¼ |
| | | "AllowedOrigins": [ |
| | | "http://localhost:3000", |
| | | "http://localhost:8080", |
| | | "https://localhost:3000", |
| | | "https://localhost:8080" |
| | | ], |
| | | // æ¯å¦å
è®¸ä»»ä½ HTTP æ¹æ³ï¼GET, POST, PUT, DELETE çï¼ |
| | | "AllowAnyMethod": true, |
| | | // æ¯å¦å
许任ä½è¯·æ±å¤´ |
| | | "AllowAnyHeader": true, |
| | | // æ´é²ç»å®¢æ·ç«¯çååºå¤´ |
| | | "ExposedHeaders": [ |
| | | "X-Correlation-ID", |
| | | "X-Request-ID" |
| | | ], |
| | | // æ¯å¦è®¾ç½®é¢æ£è¯·æ±ï¼OPTIONSï¼çç¼åæ¶é´ |
| | | "SetPreflightMaxAge": true, |
| | | // 颿£è¯·æ±çæå¤§ç¼åæ¶é´ï¼ç§ï¼ |
| | | "PreflightMaxAgeSeconds": 600 |
| | | }, |
| | | |
| | | // ==================== Swagger API ææ¡£é
ç½® ==================== |
| | | "Swagger": { |
| | | // API ææ¡£æ é¢ |
| | | "Title": "KH.WMS API", |
| | | // API çæ¬ |
| | | "Version": "v1", |
| | | // API æè¿° |
| | | "Description": "KH.WMS API æ¥å£ææ¡£", |
| | | // è系人åç§° |
| | | "ContactName": "", |
| | | // è系人é®ç®± |
| | | "ContactEmail": "", |
| | | // è系人 URL |
| | | "ContactUrl": "", |
| | | // 许å¯è¯åç§° |
| | | "LicenseName": "", |
| | | // 许å¯è¯ URL |
| | | "LicenseUrl": "", |
| | | // Swagger UI 访é®è·¯å¾åç¼ï¼ç©ºåç¬¦ä¸²è¡¨ç¤ºæ ¹è·¯å¾ï¼ |
| | | "RoutePrefix": "swagger", |
| | | // æ¯å¦å¯ç¨ JWT è®¤è¯ |
| | | "EnableJwt": true |
| | | }, |
| | | |
| | | // ==================== MiniProfiler æ§è½åæé
ç½® ==================== |
| | | "MiniProfiler": { |
| | | // MiniProfiler è·¯ç±åºç¡è·¯å¾ |
| | | "RouteBasePath": "/profiler", |
| | | // æ¯å¦å¨ç产ç¯å¢å¯ç¨ |
| | | "EnableInProduction": false, |
| | | // æ¯å¦è·è¸ªæ°æ®åºè¿æ¥çæå¼/å
³é |
| | | "TrackConnectionOpenClose": true, |
| | | // å æ è·è¸ªé¿åº¦ |
| | | "StackTraceLength": 5 |
| | | }, |
| | | |
| | | // ==================== RateLimit éæµé
ç½® ==================== |
| | | "RateLimit": { |
| | | // æ¶é´çªå£å
å
许çè¯·æ±æ° |
| | | "RequestLimit": 100, |
| | | // æ¶é´çªå£ï¼ç§ï¼ |
| | | "WindowSeconds": 60, |
| | | // ç¼åé®åç¼ |
| | | "KeyPrefix": "ratelimit" |
| | | }, |
| | | |
| | | // ==================== åºç¨é
ç½® ==================== |
| | | "App": { |
| | | // åºç¨åç§° |
| | | "AppName": "KH.WMS" |
| | | }, |
| | | |
| | | // ==================== Serilog æ¥å¿é
ç½® ==================== |
| | | "Serilog": { |
| | | // æä½æ¥å¿çº§å« |
| | | "MinimumLevel": { |
| | | // é»è®¤çº§å«: Debug, Information, Warning, Error, Fatal |
| | | "Default": "Debug", |
| | | // è¦çç¹å®å½å空é´çæ¥å¿çº§å« |
| | | "Override": { |
| | | "Microsoft": "Warning", |
| | | "Microsoft.Hosting.Lifetime": "Information", |
| | | "Microsoft.EntityFrameworkCore": "Warning", |
| | | "System": "Warning" |
| | | } |
| | | }, |
| | | // æ¥å¿æä»¶åå¨è·¯å¾ |
| | | "LogPath": "Logs", |
| | | // æ¥å¿ä¿çå¤©æ° |
| | | "RetentionDays": 30, |
| | | // å个æ¥å¿æä»¶æå¤§å¤§å°ï¼MBï¼ |
| | | "MaxFileSizeMB": 5, |
| | | // æ¯å¦è¾åºå°æ§å¶å° |
| | | "WriteToConsole": true, |
| | | // æ¥å¿æä»¶åé
ç½® |
| | | "FileNames": { |
| | | // æ®éæ¥å¿æä»¶å |
| | | "Log": "log", |
| | | // é误æ¥å¿æä»¶å |
| | | "Error": "error", |
| | | // è¦åæ¥å¿æä»¶å |
| | | "Warning": "warning" |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | |  |
| | | Microsoft Visual Studio Solution File, Format Version 12.00 |
| | | # Visual Studio Version 17 |
| | | VisualStudioVersion = 17.14.36915.13 |
| | | MinimumVisualStudioVersion = 10.0.40219.1 |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KH.WMS.Core", "KH.WMS.Core\KH.WMS.Core.csproj", "{5CFD11CC-9659-88FD-E2AE-7BA35901BF99}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KH.WMS.Model", "KH.WMS.Model\KH.WMS.Model.csproj", "{C45B4DD7-40D4-C442-2392-8568CE6151A5}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KH.WMS.Server", "KH.WMS.Server\KH.WMS.Server.csproj", "{30290226-69D6-B736-0678-A3950D90BAA9}" |
| | | EndProject |
| | | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Commons", "Commons", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" |
| | | EndProject |
| | | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Entities", "Entities", "{BDB666C0-1EC8-4111-A97F-D034F4582B4E}" |
| | | EndProject |
| | | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{BFD4B6A7-B20C-4C5B-9760-F628FF39FDA4}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KH.WMS.Common", "Common\KH.WMS.Common\KH.WMS.Common.csproj", "{FAAC50D0-A5C3-9EAF-DB00-7CE5583285B4}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KH.WMS.Extensions", "Extensions\KH.WMS.Extensions\KH.WMS.Extensions.csproj", "{E2D70705-05DB-5D0E-169D-82766317D467}" |
| | | EndProject |
| | | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{3E8E4AE3-8A9A-4012-853B-82C16A74DE6C}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KH.WMS.Tools", "Tools\KH.WMS.Tools\KH.WMS.Tools.csproj", "{F51A470B-FC5D-43A3-A721-23007FD3416B}" |
| | | EndProject |
| | | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{D992C823-A45A-4F9D-98DB-D799429DC8A1}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KH.WMS.TestProj", "Test\KH.WMS.TestProj\KH.WMS.TestProj.csproj", "{8A41DD65-BD5A-4842-BEED-46BACCBA52C1}" |
| | | EndProject |
| | | Global |
| | | GlobalSection(SolutionConfigurationPlatforms) = preSolution |
| | | Debug|Any CPU = Debug|Any CPU |
| | | Release|Any CPU = Release|Any CPU |
| | | EndGlobalSection |
| | | GlobalSection(ProjectConfigurationPlatforms) = postSolution |
| | | {5CFD11CC-9659-88FD-E2AE-7BA35901BF99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {5CFD11CC-9659-88FD-E2AE-7BA35901BF99}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {5CFD11CC-9659-88FD-E2AE-7BA35901BF99}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {5CFD11CC-9659-88FD-E2AE-7BA35901BF99}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {C45B4DD7-40D4-C442-2392-8568CE6151A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {C45B4DD7-40D4-C442-2392-8568CE6151A5}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {C45B4DD7-40D4-C442-2392-8568CE6151A5}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {C45B4DD7-40D4-C442-2392-8568CE6151A5}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {30290226-69D6-B736-0678-A3950D90BAA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {30290226-69D6-B736-0678-A3950D90BAA9}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {30290226-69D6-B736-0678-A3950D90BAA9}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {30290226-69D6-B736-0678-A3950D90BAA9}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {FAAC50D0-A5C3-9EAF-DB00-7CE5583285B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {FAAC50D0-A5C3-9EAF-DB00-7CE5583285B4}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {FAAC50D0-A5C3-9EAF-DB00-7CE5583285B4}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {FAAC50D0-A5C3-9EAF-DB00-7CE5583285B4}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {E2D70705-05DB-5D0E-169D-82766317D467}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {E2D70705-05DB-5D0E-169D-82766317D467}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {E2D70705-05DB-5D0E-169D-82766317D467}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {E2D70705-05DB-5D0E-169D-82766317D467}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {F51A470B-FC5D-43A3-A721-23007FD3416B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {F51A470B-FC5D-43A3-A721-23007FD3416B}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {F51A470B-FC5D-43A3-A721-23007FD3416B}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {F51A470B-FC5D-43A3-A721-23007FD3416B}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {8A41DD65-BD5A-4842-BEED-46BACCBA52C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {8A41DD65-BD5A-4842-BEED-46BACCBA52C1}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {8A41DD65-BD5A-4842-BEED-46BACCBA52C1}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {8A41DD65-BD5A-4842-BEED-46BACCBA52C1}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | EndGlobalSection |
| | | GlobalSection(SolutionProperties) = preSolution |
| | | HideSolutionNode = FALSE |
| | | EndGlobalSection |
| | | GlobalSection(NestedProjects) = preSolution |
| | | {FAAC50D0-A5C3-9EAF-DB00-7CE5583285B4} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} |
| | | {E2D70705-05DB-5D0E-169D-82766317D467} = {BFD4B6A7-B20C-4C5B-9760-F628FF39FDA4} |
| | | {F51A470B-FC5D-43A3-A721-23007FD3416B} = {3E8E4AE3-8A9A-4012-853B-82C16A74DE6C} |
| | | {8A41DD65-BD5A-4842-BEED-46BACCBA52C1} = {D992C823-A45A-4F9D-98DB-D799429DC8A1} |
| | | EndGlobalSection |
| | | GlobalSection(ExtensibilityGlobals) = postSolution |
| | | SolutionGuid = {15E47327-2943-49D3-BD74-0F9CFCCC8E1C} |
| | | EndGlobalSection |
| | | EndGlobal |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using KH.WMS.Core.Attributes; |
| | | |
| | | namespace KH.WMS.TestProj; |
| | | |
| | | /// <summary> |
| | | /// è°ç¨é¾è¿½è¸ªæ¼ç¤ºæå¡ï¼æ¥å£æ¨¡å¼ - æ¯æå®æ´çæ¹æ³é¾è¿½è¸ªï¼ |
| | | /// </summary> |
| | | [LogInterceptor(LogParameters = true, LogReturnValue = true)] |
| | | public class CallTraceDemoService : ICallTraceDemoService |
| | | { |
| | | private readonly ICallTraceDemoService _self; |
| | | |
| | | /// <summary> |
| | | /// æé 彿° - 注å
¥èªå·±ï¼ä»£çå¯¹è±¡ï¼ |
| | | /// </summary> |
| | | public CallTraceDemoService(ICallTraceDemoService self) |
| | | { |
| | | _self = self; // è¿éç self æ¯ä»£ç对象ï¼ä¸æ¯ this |
| | | } |
| | | |
| | | public string ProcessOrder() |
| | | { |
| | | // éè¿ä»£çè°ç¨ï¼å
鍿¹æ³ä¹ä¼è¢«æ¦æª â
|
| | | _self.ValidateOrder(); |
| | | _self.CalculatePrice(); |
| | | _self.SaveOrder(); |
| | | return "Order processed successfully"; |
| | | } |
| | | |
| | | public void ValidateOrder() |
| | | { |
| | | // éè¿ä»£çè°ç¨ï¼åæ¹æ³ä¹ä¼è¢«æ¦æª â
|
| | | _self.CheckInventory(); |
| | | _self.CheckCustomer(); |
| | | } |
| | | |
| | | public bool CheckInventory() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | public bool CheckCustomer() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | public decimal CalculatePrice() |
| | | { |
| | | _self.ApplyDiscount(); |
| | | return 100.50m; |
| | | } |
| | | |
| | | public void ApplyDiscount() |
| | | { |
| | | // ææ£é»è¾ |
| | | } |
| | | |
| | | public void SaveOrder() |
| | | { |
| | | _self.NotifyCustomer(); |
| | | } |
| | | |
| | | public void NotifyCustomer() |
| | | { |
| | | // åééç¥ |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | namespace KH.WMS.TestProj; |
| | | |
| | | /// <summary> |
| | | /// è°ç¨é¾è¿½è¸ªæ¼ç¤ºæå¡æ¥å£ |
| | | /// </summary> |
| | | public interface ICallTraceDemoService |
| | | { |
| | | /// <summary> |
| | | /// å¤ç订å |
| | | /// </summary> |
| | | string ProcessOrder(); |
| | | |
| | | /// <summary> |
| | | /// éªè¯è®¢å |
| | | /// </summary> |
| | | void ValidateOrder(); |
| | | |
| | | /// <summary> |
| | | /// æ£æ¥åºå |
| | | /// </summary> |
| | | bool CheckInventory(); |
| | | |
| | | /// <summary> |
| | | /// æ£æ¥å®¢æ· |
| | | /// </summary> |
| | | bool CheckCustomer(); |
| | | |
| | | /// <summary> |
| | | /// 计ç®ä»·æ ¼ |
| | | /// </summary> |
| | | decimal CalculatePrice(); |
| | | |
| | | /// <summary> |
| | | /// åºç¨ææ£ |
| | | /// </summary> |
| | | void ApplyDiscount(); |
| | | |
| | | /// <summary> |
| | | /// ä¿å订å |
| | | /// </summary> |
| | | void SaveOrder(); |
| | | |
| | | /// <summary> |
| | | /// éç¥å®¢æ· |
| | | /// </summary> |
| | | void NotifyCustomer(); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace KH.WMS.TestProj |
| | | { |
| | | public interface ITestService |
| | | { |
| | | public object GetTestObject(); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <Project Sdk="Microsoft.NET.Sdk"> |
| | | |
| | | <PropertyGroup> |
| | | <TargetFramework>net8.0</TargetFramework> |
| | | <ImplicitUsings>enable</ImplicitUsings> |
| | | <Nullable>enable</Nullable> |
| | | </PropertyGroup> |
| | | |
| | | <ItemGroup> |
| | | <ProjectReference Include="..\..\KH.WMS.Core\KH.WMS.Core.csproj" /> |
| | | </ItemGroup> |
| | | |
| | | </Project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using KH.WMS.Core.Attributes; |
| | | using KH.WMS.Core.DependencyInjection.ServiceLifetimes; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | |
| | | namespace KH.WMS.TestProj |
| | | { |
| | | [SelfRegisteredService(Lifetime = ServiceLifetime.Scoped)] |
| | | public class TestOneService |
| | | { |
| | | [LogInterceptor(LogParameters = true, LogReturnValue = true, LogLevel = Microsoft.Extensions.Logging.LogLevel.Information)] |
| | | public virtual object GetTestObject() |
| | | { |
| | | Thread.Sleep(1000 * 2); |
| | | return GetType().FullName ?? string.Empty; |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using KH.WMS.Core.Attributes; |
| | | using KH.WMS.Core.DependencyInjection.ServiceLifetimes; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | |
| | | namespace KH.WMS.TestProj; |
| | | |
| | | /// <summary> |
| | | /// æµè¯æå¡ï¼å¸¦æ¥å¿æ¦æªå¨ï¼ |
| | | /// </summary> |
| | | |
| | | [RegisteredService(Lifetime = ServiceLifetime.Scoped)] |
| | | public class TestService : ITestService |
| | | { |
| | | private readonly TestOneService _testOneService; |
| | | private readonly TestTwoService _testTwoService; |
| | | |
| | | public TestService(TestOneService testOneService, TestTwoService testTwoService) |
| | | { |
| | | _testOneService = testOneService; |
| | | _testTwoService = testTwoService; |
| | | } |
| | | |
| | | [LogInterceptor(LogParameters = true, LogReturnValue = true, LogLevel = Microsoft.Extensions.Logging.LogLevel.Information)] |
| | | public object GetTestObject() |
| | | { |
| | | string message = "Executing TestService.GetTestObject"; |
| | | |
| | | message += _testOneService.GetTestObject(); |
| | | |
| | | message += _testTwoService.GetTestObject(); |
| | | |
| | | message += GetType().FullName ?? string.Empty; |
| | | |
| | | message += " Finished TestService.GetTestObject"; |
| | | |
| | | return message; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using KH.WMS.Core.Attributes; |
| | | using KH.WMS.Core.DependencyInjection.ServiceLifetimes; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | |
| | | namespace KH.WMS.TestProj |
| | | { |
| | | [SelfRegisteredService(Lifetime = ServiceLifetime.Scoped)] |
| | | public class TestTwoService |
| | | { |
| | | [LogInterceptor(LogParameters = true, LogReturnValue = true, LogLevel = Microsoft.Extensions.Logging.LogLevel.Information)] |
| | | public virtual object GetTestObject() |
| | | { |
| | | return GetType().FullName ?? string.Empty; |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <Project Sdk="Microsoft.NET.Sdk"> |
| | | |
| | | <PropertyGroup> |
| | | <OutputType>Exe</OutputType> |
| | | <TargetFramework>net8.0</TargetFramework> |
| | | <ImplicitUsings>enable</ImplicitUsings> |
| | | <Nullable>enable</Nullable> |
| | | </PropertyGroup> |
| | | |
| | | <ItemGroup> |
| | | <PackageReference Include="Autofac" Version="8.0.0" /> |
| | | <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="9.0.0" /> |
| | | <PackageReference Include="SqlSugarCore" Version="5.1.4.152" /> |
| | | </ItemGroup> |
| | | |
| | | </Project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | // See https://aka.ms/new-console-template for more information |
| | | Console.WriteLine("Hello, World!"); |