Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
149d8a9d41 |
@@ -17,7 +17,7 @@ charset = utf-8
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
|
||||
[*.{js,json,xaml,axaml,xml,resx,resw,csproj,wapproj,appxmanifest,props}]
|
||||
[*.{js,json,xaml,axaml,xml,resx,resw,csproj,wapproj,appxmanifest,.props}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
@@ -240,192 +240,3 @@ dotnet_style_namespace_match_folder = false
|
||||
|
||||
# IDE0130: 命名空间与文件夹结构不匹配
|
||||
dotnet_diagnostic.IDE0130.severity = none
|
||||
|
||||
# IDE0055: 修正格式
|
||||
dotnet_diagnostic.IDE0055.severity = error
|
||||
|
||||
# IDE1006: 命名样式
|
||||
dotnet_diagnostic.IDE1006.severity = error
|
||||
|
||||
# SA1600: Elements should be documented
|
||||
dotnet_diagnostic.SA1600.severity = none
|
||||
|
||||
# SA1629: Documentation text should end with a period
|
||||
dotnet_diagnostic.SA1629.severity = silent
|
||||
|
||||
# SA1101: Prefix local calls with this
|
||||
dotnet_diagnostic.SA1101.severity = silent
|
||||
|
||||
# SA1623: Property summary documentation should match accessors
|
||||
dotnet_diagnostic.SA1623.severity = none
|
||||
|
||||
# SA1200: Using directives should be placed correctly
|
||||
dotnet_diagnostic.SA1200.severity = none
|
||||
|
||||
# SA1208: System using directives should be placed before other using directives
|
||||
dotnet_diagnostic.SA1208.severity = silent
|
||||
|
||||
# Default severity for analyzer diagnostics with category 'StyleCop.CSharp.LayoutRules'
|
||||
dotnet_analyzer_diagnostic.category-StyleCop.CSharp.LayoutRules.severity = error
|
||||
|
||||
# SA1400: Access modifier should be declared
|
||||
dotnet_diagnostic.SA1400.severity = silent
|
||||
|
||||
# SA1633: File should have header
|
||||
dotnet_diagnostic.SA1633.severity = silent
|
||||
|
||||
# SA1128: Put constructor initializers on their own line
|
||||
dotnet_diagnostic.SA1128.severity = silent
|
||||
|
||||
# SA1413: Use trailing comma in multi-line initializers
|
||||
dotnet_diagnostic.SA1413.severity = suggestion
|
||||
|
||||
# SA1005: Single line comments should begin with single space
|
||||
dotnet_diagnostic.SA1005.severity = none
|
||||
|
||||
# SA1515: Single-line comment should be preceded by blank line
|
||||
dotnet_diagnostic.SA1515.severity = silent
|
||||
|
||||
# SA1512: Single-line comments should not be followed by blank line
|
||||
dotnet_diagnostic.SA1512.severity = silent
|
||||
|
||||
# SA1122: Use string.Empty for empty strings
|
||||
dotnet_diagnostic.SA1122.severity = silent
|
||||
|
||||
# SA1616: Element return value documentation should have text
|
||||
dotnet_diagnostic.SA1616.severity = silent
|
||||
|
||||
# SA1310: Field names should not contain underscore
|
||||
dotnet_diagnostic.SA1310.severity = silent
|
||||
|
||||
# SA1137: Elements should have the same indentation
|
||||
dotnet_diagnostic.SA1137.severity = error
|
||||
|
||||
# SA1503: Braces should not be omitted
|
||||
dotnet_diagnostic.SA1503.severity = silent
|
||||
|
||||
# SA1513: Closing brace should be followed by blank line
|
||||
dotnet_diagnostic.SA1513.severity = silent
|
||||
|
||||
# SA1402: File may only contain a single type
|
||||
dotnet_diagnostic.SA1402.severity = silent
|
||||
|
||||
# SA1133: Do not combine attributes
|
||||
dotnet_diagnostic.SA1133.severity = silent
|
||||
|
||||
# SA1011: Closing square brackets should be spaced correctly
|
||||
dotnet_diagnostic.SA1011.severity = silent
|
||||
|
||||
# SA1502: Element should not be on a single line
|
||||
dotnet_diagnostic.SA1502.severity = silent
|
||||
|
||||
# SA1201: Elements should appear in the correct order
|
||||
dotnet_diagnostic.SA1201.severity = silent
|
||||
|
||||
# SA1505: Opening braces should not be followed by blank line
|
||||
dotnet_diagnostic.SA1505.severity = silent
|
||||
|
||||
# SA1508: Closing braces should not be preceded by blank line
|
||||
dotnet_diagnostic.SA1508.severity = silent
|
||||
|
||||
# SA1614: Element parameter documentation should have text
|
||||
dotnet_diagnostic.SA1614.severity = silent
|
||||
|
||||
# SA1116: Split parameters should start on line after declaration
|
||||
dotnet_diagnostic.SA1116.severity = silent
|
||||
|
||||
# SA1601: Partial elements should be documented
|
||||
dotnet_diagnostic.SA1601.severity = silent
|
||||
|
||||
# SA1009: Closing parenthesis should be spaced correctly
|
||||
dotnet_diagnostic.SA1009.severity = silent
|
||||
|
||||
# SA1202: Elements should be ordered by access
|
||||
dotnet_diagnostic.SA1202.severity = silent
|
||||
|
||||
# SA1311: Static readonly fields should begin with upper-case letter
|
||||
dotnet_diagnostic.SA1311.severity = silent
|
||||
|
||||
# SA1127: Generic type constraints should be on their own line
|
||||
dotnet_diagnostic.SA1127.severity = silent
|
||||
|
||||
# SA1503: Braces should not be omitted
|
||||
dotnet_diagnostic.SA1503.severity = silent
|
||||
|
||||
# SA1649: File name should match first type name
|
||||
dotnet_diagnostic.SA1649.severity = silent
|
||||
|
||||
# SA1210: Using directives should be ordered alphabetically by namespace
|
||||
dotnet_diagnostic.SA1210.severity = silent
|
||||
|
||||
# SA1028: Code should not contain trailing whitespace
|
||||
dotnet_diagnostic.SA1028.severity = silent
|
||||
|
||||
# SA1204: Static elements should appear before instance elements
|
||||
dotnet_diagnostic.SA1204.severity = silent
|
||||
|
||||
# SA1203: Constants should appear before fields
|
||||
dotnet_diagnostic.SA1203.severity = silent
|
||||
|
||||
# SA1123: Do not place regions within elements
|
||||
dotnet_diagnostic.SA1123.severity = silent
|
||||
|
||||
# SA1615: Element return value should be documented
|
||||
dotnet_diagnostic.SA1615.severity = silent
|
||||
|
||||
# SA1611: Element parameters should be documented
|
||||
dotnet_diagnostic.SA1611.severity = silent
|
||||
|
||||
# SA1124: Do not use regions
|
||||
dotnet_diagnostic.SA1124.severity = silent
|
||||
|
||||
# SA1520: Use braces consistently
|
||||
dotnet_diagnostic.SA1520.severity = silent
|
||||
|
||||
# SA1107: Code should not contain multiple statements on one line
|
||||
dotnet_diagnostic.SA1107.severity = silent
|
||||
|
||||
# SA1312: Variable names should begin with lower-case letter
|
||||
dotnet_diagnostic.SA1312.severity = error
|
||||
|
||||
# SA1519: Braces should not be omitted from multi-line child statement
|
||||
dotnet_diagnostic.SA1519.severity = silent
|
||||
|
||||
# SA1000: Keywords should be spaced correctly
|
||||
dotnet_diagnostic.SA1000.severity = silent
|
||||
|
||||
# SA1205: Partial elements should declare access
|
||||
dotnet_diagnostic.SA1205.severity = silent
|
||||
|
||||
# SA1401: Fields should be private
|
||||
dotnet_diagnostic.SA1401.severity = silent
|
||||
|
||||
# SA1622: Generic type parameter documentation should have text
|
||||
dotnet_diagnostic.SA1622.severity = silent
|
||||
|
||||
# SA1627: Documentation text should not be empty
|
||||
dotnet_diagnostic.SA1627.severity = silent
|
||||
|
||||
# SA1403: File may only contain a single namespace
|
||||
dotnet_diagnostic.SA1403.severity = silent
|
||||
|
||||
# SA1602: Enumeration items should be documented
|
||||
dotnet_diagnostic.SA1602.severity = silent
|
||||
|
||||
# SA1108: Block statements should not contain embedded comments
|
||||
dotnet_diagnostic.SA1108.severity = silent
|
||||
|
||||
# SA1642: Constructor summary documentation should begin with standard text
|
||||
dotnet_diagnostic.SA1642.severity = silent
|
||||
|
||||
# SA1117: Parameters should be on same line or separate lines
|
||||
dotnet_diagnostic.SA1117.severity = silent
|
||||
|
||||
# SA1501: Statement should not be on a single line
|
||||
dotnet_diagnostic.SA1501.severity = silent
|
||||
|
||||
# SA1500: Braces for multi-line statements should not share line
|
||||
dotnet_diagnostic.SA1500.severity = silent
|
||||
|
||||
# SA1518: Use line endings correctly at end of file
|
||||
dotnet_diagnostic.SA1518.severity = silent
|
||||
@@ -17,8 +17,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
configuration: [ Debug, Release ]
|
||||
# os: [ windows-latest, macOS-latest, ubuntu-latest ]
|
||||
os: [ windows-latest, macOS-latest ]
|
||||
os: [ windows-latest, macOS-latest, ubuntu-latest ]
|
||||
# rid: [ fd-win-x64, win-x64, osx-x64, linux-x64,linux-arm64 ]
|
||||
|
||||
steps:
|
||||
@@ -41,17 +40,9 @@ jobs:
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install macos
|
||||
|
||||
- name: Install Android SDK(Unix)
|
||||
if: ${{ matrix.os == 'macOS-latest' || matrix.os == 'ubuntu-latest' }}
|
||||
run: sudo dotnet workload install android
|
||||
|
||||
- name: Install Android SDK(Windows)
|
||||
- name: Install Maui(Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install android
|
||||
|
||||
# - name: Install Maui(Windows)
|
||||
# if: matrix.os == 'windows-latest'
|
||||
# run: dotnet workload install maui
|
||||
run: dotnet workload install maui
|
||||
|
||||
- name: Verify dotnet info
|
||||
run: dotnet --info
|
||||
@@ -95,9 +86,9 @@ jobs:
|
||||
- name: Run ST.Client.Desktop.UnitTest
|
||||
run: dotnet test ./tests/ST.Client.Desktop.UnitTest/ST.Client.Desktop.UnitTest.csproj -c "${{ matrix.configuration }}"
|
||||
|
||||
- name: dotnet ST.Client.Desktop.UnitTest test
|
||||
if: matrix.os != 'windows-latest'
|
||||
run: dotnet test ./tests/ST.Client.Desktop.UnitTest/ST.Client.Desktop.UnitTest.csproj
|
||||
# - name: dotnet ST.Client.Desktop.UnitTest test
|
||||
# if: matrix.os != 'windows-latest'
|
||||
# run: dotnet test ./tests/ST.Client.Desktop.UnitTest/ST.Client.Desktop.UnitTest.csproj
|
||||
|
||||
- name: Get Short CommitId
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
@@ -126,7 +117,7 @@ jobs:
|
||||
- name: Upload fd-win-x64 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_win_x64_fde_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_win_x64_fde_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
@@ -134,7 +125,7 @@ jobs:
|
||||
- name: Upload win-x64 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_win_x64_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_win_x64_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
@@ -142,7 +133,7 @@ jobs:
|
||||
- name: Upload macos-x64 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_macos_x64_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_macos_x64_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
@@ -150,7 +141,7 @@ jobs:
|
||||
- name: Upload macos-arm64 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_macos_arm64_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_macos_arm64_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
@@ -158,7 +149,7 @@ jobs:
|
||||
- name: Upload linux-x64 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_linux_x64_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_linux_x64_${{ env.GITHUB_SHA_SHORT }}.tar.zst
|
||||
@@ -166,7 +157,7 @@ jobs:
|
||||
- name: Upload linux-arm64 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_linux_arm64_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_linux_arm64_${{ env.GITHUB_SHA_SHORT }}.tar.zst
|
||||
|
||||
@@ -1,313 +1,295 @@
|
||||
<Project>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('net6.0')) ">
|
||||
<!-- Microsoft.Extensions.* & AspNetCore & EntityFrameworkCore(NET60) -->
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.4" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.4" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.4" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.4" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.4" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.4" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.4" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.4" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="6.0.4" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.4" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.4" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('net5.0')) ">
|
||||
<!-- Microsoft.Extensions.* & AspNetCore & EntityFrameworkCore(NET50) -->
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="5.0.2" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="5.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="5.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="5.0.16" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.16" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="5.0.14" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.16" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.16" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.16" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.16" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.16" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="5.0.16" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="5.0.16" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="5.0.16" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) Or $(TargetFramework.StartsWith('netcoreapp3.1'))">
|
||||
<!-- Microsoft.Extensions.* & AspNetCore & EntityFrameworkCore(NETCOREAPP31) -->
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.24" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.24" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('net6.0')) ">
|
||||
<!-- Entity Framework Plus -->
|
||||
<!-- A FREE & Open Source library to enhance EF6 and EF Core -->
|
||||
<PackageVersion Include="Z.EntityFramework.Plus.EFCore" Version="6.13.17" />
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('net6.0')) ">
|
||||
<!-- Microsoft.Extensions.* & AspNetCore & EntityFrameworkCore(NET60) -->
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.2" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('net5.0')) ">
|
||||
<!-- Microsoft.Extensions.* & AspNetCore & EntityFrameworkCore(NET50) -->
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="5.0.14" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.14" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="5.0.14" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.14" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.14" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.14" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.14" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.14" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="5.0.14" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="5.0.14" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="5.0.14" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) Or $(TargetFramework.StartsWith('netcoreapp3.1'))">
|
||||
<!-- Microsoft.Extensions.* & AspNetCore & EntityFrameworkCore(NETCOREAPP31) -->
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.22" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('net6.0')) ">
|
||||
<!-- Entity Framework Plus -->
|
||||
<!-- A FREE & Open Source library to enhance EF6 and EF Core -->
|
||||
<PackageVersion Include="Z.EntityFramework.Plus.EFCore" Version="6.13.12" />
|
||||
|
||||
<!-- AspNetCore 6 OpenId/OAuth -->
|
||||
<PackageVersion Include="Microsoft.IdentityModel.Protocols" Version="6.17.0" />
|
||||
<PackageVersion Include="AspNet.Security.OpenId.Steam" Version="6.0.0" />
|
||||
<PackageVersion Include="AspNet.Security.OAuth.QQ" Version="6.0.6" />
|
||||
<PackageVersion Include="AspNet.Security.OAuth.Apple" Version="6.0.6" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net48' Or '$(TargetFramework)' == 'net472' Or '$(TargetFramework)' == 'net471' Or '$(TargetFramework)' == 'net46' Or '$(TargetFramework)' == 'net462' Or '$(TargetFramework)' == 'net461' Or '$(TargetFramework)' == 'net45' Or '$(TargetFramework)' == 'net452' Or '$(TargetFramework)' == 'net451' ">
|
||||
<!-- WindowsRuntime(NETFX) & PowerShell 5 -->
|
||||
<PackageVersion Include="System.Runtime.WindowsRuntime" Version="4.7.0" />
|
||||
<PackageVersion Include="System.Runtime.WindowsRuntime.UI.Xaml" Version="4.7.0" />
|
||||
<PackageVersion Include="Microsoft.PowerShell.5.ReferenceAssemblies" Version="1.1.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) Or $(TargetFramework.StartsWith('net5.0')) Or $(TargetFramework.StartsWith('netcoreapp3.1')) Or $(TargetFramework.StartsWith('netcoreapp3.0')) Or $(TargetFramework.StartsWith('netcoreapp2.2')) Or $(TargetFramework.StartsWith('netcoreapp2.1')) Or $(TargetFramework.StartsWith('netcoreapp2.0')) ">
|
||||
<!-- .NET Platform Extensions 5 -->
|
||||
<PackageVersion Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) ">
|
||||
<!-- BCL(NETSTANDARD) -->
|
||||
<PackageVersion Include="System.Text.Json" Version="6.0.2" />
|
||||
<PackageVersion Include="System.Text.Encodings.Web" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Drawing.Common" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0" />
|
||||
<PackageVersion Include="System.Buffers" Version="4.5.1" />
|
||||
<PackageVersion Include="System.Memory" Version="4.5.4" />
|
||||
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
|
||||
<PackageVersion Include="System.Diagnostics.Tracing" Version="4.3.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<!-- Microsoft.* -->
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
|
||||
<!--<PackageVersion Include="Microsoft.Windows.CsWinRT" Version="1.4.1" />-->
|
||||
<!--<PackageVersion Include="Microsoft.Windows.SDK.NET.Ref" Version="10.0.19041.22" />-->
|
||||
<!--<PackageVersion Include="Microsoft.Windows.SDK.Contracts" Version="10.0.19041.1" />-->
|
||||
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22000.197" />
|
||||
<!-- AspNetCore 6 OpenId/OAuth -->
|
||||
<PackageVersion Include="AspNet.Security.OpenId.Steam" Version="6.0.0" />
|
||||
<PackageVersion Include="AspNet.Security.OAuth.QQ" Version="6.0.4" />
|
||||
<PackageVersion Include="AspNet.Security.OAuth.Apple" Version="6.0.4" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net48' Or '$(TargetFramework)' == 'net472' Or '$(TargetFramework)' == 'net471' Or '$(TargetFramework)' == 'net46' Or '$(TargetFramework)' == 'net462' Or '$(TargetFramework)' == 'net461' Or '$(TargetFramework)' == 'net45' Or '$(TargetFramework)' == 'net452' Or '$(TargetFramework)' == 'net451' ">
|
||||
<!-- WindowsRuntime(NETFX) & PowerShell 5 -->
|
||||
<PackageVersion Include="System.Runtime.WindowsRuntime" Version="4.7.0" />
|
||||
<PackageVersion Include="System.Runtime.WindowsRuntime.UI.Xaml" Version="4.7.0" />
|
||||
<PackageVersion Include="Microsoft.PowerShell.5.ReferenceAssemblies" Version="1.1.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) Or $(TargetFramework.StartsWith('net5.0')) Or $(TargetFramework.StartsWith('netcoreapp3.1')) Or $(TargetFramework.StartsWith('netcoreapp3.0')) Or $(TargetFramework.StartsWith('netcoreapp2.2')) Or $(TargetFramework.StartsWith('netcoreapp2.1')) Or $(TargetFramework.StartsWith('netcoreapp2.0')) ">
|
||||
<!-- .NET Platform Extensions 5 -->
|
||||
<PackageVersion Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) ">
|
||||
<!-- BCL(NETSTANDARD) -->
|
||||
<PackageVersion Include="System.Text.Json" Version="6.0.2" />
|
||||
<PackageVersion Include="System.Text.Encodings.Web" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Drawing.Common" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0" />
|
||||
<PackageVersion Include="System.Buffers" Version="4.5.1" />
|
||||
<PackageVersion Include="System.Memory" Version="4.5.4" />
|
||||
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
|
||||
<PackageVersion Include="System.Diagnostics.Tracing" Version="4.3.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<!-- Microsoft.* -->
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
|
||||
<!--<PackageVersion Include="Microsoft.Windows.CsWinRT" Version="1.4.1" />-->
|
||||
<!--<PackageVersion Include="Microsoft.Windows.SDK.NET.Ref" Version="10.0.19041.22" />-->
|
||||
<!--<PackageVersion Include="Microsoft.Windows.SDK.Contracts" Version="10.0.19041.1" />-->
|
||||
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22000.197" />
|
||||
|
||||
<!-- AppCenter.* -->
|
||||
<PackageVersion Include="Microsoft.AppCenter" Version="4.5.0" />
|
||||
<PackageVersion Include="Microsoft.AppCenter.Analytics" Version="4.5.0" />
|
||||
<PackageVersion Include="Microsoft.AppCenter.Crashes" Version="4.5.0" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter" Version="4.5.0" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter.Analytics" Version="4.5.0" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter.Crashes" Version="4.5.0" />
|
||||
<!--<PackageVersion Include="nor0x.AppCenter" Version="4.4.0-XMAC" />
|
||||
<!-- AppCenter.* -->
|
||||
<PackageVersion Include="Microsoft.AppCenter" Version="4.5.0" />
|
||||
<PackageVersion Include="Microsoft.AppCenter.Analytics" Version="4.5.0" />
|
||||
<PackageVersion Include="Microsoft.AppCenter.Crashes" Version="4.5.0" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter" Version="4.5.0" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter.Analytics" Version="4.5.0" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter.Crashes" Version="4.5.0" />
|
||||
<!--<PackageVersion Include="nor0x.AppCenter" Version="4.4.0-XMAC" />
|
||||
<PackageVersion Include="nor0x.AppCenter.Analytics" Version="4.4.0-XMAC" />
|
||||
<PackageVersion Include="nor0x.AppCenter.Crashes" Version="4.4.0-XMAC" />-->
|
||||
|
||||
<!-- .NET Platform Extensions 6 -->
|
||||
<PackageVersion Include="System.Security.Cryptography.ProtectedData" Version="6.0.0" />
|
||||
<!-- .NET Platform Extensions 6 -->
|
||||
<PackageVersion Include="System.Security.Cryptography.ProtectedData" Version="6.0.0" />
|
||||
|
||||
<!-- Xamarin -->
|
||||
<PackageVersion Include="Xamarin.Essentials" Version="1.7.2" />
|
||||
<!-- Xamarin.Forms -->
|
||||
<PackageVersion Include="Xamarin.Forms" Version="5.0.0.2401" />
|
||||
<PackageVersion Include="Xamarin.Forms.Visual.Material" Version="5.0.0.2401" />
|
||||
<PackageVersion Include="Xam.Plugins.Forms.ImageCircle" Version="3.1.1.1-beta" />
|
||||
<!-- Xamarin -->
|
||||
<PackageVersion Include="Xamarin.Essentials" Version="1.7.1" />
|
||||
<!-- Xamarin.Forms -->
|
||||
<PackageVersion Include="Xamarin.Forms" Version="5.0.0.2337" />
|
||||
<PackageVersion Include="Xamarin.Forms.Visual.Material" Version="5.0.0.2337" />
|
||||
<PackageVersion Include="Xam.Plugins.Forms.ImageCircle" Version="3.1.1.1-beta" />
|
||||
|
||||
<!-- NUnit & NUnit.Xamarin & Moq -->
|
||||
<PackageVersion Include="NUnit" Version="3.13.3" />
|
||||
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
<PackageVersion Include="nunit.xamarin" Version="3.6.1" />
|
||||
<PackageVersion Include="PCLStorage" Version="1.0.2" />
|
||||
<PackageVersion Include="Moq" Version="4.17.2" />
|
||||
<!-- NUnit & NUnit.Xamarin & Moq -->
|
||||
<PackageVersion Include="NUnit" Version="3.13.2" />
|
||||
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
<PackageVersion Include="nunit.xamarin" Version="3.6.1" />
|
||||
<PackageVersion Include="PCLStorage" Version="1.0.2" />
|
||||
<PackageVersion Include="Moq" Version="4.17.1" />
|
||||
|
||||
<!-- NLog -->
|
||||
<PackageVersion Include="NLog" Version="4.7.15" />
|
||||
<PackageVersion Include="NLog.Extensions.Logging" Version="1.7.4" />
|
||||
<PackageVersion Include="NLog.Web.AspNetCore" Version="4.14.0" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.NLog.Web.AspNetCore" Version="4.14.0" />
|
||||
<!-- NLog -->
|
||||
<PackageVersion Include="NLog" Version="4.7.14" />
|
||||
<PackageVersion Include="NLog.Extensions.Logging" Version="1.7.4" />
|
||||
<PackageVersion Include="NLog.Web.AspNetCore" Version="4.14.0" />
|
||||
|
||||
<!-- ReactiveUI -->
|
||||
<PackageVersion Include="System.Reactive" Version="5.0.0" />
|
||||
<PackageVersion Include="Splat" Version="14.2.8" />
|
||||
<PackageVersion Include="DynamicData" Version="7.6.7" />
|
||||
<PackageVersion Include="ReactiveUI" Version="18.0.7" />
|
||||
<!--<PackageVersion Include="ReactiveUI.Fody" Version="17.1.50" /> -->
|
||||
<PackageVersion Include="ReactiveUI.XamForms" Version="18.0.7" />
|
||||
<PackageVersion Include="ReactiveUI.AndroidX" Version="18.0.7" />
|
||||
<!-- ReactiveUI -->
|
||||
<PackageVersion Include="System.Reactive" Version="5.0.0" />
|
||||
<PackageVersion Include="Splat" Version="14.1.45" />
|
||||
<PackageVersion Include="DynamicData" Version="7.5.4" />
|
||||
<PackageVersion Include="ReactiveUI" Version="17.1.50" />
|
||||
<!--<PackageVersion Include="ReactiveUI.Fody" Version="17.1.50" /> -->
|
||||
<PackageVersion Include="ReactiveUI.XamForms" Version="17.1.50" />
|
||||
<PackageVersion Include="ReactiveUI.AndroidX" Version="17.1.50" />
|
||||
|
||||
<!-- SkiaSharp & HarfBuzzSharp -->
|
||||
<PackageVersion Include="HarfBuzzSharp" Version="2.8.2-preview.254" />
|
||||
<PackageVersion Include="HarfBuzzSharp.NativeAssets.Linux" Version="2.8.2-preview.254" />
|
||||
<PackageVersion Include="SkiaSharp" Version="2.88.0-preview.254" />
|
||||
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="2.88.0-preview.254" />
|
||||
<!-- SkiaSharp & HarfBuzzSharp -->
|
||||
<PackageVersion Include="HarfBuzzSharp" Version="2.8.2-preview.187" />
|
||||
<PackageVersion Include="HarfBuzzSharp.NativeAssets.Linux" Version="2.8.2-preview.187" />
|
||||
<PackageVersion Include="SkiaSharp" Version="2.88.0-preview.187" />
|
||||
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="2.88.0-preview.187" />
|
||||
|
||||
<!-- AutoMapper -->
|
||||
<PackageVersion Include="AutoMapper" Version="10.1.1" />
|
||||
<PackageVersion Include="AutoMapper.Collection" Version="7.0.1" />
|
||||
<PackageVersion Include="AutoMapper.Collection.EntityFrameworkCore" Version="7.1.3" />
|
||||
<PackageVersion Include="AutoMapper.Extensions.ExpressionMapping" Version="4.1.5" />
|
||||
<PackageVersion Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1" />
|
||||
<!-- AutoMapper -->
|
||||
<PackageVersion Include="AutoMapper" Version="10.1.1" />
|
||||
<PackageVersion Include="AutoMapper.Collection" Version="7.0.1" />
|
||||
<PackageVersion Include="AutoMapper.Collection.EntityFrameworkCore" Version="7.1.3" />
|
||||
<PackageVersion Include="AutoMapper.Extensions.ExpressionMapping" Version="4.1.3" />
|
||||
<PackageVersion Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1" />
|
||||
|
||||
<!-- QRCode -->
|
||||
<!--<PackageVersion Include="QRCoder" Version="1.4.2" />-->
|
||||
<PackageVersion Include="Net.Codecrete.QrCodeGenerator" Version="2.0.1" />
|
||||
<!-- QRCode -->
|
||||
<!--<PackageVersion Include="QRCoder" Version="1.4.2" />-->
|
||||
<PackageVersion Include="Net.Codecrete.QrCodeGenerator" Version="2.0.1" />
|
||||
|
||||
<!-- NotifyIcon -->
|
||||
<PackageVersion Include="NotifyIcon.Base" Version="1.0.5.1" />
|
||||
<!--<PackageVersion Include="NotifyIcon.Linux" Version="1.0.5.1" />-->
|
||||
<!--<PackageVersion Include="NotifyIcon.Mac" Version="1.0.5.1" />-->
|
||||
<PackageVersion Include="NotifyIcon.Windows" Version="1.0.5.1" />
|
||||
<!--<PackageVersion Include="GtkSharp" Version="3.24.24.34" />-->
|
||||
<!-- NotifyIcon -->
|
||||
<PackageVersion Include="NotifyIcon.Base" Version="1.0.5.1" />
|
||||
<!--<PackageVersion Include="NotifyIcon.Linux" Version="1.0.5.1" />-->
|
||||
<!--<PackageVersion Include="NotifyIcon.Mac" Version="1.0.5.1" />-->
|
||||
<PackageVersion Include="NotifyIcon.Windows" Version="1.0.5.1" />
|
||||
<!--<PackageVersion Include="GtkSharp" Version="3.24.24.34" />-->
|
||||
|
||||
<!-- Compression -->
|
||||
<PackageVersion Include="SharpZipLib" Version="1.3.3" />
|
||||
<PackageVersion Include="Squid-Box.SevenZipSharp.Lite" Version="1.5.0.366" />
|
||||
<PackageVersion Include="ZstdNet" Version="1.4.5" />
|
||||
<!-- Compression -->
|
||||
<PackageVersion Include="SharpZipLib" Version="1.3.3" />
|
||||
<PackageVersion Include="Squid-Box.SevenZipSharp.Lite" Version="1.5.0.366" />
|
||||
<PackageVersion Include="ZstdNet" Version="1.4.5" />
|
||||
|
||||
<!-- Algorithm -->
|
||||
<PackageVersion Include="Crc32.NET" Version="1.2.0" />
|
||||
<PackageVersion Include="gfoidl.Base64" Version="1.1.1" />
|
||||
<!-- Algorithm -->
|
||||
<PackageVersion Include="Crc32.NET" Version="1.2.0" />
|
||||
<PackageVersion Include="gfoidl.Base64" Version="1.1.1" />
|
||||
|
||||
<!--Command Line Tools-->
|
||||
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta3.22114.1" />
|
||||
<PackageVersion Include="System.CommandLine.NamingConventionBinder" Version="2.0.0-beta3.22114.1" />
|
||||
<!--Command Line Tools-->
|
||||
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta1.21308.1" />
|
||||
|
||||
<!-- Pinyin -->
|
||||
<PackageVersion Include="TinyPinyin.Net" Version="1.0.2" />
|
||||
<PackageVersion Include="XAB.TinyPinyin" Version="2.0.4.4" />
|
||||
<!-- Pinyin -->
|
||||
<PackageVersion Include="TinyPinyin.Net" Version="1.0.2" />
|
||||
|
||||
<!-- Win32/Windows -->
|
||||
<PackageVersion Include="TaskScheduler" Version="2.10.1" />
|
||||
<!-- Win32/Windows -->
|
||||
<PackageVersion Include="TaskScheduler" Version="2.10.1" />
|
||||
|
||||
<!-- Swagger -->
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.3.1" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="6.3.1" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.Newtonsoft" Version="6.3.1" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.Swashbuckle.AspNetCore" Version="6.3.0" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.Swashbuckle.AspNetCore.Annotations" Version="6.3.0" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.Swashbuckle.AspNetCore.Newtonsoft" Version="6.3.0" />
|
||||
<!-- Swagger -->
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.2.3" />
|
||||
|
||||
<!-- Pay -->
|
||||
<!--<PackageVersion Include="AlipaySDKNet.Standard" Version="4.6.109" />-->
|
||||
<!-- Pay -->
|
||||
<!--<PackageVersion Include="AlipaySDKNet.Standard" Version="4.6.109" />-->
|
||||
|
||||
<!-- Excel -->
|
||||
<PackageVersion Include="NPOI" Version="2.5.5" />
|
||||
<!-- Excel -->
|
||||
<PackageVersion Include="NPOI" Version="2.5.5" />
|
||||
|
||||
<!-- Github API -->
|
||||
<PackageVersion Include="Octokit" Version="0.50.0" />
|
||||
<!-- Github API -->
|
||||
<PackageVersion Include="Octokit" Version="0.50.0" />
|
||||
|
||||
<!-- ORM -->
|
||||
<PackageVersion Include="sqlite-net-pcl" Version="1.8.116" />
|
||||
<PackageVersion Include="SQLitePCLRaw.bundle_green" Version="2.1.0-pre20220318192836" />
|
||||
<!-- ORM -->
|
||||
<PackageVersion Include="sqlite-net-pcl" Version="1.8.116" />
|
||||
<PackageVersion Include="SQLitePCLRaw.bundle_green" Version="2.0.7" />
|
||||
|
||||
<!-- MonoMac(NETSTANDARD) -->
|
||||
<PackageVersion Include="MonoMac.NetStandard" Version="0.0.4" />
|
||||
<!-- MonoMac(NETSTANDARD) -->
|
||||
<PackageVersion Include="MonoMac.NetStandard" Version="0.0.4" />
|
||||
|
||||
<!-- .NET Compat -->
|
||||
<PackageVersion Include="OperatingSystem2" Version="1.4.3" />
|
||||
<PackageVersion Include="JustArchiNET.Madness" Version="3.5.2" />
|
||||
<!-- .NET Compat -->
|
||||
<PackageVersion Include="OperatingSystem2" Version="1.4.3" />
|
||||
<PackageVersion Include="JustArchiNET.Madness" Version="3.3.0" />
|
||||
|
||||
<!-- Serialize -->
|
||||
<PackageVersion Include="MessagePack" Version="2.3.85" />
|
||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
<!-- Serialize -->
|
||||
<PackageVersion Include="MessagePack" Version="2.3.85" />
|
||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
|
||||
<!-- Html Parser -->
|
||||
<PackageVersion Include="HtmlAgilityPack" Version="1.11.42" />
|
||||
<!-- Html Parser -->
|
||||
<PackageVersion Include="HtmlAgilityPack" Version="1.11.42" />
|
||||
|
||||
<!-- Clipboard -->
|
||||
<PackageVersion Include="TextCopy" Version="6.1.0" />
|
||||
<!-- Clipboard -->
|
||||
<PackageVersion Include="TextCopy" Version="6.1.0" />
|
||||
|
||||
<!-- Nito.* -->
|
||||
<PackageVersion Include="Nito.Comparers" Version="6.2.2" />
|
||||
<!--<PackageVersion Include="Nito.Disposables" Version="2.2.1" />-->
|
||||
<!-- Nito.* -->
|
||||
<PackageVersion Include="Nito.Comparers" Version="6.2.2" />
|
||||
<!--<PackageVersion Include="Nito.Disposables" Version="2.2.1" />-->
|
||||
|
||||
<!-- Valve Data File -->
|
||||
<!--<PackageVersion Include="Gameloop.Vdf" Version="0.6.1" />-->
|
||||
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
|
||||
<PackageVersion Include="System.ComponentModel.TypeConverter" Version="4.3.0" />
|
||||
<!-- Valve Data File -->
|
||||
<!--<PackageVersion Include="Gameloop.Vdf" Version="0.6.1" />-->
|
||||
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
|
||||
<PackageVersion Include="System.ComponentModel.TypeConverter" Version="4.3.0" />
|
||||
|
||||
<!-- WebSocket -->
|
||||
<PackageVersion Include="Fleck" Version="1.2.0" />
|
||||
<!-- WebSocket -->
|
||||
<PackageVersion Include="Fleck" Version="1.2.0" />
|
||||
|
||||
<!-- DNS -->
|
||||
<PackageVersion Include="DnsClient" Version="1.6.0" />
|
||||
<!-- DNS -->
|
||||
<PackageVersion Include="DnsClient" Version="1.6.0" />
|
||||
|
||||
<!-- Cryptographic Algorithms & Protocols -->
|
||||
<PackageVersion Include="Portable.BouncyCastle" Version="1.9.0" />
|
||||
<!-- Cryptographic Algorithms & Protocols -->
|
||||
<PackageVersion Include="Portable.BouncyCastle" Version="1.9.0" />
|
||||
|
||||
<!-- Resilience & Transient Fault Handling -->
|
||||
<PackageVersion Include="Polly" Version="7.2.3" />
|
||||
<!-- Resilience & Transient Fault Handling -->
|
||||
<PackageVersion Include="Polly" Version="7.2.3" />
|
||||
|
||||
<!--Avalonia Start-->
|
||||
<PackageVersion Include="Avalonia" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.Desktop" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.Skia" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.Diagnostics" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.ReactiveUI" Version="0.10.13" />
|
||||
<!--<PackageVersion Include="Avalonia.Direct2D1" Version="0.10.13" />-->
|
||||
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.Xaml.Behaviors" Version="0.10.13.3" />
|
||||
<!--<PackageVersion Include="Avalonia.AvaloniaEdit" Version="0.10.12.2" />-->
|
||||
<!--<PackageVersion Include="CefNet.Avalonia" Version="93.1.21240.857" />-->
|
||||
<!--<PackageVersion Include="LibVLCSharp.Avalonia" Version="3.5.1" />-->
|
||||
<!--<PackageVersion Include="FluentAvaloniaUI" Version="1.3.0" />-->
|
||||
<PackageVersion Include="JumpLists.Win32.Avalonia" Version="1.0.0" />
|
||||
<!--Avalonia End-->
|
||||
<!--Avalonia Start-->
|
||||
<PackageVersion Include="Avalonia" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.Desktop" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.Skia" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.Diagnostics" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.ReactiveUI" Version="0.10.13" />
|
||||
<!--<PackageVersion Include="Avalonia.Direct2D1" Version="0.10.13" />-->
|
||||
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.Xaml.Behaviors" Version="0.10.12.2" />
|
||||
<!--<PackageVersion Include="Avalonia.AvaloniaEdit" Version="0.10.12.2" />-->
|
||||
<!--<PackageVersion Include="CefNet.Avalonia" Version="93.1.21240.857" />-->
|
||||
<!--<PackageVersion Include="LibVLCSharp.Avalonia" Version="3.5.1" />-->
|
||||
<!--<PackageVersion Include="FluentAvaloniaUI" Version="1.3.0" />-->
|
||||
<PackageVersion Include="JumpLists.Win32.Avalonia" Version="1.0.0" />
|
||||
<!--Avalonia End-->
|
||||
|
||||
<!-- Xamarin.Android -->
|
||||
<PackageVersion Include="Xamarin.Build.Download" Version="0.11.1" />
|
||||
<PackageVersion Include="Xamarin.Google.Dagger" Version="2.39.1" />
|
||||
<PackageVersion Include="Xamarin.Google.MLKit.BarcodeScanning" Version="116.1.2.5" />
|
||||
<PackageVersion Include="Plugin.CurrentActivity" Version="2.1.0.4" />
|
||||
<PackageVersion Include="de.hdodenhof.circleimageview" Version="3.1.0.4" />
|
||||
<PackageVersion Include="Square.OkHttp3" Version="4.9.3" />
|
||||
<PackageVersion Include="Square.Picasso" Version="2.71828.0" />
|
||||
<!--<PackageVersion Include="LeakCanaryBinding" Version="1.5.1.1" />-->
|
||||
<!--<PackageVersion Include="TencentOpenApiSDK.Android" Version="3.5.4.11" />-->
|
||||
<PackageVersion Include="XAB.FlexboxLayout" Version="3.0.0.2" />
|
||||
<!-- Xamarin.Android -->
|
||||
<PackageVersion Include="Xamarin.Google.Dagger" Version="2.39.1" />
|
||||
<PackageVersion Include="Xamarin.Google.MLKit.BarcodeScanning" Version="116.1.2.3" />
|
||||
<PackageVersion Include="Plugin.CurrentActivity" Version="2.1.0.4" />
|
||||
<PackageVersion Include="de.hdodenhof.circleimageview" Version="3.1.0.1" />
|
||||
<PackageVersion Include="Square.OkHttp3" Version="4.9.2" />
|
||||
<PackageVersion Include="Square.Picasso" Version="2.71828.0" />
|
||||
<!--<PackageVersion Include="LeakCanaryBinding" Version="1.5.1.1" />-->
|
||||
<!--<PackageVersion Include="TencentOpenApiSDK.Android" Version="3.5.4.11" />-->
|
||||
<PackageVersion Include="XAB.FlexboxLayout" Version="3.0.0" />
|
||||
|
||||
<!-- V2Ray -->
|
||||
<PackageVersion Include="XAB.AndroidLibV2rayLite" Version="1.0.0.1" />
|
||||
<PackageVersion Include="Karamunting.KotlinX.Coroutines.Core" Version="1.4.2" />
|
||||
<PackageVersion Include="Naxam.RxJava.Droid" Version="1.3.8-pre1" />
|
||||
|
||||
<!-- Xamarin.AndroidX -->
|
||||
<PackageVersion Include="Xamarin.AndroidX.Migration" Version="1.0.8" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.AppCompat" Version="1.3.1.5" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Emoji.AppCompat" Version="1.1.0.7" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Fragment" Version="1.3.6.5" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Navigation.Fragment" Version="2.3.5.5" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.RecyclerView" Version="1.2.1.5" />
|
||||
<PackageVersion Include="Xamarin.Google.Android.Material" Version="1.4.0.6" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.SwipeRefreshLayout" Version="1.1.0.7" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ConstraintLayout" Version="2.1.2.2" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Navigation.UI" Version="2.3.5.5" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ViewPager2" Version="1.0.0.14" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Activity" Version="1.4.0.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Biometric" Version="1.1.0.8" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ExifInterface" Version="1.3.3.4" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Legacy.Support.Core.UI" Version="1.0.0.13" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="2.4.0.2" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.Camera2" Version="1.0.2.3" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.Lifecycle" Version="1.0.2.3" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.View" Version="1.0.0.5-alpha20" />
|
||||
<!--<PackageVersion Include="Xamarin.AndroidX.Window" Version="1.0.0.3-beta02" />-->
|
||||
|
||||
<!-- V2Ray -->
|
||||
<PackageVersion Include="XAB.AndroidLibV2rayLite" Version="1.0.0.1" />
|
||||
<!--<PackageVersion Include="Karamunting.KotlinX.Coroutines.Core" Version="1.4.2" />-->
|
||||
<PackageVersion Include="Xamarin.KotlinX.Coroutines.Core" Version="1.6.0.1" />
|
||||
<PackageVersion Include="Xamarin.KotlinX.Coroutines.Android" Version="1.6.0.1" />
|
||||
<PackageVersion Include="Xamarin.Android.ReactiveX.RxJava3.RxJava" Version="3.1.4.1" />
|
||||
<!-- Xamarin.iOS -->
|
||||
<PackageVersion Include="Toast.iOS" Version="1.2.0" />
|
||||
|
||||
<!-- Xamarin.AndroidX -->
|
||||
<PackageVersion Include="Xamarin.AndroidX.Migration" Version="1.0.8" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.AppCompat" Version="1.4.1.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Emoji.AppCompat" Version="1.1.0.8" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Fragment" Version="1.4.1.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.RecyclerView" Version="1.2.1.6" />
|
||||
<PackageVersion Include="Xamarin.Google.Android.Material" Version="1.5.0.2" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.SwipeRefreshLayout" Version="1.1.0.8" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ConstraintLayout" Version="2.1.3.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Navigation.UI" Version="2.4.1.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Navigation.Fragment" Version="2.4.1.2" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ViewPager2" Version="1.0.0.15" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Activity" Version="1.4.0.2" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Biometric" Version="1.1.0.9" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ExifInterface" Version="1.3.3.5" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Legacy.Support.Core.UI" Version="1.0.0.14" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="2.4.1.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.Camera2" Version="1.0.2.4" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.Lifecycle" Version="1.0.2.4" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.View" Version="1.0.0.5-alpha20" />
|
||||
<!--<PackageVersion Include="Xamarin.AndroidX.Window" Version="1.0.0.3-beta02" />-->
|
||||
|
||||
<!-- Xamarin.iOS -->
|
||||
<PackageVersion Include="Toast.iOS" Version="1.2.0" />
|
||||
|
||||
<!-- UWP -->
|
||||
<PackageVersion Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.2" />
|
||||
|
||||
<!-- Code Style -->
|
||||
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.406" />
|
||||
|
||||
</ItemGroup>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
English | [简体中文](./README.md)
|
||||
|
||||
"Steam++" is an open source cross-platform multi-purpose game toolkit, most of its features require you to download and install Steam to use it.
|
||||
「Steam++」is a toolkit that contains a variety of Steam tools, most of which require you to download and install Steam in order to use them.
|
||||
|
||||

|
||||
[](https://github.com/rmbadmin/SteamTools/releases/latest)
|
||||
@@ -32,24 +32,19 @@ English | [简体中文](./README.md)
|
||||
- [GitHub Releases](https://github.com/BeyondDimension/SteamTools/releases)
|
||||
- [Gitee Releases](https://gitee.com/rmbgame/SteamTools/releases)
|
||||
- [Official WebSite](https://steampp.net)
|
||||
- [](https://www.microsoft.com/store/apps/9MTCFHS560NG)
|
||||
- [Arch Linux Package](https://aur.archlinux.org/packages/steam%2B%2B-bin)(By [zhanghua000](https://github.com/zhanghua000))
|
||||
|
||||
## ✨ Functions
|
||||
1. Network Acceleration (Support Windows / Linux / macOS / Android)
|
||||
- Make the Steam community, Github, Google reCAPTCHA, Pixiv, Discord, Twitch and other domestic hard-to-access pages accessible properly.
|
||||
- Functions similar to [Steamcommunity 302](https://www.dogfight360.com/blog/686/), using [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy) open source project for local anti-generation.
|
||||
2. Script Configuration (Windows / Linux / macOS Only)
|
||||
- Some JS scripts are injected into web pages through an acceleration service that intercepts web requests, providing functionality similar to that of a web plugin.
|
||||
3. Account Switch (Windows / Linux / macOS Only)
|
||||
- Switch between Steam accounts that are already logged in on the current PC with one click, and manage features such as sorting your home shared library.
|
||||
4. Inventory Management (Windows / Linux / macOS Only)
|
||||
- Lets you manage your Steam game inventory directly, not only by downloading older Steam games, but also by managing Steam game achievements directly, supporting unlocked achievements and unlocked achievements.
|
||||
5. Local Authentication (Support Windows / Linux / macOS / Android)
|
||||
- Let your cell phone token unified save in the computer, currently only support Steam token, later will develop support more token types with cloud synchronization token.
|
||||
6. ArchiSteamFarm (Support Windows / Linux / macOS / Android)
|
||||
- Integration with [ArchiSteamFarm](https://github.com/JustArchiNET/ArchiSteamFarm) provides functions such as hanging and dropping Steam Collectible Cards within the app.
|
||||
7. Game Tools (Windows Only)
|
||||
- Force game windows to use borderless windowing
|
||||
1. Local reverse proxy for Steam's community webpage to enable normal access in **the Chinese Mainland, Mainland of China**
|
||||
2. Quickly switch the Steam account that the current PC has remembered to log into
|
||||
- This feature is to read the local user login records stored under the Steam path to directly display the operation, you can switch between multiple accounts without re-entering passwords and tokens.
|
||||
3. Achievement stat modifications for Steam games
|
||||
- Function reference SteamAchievementManager for secondary development, modified the game list loading and operation ease of use.
|
||||
4. Steam Local Two-Step Authenticator
|
||||
- The function reference [WinAuth](https://github.com/winauth/winauth) is developed to enable you to view your token without launching the mobile version of Steam App, similar function software are [WinAuth](https://github.com/winauth/winauth), [SteamDesktopAuthenticator](https://github.com/Jessecar96/SteamDesktopAuthenticator).
|
||||
5. Some game tools
|
||||
- Currently there is a forced game borderless windowing.
|
||||
|
||||
<!--Prerequisites Microsoft Visual C++ 2015-2019 Redistributable [64 bit](https://aka.ms/vs/16/release/vc_redist.x64.exe) / [32 bit](https://aka.ms/vs/16/release/vc_redist.x86.exe)-->
|
||||
## 🖥 Supported Operating Systems
|
||||
@@ -62,7 +57,7 @@ OS | Version | Architectures
|
||||
[Windows Server][Windows-Server] | 2012+ | x64 | [Windows Server][Windows-Server-lifecycle]
|
||||
|
||||
**\*** Windows 7 SP1 is supported with [Extended Security Updates](https://docs.microsoft.com/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq) installed.
|
||||
**\*** Microsoft Store(Desktop Bridge) Version 1809+
|
||||
**\*** Microsoft Store/Desktop Bridge Version 1809+
|
||||
|
||||
[Windows-client]: https://www.microsoft.com/windows/
|
||||
[Windows-lifecycle]: https://support.microsoft.com/help/13853/windows-lifecycle-fact-sheet
|
||||
@@ -122,7 +117,7 @@ OS | Version | Architectures
|
||||
|
||||
OS | Version | Architectures |
|
||||
------------------------------|---------------------------|-------------------|
|
||||
[macOS][macOS] | 10.15+ | x64, Arm64 |
|
||||
[macOS][macOS] | 10.14+ | x64 |
|
||||
|
||||
[macOS]: https://support.apple.com/macos
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
[English](./README.en.md) | 简体中文
|
||||
|
||||
「Steam++」是一个开源跨平台的多功能游戏工具箱,此工具的大部分功能都是需要您下载安装 Steam 才能使用。
|
||||
「Steam++」是一个包含多种Steam工具功能的工具箱,此工具的大部分功能都是需要您下载安装Steam才能使用。
|
||||
|
||||

|
||||
[](https://github.com/BeyondDimension/SteamTools/releases/latest)
|
||||
@@ -33,24 +33,26 @@
|
||||
- [GitHub Releases](https://github.com/BeyondDimension/SteamTools/releases)
|
||||
- [Gitee Releases](https://gitee.com/rmbgame/SteamTools/releases)
|
||||
- [Official WebSite](https://steampp.net)
|
||||
- [](https://www.microsoft.com/store/apps/9MTCFHS560NG)
|
||||
- [Arch Linux Package](https://aur.archlinux.org/packages/steam%2B%2B-bin)(By [zhanghua000](https://github.com/zhanghua000))
|
||||
|
||||
## ✨ 功能
|
||||
1. 网络加速 (Support Windows / Linux / macOS / Android)
|
||||
- 使 Steam 社区、Github、谷歌验证码、Pixiv、Discord、Twitch 等国内难以访问的网页正常访问。
|
||||
- 功能类似 [Steamcommunity 302](https://www.dogfight360.com/blog/686/) ,使用 [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy) 开源项目进行本地反代。
|
||||
2. 脚本配置 (Windows / Linux / macOS Only)
|
||||
- 通过加速服务拦截网络请求将一些 JS 脚本注入在网页中,提供类似网页插件的功能。
|
||||
3. 账号切换 (Windows / Linux / macOS Only)
|
||||
- 一键切换已在当前 PC 上登录过的 Steam 账号,与管理家庭共享库排序等功能。
|
||||
4. 库存管理 (Windows / Linux / macOS Only)
|
||||
- 让您直接管理到 Steam 游戏库存,不仅能够下载老版本的 Steam 游戏,也能够对 Steam 游戏成就进行直接管理,支持解锁成就以及反解锁成就。
|
||||
5. 本地令牌 (Support Windows / Linux / macOS / Android)
|
||||
- 让您的手机令牌统一保存在电脑中,目前仅支持 Steam 令牌,后续会开发支持更多的令牌种类与云同步令牌。
|
||||
6. 自动挂卡 (Support Windows / Linux / macOS / Android)
|
||||
- 集成 [ArchiSteamFarm](https://github.com/JustArchiNET/ArchiSteamFarm) 在应用内提供 挂机掉落 Steam 集换式卡牌 等功能。
|
||||
7. 游戏工具 (Windows Only)
|
||||
- 强制游戏窗口使用无边框窗口化
|
||||
1. 反代 Steam 的社区网页使其能正常访问
|
||||
- 功能类似羽翼城大佬的 [steamcommunity_302](https://www.dogfight360.com/blog/686/)
|
||||
- 使用 [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy) 开源项目进行本地反代,使国内用户可以正常访问 Steam 社区页
|
||||
- 相比 **302工具** 具有更快的启动速度,以及支持简单的脚本注入(还顺便支持了Pixiv、Discord、Twitch等网站的反代支持)
|
||||
2. 快速切换当前设备已记住登陆的 Steam 账号
|
||||
- 该功能是读取 Steam 路径下存储的本地用户登录记录直接展示操作,可以多账号切换无需重新输入密码和令牌
|
||||
3. Steam游戏的成就统计管理功能
|
||||
- 功能参考 [SteamAchievementManager](https://github.com/gibbed/SteamAchievementManager) 进行二次开发,修改了游戏列表的加载和操作易用性
|
||||
4. Steam本地两步身份验证器
|
||||
- 功能参考 [WinAuth](https://github.com/winauth/winauth) 开发,可以使您不用启动移动版 Steam App 也能查看您的令牌
|
||||
- 本地令牌交易市场报价确认
|
||||
- 功能类似的软件例如:
|
||||
- [WinAuth](https://github.com/winauth/winauth)
|
||||
- [SteamDesktopAuthenticator](https://github.com/Jessecar96/SteamDesktopAuthenticator)
|
||||
5. 其他游戏工具
|
||||
- 目前已有强制游戏无边框窗口化
|
||||
|
||||
<!--发布配置SelfContained=true时会自动打包VC++相关程序集-->
|
||||
<!--先决条件 Microsoft Visual C++ 2015-2019 Redistributable [64 位](https://aka.ms/vs/16/release/vc_redist.x64.exe) / [32 位](https://aka.ms/vs/16/release/vc_redist.x86.exe)-->
|
||||
@@ -64,7 +66,7 @@ OS | Version | Architectures
|
||||
[Windows Server][Windows-Server] | 2012+ | x64 | [Windows Server][Windows-Server-lifecycle]
|
||||
|
||||
**\*** Windows 7 SP1 is supported with [Extended Security Updates](https://docs.microsoft.com/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq) installed.
|
||||
**\*** Microsoft Store(Desktop Bridge) Version 1809+
|
||||
**\*** Microsoft Store/Desktop Bridge Version 1809+
|
||||
|
||||
[Windows-client]: https://www.microsoft.com/windows/
|
||||
[Windows-lifecycle]: https://support.microsoft.com/help/13853/windows-lifecycle-fact-sheet
|
||||
@@ -124,12 +126,10 @@ OS | Version | Architectures
|
||||
|
||||
OS | Version | Architectures |
|
||||
------------------------------|---------------------------|-------------------|
|
||||
[macOS][macOS] | 10.15+ | x64, Arm64 |
|
||||
[macOS][macOS] | 10.14+ | x64 |
|
||||
|
||||
[macOS]: https://support.apple.com/macos
|
||||
|
||||
### Android
|
||||
|
||||
OS | Version | Architectures |
|
||||
------------------------------|-------------------------|--------------------------------------------------------------------|
|
||||
[Android][Android] | 5.0(API 21)+ | [x64][Android-x64], [Arm64][Android-Arm64], [Arm32][Android-Arm32] |
|
||||
|
||||
@@ -16,15 +16,18 @@
|
||||
"src\\Avalonia.Win32\\Avalonia.Win32.csproj",
|
||||
"src\\Avalonia.X11\\Avalonia.X11.csproj",
|
||||
"src\\Common.AreaLib\\Common.AreaLib.csproj",
|
||||
"src\\Common.ClientLib.Droid\\Common.ClientLib.Droid.csproj",
|
||||
"src\\Common.ClientLib.iOS\\Common.ClientLib.iOS.csproj",
|
||||
"src\\Common.ClientLib\\Common.ClientLib.csproj",
|
||||
"src\\Common.CoreLib\\Common.CoreLib.csproj",
|
||||
"src\\Common.PinyinLib\\Common.PinyinLib.csproj",
|
||||
"src\\Common.PinyinLib.ChnCharInfo\\Common.PinyinLib.ChnCharInfo.csproj",
|
||||
"src\\Repositories.sqlite-net-pcl\\Repositories.sqlite-net-pcl.csproj",
|
||||
"src\\ST.Client.Android\\ST.Client.Android.csproj",
|
||||
"src\\ST.Client.Desktop.Linux\\ST.Client.Linux.csproj",
|
||||
"src\\ST.Client.Mobile.Droid.App\\ST.Client.Android.App.csproj",
|
||||
"src\\ST.Client.XamarinForms\\ST.Client.XamarinForms.csproj",
|
||||
"src\\ST.Client.Desktop.Avalonia\\ST.Client.Avalonia.csproj",
|
||||
"src\\ST.Client.Desktop.Avalonia.App\\ST.Client.Avalonia.App.csproj",
|
||||
"src\\ST.Client.iOS\\ST.Client.iOS.csproj",
|
||||
"src\\ST.Client\\ST.Client.csproj",
|
||||
"src\\ST.Services.CloudService.Models\\ST.Services.CloudService.Models.csproj",
|
||||
"src\\ST.Services.CloudService.ViewModels\\ST.Services.CloudService.ViewModels.csproj",
|
||||
@@ -35,7 +38,6 @@
|
||||
"src\\ST.Tools.OpenSourceLibraryList\\ST.Tools.OpenSourceLibraryList.csproj",
|
||||
"src\\ST.Tools.Translate\\ST.Tools.Translate.csproj",
|
||||
"src\\ST\\ST.csproj",
|
||||
"src\\ST.Client.ResSecrets\\ST.Client.ResSecrets.csproj",
|
||||
"tests\\Common.UnitTest.Droid.App\\ST.Client.UnitTest.Droid.App.csproj",
|
||||
"tests\\Common.UnitTest.Droid\\ST.Client.UnitTest.Droid.csproj",
|
||||
"tests\\Common.UnitTest\\Common.UnitTest.csproj",
|
||||
|
||||
@@ -16,11 +16,10 @@
|
||||
"src\\Avalonia.Win32\\Avalonia.Win32.csproj",
|
||||
"src\\Avalonia.X11\\Avalonia.X11.csproj",
|
||||
"src\\Common.AreaLib\\Common.AreaLib.csproj",
|
||||
"src\\Common.ClientLib.Droid\\Common.ClientLib.Droid.csproj",
|
||||
"src\\Common.ClientLib.iOS\\Common.ClientLib.iOS.csproj",
|
||||
"src\\Common.ClientLib\\Common.ClientLib.csproj",
|
||||
"src\\Common.CoreLib\\Common.CoreLib.csproj",
|
||||
"src\\Common.PinyinLib\\Common.PinyinLib.csproj",
|
||||
"src\\Common.PinyinLib.CFStringTransform\\Common.PinyinLib.CFStringTransform.csproj",
|
||||
"src\\Repositories.sqlite-net-pcl\\Repositories.sqlite-net-pcl.csproj",
|
||||
"src\\ST.Client.Android\\ST.Client.Android.csproj",
|
||||
"src\\ST.Client.Desktop.Mac\\ST.Client.Mac.csproj",
|
||||
@@ -39,10 +38,6 @@
|
||||
"src\\ST.Tools.OpenSourceLibraryList\\ST.Tools.OpenSourceLibraryList.csproj",
|
||||
"src\\ST.Tools.Translate\\ST.Tools.Translate.csproj",
|
||||
"src\\ST\\ST.csproj",
|
||||
"src\\ST.Client.ResSecrets\\ST.Client.ResSecrets.csproj",
|
||||
"src\\ST.Client.iOS.ResSecrets\\ST.Client.iOS.ResSecrets.csproj",
|
||||
"src\\ST.Client.Android.ResSecrets\\ST.Client.Android.ResSecrets.csproj",
|
||||
"src\\ST.Client.Mac.ResSecrets\\ST.Client.Mac.ResSecrets.csproj",
|
||||
"tests\\Common.UnitTest.Droid.App\\ST.Client.UnitTest.Droid.App.csproj",
|
||||
"tests\\Common.UnitTest.Droid\\ST.Client.UnitTest.Droid.csproj",
|
||||
"tests\\Common.UnitTest\\Common.UnitTest.csproj",
|
||||
|
||||
@@ -152,6 +152,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Github", "_Github", "{B114
|
||||
.github\workflows\xamarin.yml = .github\workflows\xamarin.yml
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.ClientLib.Droid", "src\Common.ClientLib.Droid\Common.ClientLib.Droid.csproj", "{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.ClientLib.iOS", "src\Common.ClientLib.iOS\Common.ClientLib.iOS.csproj", "{4658B02A-CB1A-4561-AD9C-3B3FF969D7F0}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.UnitTest.Droid", "tests\Common.UnitTest.Droid\ST.Client.UnitTest.Droid.csproj", "{80E6762E-AB43-41E2-BDB4-7A3E24713977}"
|
||||
@@ -172,22 +174,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Android.V2Ray", "
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gameloop.Vdf", "references\Gameloop.Vdf\Gameloop.Vdf\Gameloop.Vdf.csproj", "{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Android.Shadowsocks", "src\ST.Client.Android.Shadowsocks\ST.Client.Android.Shadowsocks.csproj", "{920EF29F-406F-43A9-B002-29DD6B0B4FBF}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Android.App.Modern", "src\ST.Client.Android.App.Modern\ST.Client.Android.App.Modern.csproj", "{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ResSecrets", "ResSecrets", "{17667B53-1A09-45A6-855A-0F07F9AE044F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Android.ResSecrets", "src\ST.Client.Android.ResSecrets\ST.Client.Android.ResSecrets.csproj", "{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.ResSecrets", "src\ST.Client.ResSecrets\ST.Client.ResSecrets.csproj", "{089D4418-975B-455D-9AE1-B9DEC20FF4B1}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ST.Client.iOS.ResSecrets", "src\ST.Client.iOS.ResSecrets\ST.Client.iOS.ResSecrets.csproj", "{872B65EB-E9DF-4357-B541-DD4A39B281A0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ST.Client.Mac.ResSecrets", "src\ST.Client.Mac.ResSecrets\ST.Client.Mac.ResSecrets.csproj", "{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ST.Client.Windows.ResSecrets", "src\ST.Client.Windows.ResSecrets\ST.Client.Windows.ResSecrets.csproj", "{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -1606,6 +1592,34 @@ Global
|
||||
{29DE5086-0690-4AE7-9BA9-840F54B249DC}.Release|x64.Build.0 = Release|Any CPU
|
||||
{29DE5086-0690-4AE7-9BA9-840F54B249DC}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{29DE5086-0690-4AE7-9BA9-840F54B249DC}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C}.Release|x86.Build.0 = Release|Any CPU
|
||||
{4658B02A-CB1A-4561-AD9C-3B3FF969D7F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4658B02A-CB1A-4561-AD9C-3B3FF969D7F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4658B02A-CB1A-4561-AD9C-3B3FF969D7F0}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
@@ -1872,202 +1886,6 @@ Global
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|x64.Build.0 = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|x86.Build.0 = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|x64.Build.0 = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{5E2ABB4A-FDD6-47B0-946D-FAAD31301B82}.Release|x86.Build.0 = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|x64.Build.0 = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Release|x86.Build.0 = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|x64.Build.0 = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1}.Release|x86.Build.0 = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|x64.Build.0 = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C}.Release|x86.Build.0 = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -2124,6 +1942,7 @@ Global
|
||||
{E85E92BA-202F-42D3-8C5E-96DA452501B7} = {910D6A0F-42AB-4B65-B532-852E864EC006}
|
||||
{21C392C5-AE41-421A-A127-1A03C4ACA2AD} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
|
||||
{29DE5086-0690-4AE7-9BA9-840F54B249DC} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
|
||||
{3C7200C7-8C2D-46F0-BD7D-0A59D915B83C} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
|
||||
{4658B02A-CB1A-4561-AD9C-3B3FF969D7F0} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
|
||||
{80E6762E-AB43-41E2-BDB4-7A3E24713977} = {CC46B486-00D7-49E6-ABA3-FDF8F4868D2B}
|
||||
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA} = {CC46B486-00D7-49E6-ABA3-FDF8F4868D2B}
|
||||
@@ -2134,13 +1953,6 @@ Global
|
||||
{80EBD601-28AC-4840-B9B8-E6064816A443} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F} = {80EBD601-28AC-4840-B9B8-E6064816A443}
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
|
||||
{920EF29F-406F-43A9-B002-29DD6B0B4FBF} = {80EBD601-28AC-4840-B9B8-E6064816A443}
|
||||
{17667B53-1A09-45A6-855A-0F07F9AE044F} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277} = {17667B53-1A09-45A6-855A-0F07F9AE044F}
|
||||
{089D4418-975B-455D-9AE1-B9DEC20FF4B1} = {17667B53-1A09-45A6-855A-0F07F9AE044F}
|
||||
{872B65EB-E9DF-4357-B541-DD4A39B281A0} = {17667B53-1A09-45A6-855A-0F07F9AE044F}
|
||||
{3950554F-7219-4AB9-9BE8-9B5EBDBCA88C} = {17667B53-1A09-45A6-855A-0F07F9AE044F}
|
||||
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E} = {17667B53-1A09-45A6-855A-0F07F9AE044F}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
RESX_NeutralResourcesLanguage = zh-Hans
|
||||
|
||||
@@ -1,27 +1,23 @@
|
||||
# 下载指南
|
||||
- Desktop(桌面端)
|
||||
- Windows
|
||||
- 如果你使用 Intel、AMD 的 x64(x86-64) 芯片的 PC,则下载文件名中带有 **win_x64** 的文件
|
||||
- 如果你 **已安装** 了 [ASP.NET Core 运行时 6.0.4](https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0) 则下载文件名中带有 **fde(框架依赖)** 的文件
|
||||
- 注意:是 《ASP.NET Core 运行时》 而不是 《.NET 桌面运行时》
|
||||
- [在 Windows 上安装 .NET](https://docs.microsoft.com/zh-cn/dotnet/core/install/windows)
|
||||
- 本程序在 Windows 上不需要 Hosting Bundle 和 IIS support
|
||||
- [下载安装程序并手动安装(aspnetcore-runtime-6.0.4-win-x64.exe)](https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-aspnetcore-6.0.4-windows-x64-installer)
|
||||
- [使用 PowerShell 自动化安装](https://docs.microsoft.com/zh-cn/dotnet/core/install/windows?tabs=net60#install-with-powershell-automation)
|
||||
- 如果你使用 Intel、AMD 的 x64 芯片的 PC(较为**普遍**),则下载文件名中带有 **win_x64** 的文件
|
||||
- 如果你已安装了 [ASP.NET Core Runtime 6.0.1](https://dotnet.microsoft.com/download/dotnet/6.0) 则下载文件名中带有 **fde** 的文件,可减少磁盘占用空间
|
||||
- [在 Windows 上安装 .NET](https://docs.microsoft.com/en-us/dotnet/core/install/windows)
|
||||
- 在 Windows 上不需要 Hosting Bundle 和 IIS support
|
||||
- [下载安装程序并手动安装(aspnetcore-runtime-6.0.1-win-x64.exe)](https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-aspnetcore-6.0.1-windows-x64-installer)
|
||||
- [使用 PowerShell 自动化安装](https://docs.microsoft.com/en-us/dotnet/core/install/windows?tabs=net60#install-with-powershell-automation)
|
||||
- macOS
|
||||
- 如果你使用 Intel 的 x64(x86-64) 芯片的 Mac,则下载文件名中带有 **macos_x64** 的文件
|
||||
- 如果你使用 ARM64(Apple Silicon) 芯片的 Mac,例如 **Apple M1**,则下载文件名中带有 **macos_arm64** 的文件
|
||||
- 如果你使用 Intel、AMD 的 x64 芯片的 Mac(较为**普遍**),则下载文件名中带有 **macos_x64** 的文件
|
||||
- 如果你使用 ARM64 芯片的 Mac(较为**稀有**),例如 **M1**,则下载文件名中带有 **macos_arm64** 的文件
|
||||
- Linux
|
||||
- 如果你使用 Intel、AMD 的 x64(x86-64) 芯片的 PC 则下载文件名中带有 **linux_x64** 的文件
|
||||
- 如果你使用 ARM64 芯片的 PC 例如 **Raspberry Pi Model 3+**,则下载文件名中带有 **linux_arm64** 的文件
|
||||
|
||||
<!--
|
||||
- 如果你使用 Intel、AMD 的 x64 芯片的 PC(较为**普遍**)则下载文件名中带有 **linux_x64** 的文件
|
||||
- 如果你使用 ARM64 芯片的 PC(较为**稀有**)例如 **Raspberry Pi Model 3+**,则下载文件名中带有 **linux_arm64** 的文件
|
||||
- Mobile(移动端)
|
||||
- Android
|
||||
- 如果你使用 ARM64 芯片的设备(较为**普遍**)则下载文件名中带有 **android_arm64_v8a** 的文件
|
||||
- 如果你使用 ARM32 芯片的设备(较为**稀有**)通常为 **14** 年下半年之前生产的设备,则下载文件名中带有 **android_armeabi_v7a** 的文件
|
||||
- 如果你使用 Intel、AMD 的 x64 芯片的设备(较为**稀有**)则下载文件名中带有 **android_x64** 的文件
|
||||
-->
|
||||
|
||||
<!--
|
||||
- 如果你使用 ARM64 芯片的 PC(极为**稀有**),例如 **Surface Pro X**,则下载文件名中带有 **win_x64** 的文件可通过 Win11 x86 模拟运行
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
{
|
||||
"msbuild-sdks": {
|
||||
"MSBuild.Sdk.Extras": "3.0.44",
|
||||
"Xamarin.Legacy.Sdk": "0.1.2-alpha6"
|
||||
"MSBuild.Sdk.Extras": "3.0.44"
|
||||
},
|
||||
"sdk": {
|
||||
"version": "6.0.202"
|
||||
"version": "6.0.200"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>net.steampp.app</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.7.0</string>
|
||||
<string>2.4.10</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.7.0.0</string>
|
||||
<string>2.4.10.0</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.15</string>
|
||||
<string>10.14</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>zh_CN</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
create_app_structure() {
|
||||
APPNAME=$1
|
||||
APPDIR="$APPNAME.app/Contents"
|
||||
APPICONS="${{ Steam++_IcnsFile }}"
|
||||
APPICONS="/Users/mossimo/bin/logo.icns"
|
||||
|
||||
if [ ! -d "$APPDIR" ]; then
|
||||
echo "creating app structure $APPDIR"
|
||||
@@ -33,19 +33,19 @@ emit_plist() {
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>net.steampp.app</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>${{ Steam++_ShortVersion }}</string>
|
||||
<string>2.6.9</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${{ Steam++_Version }}</string>
|
||||
<string>2.6.9.0</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.15</string>
|
||||
<string>10.14</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>zh_CN</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${{ Steam++_RunName }}</string>
|
||||
<string>$PLIST_APPNAME</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>${{ Steam++_RunName }}</string>
|
||||
<string>$PLIST_APPNAME</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>$PLIST_APPNAME</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
@@ -64,10 +64,10 @@ EOF
|
||||
fi
|
||||
}
|
||||
|
||||
cd "${{ Steam++_OutPutFilePath }}"
|
||||
cd "/Users/mossimo/bin"
|
||||
|
||||
|
||||
BINARYNAME="${{ Steam++_AppName }}"
|
||||
BINARYNAME="Steam++"
|
||||
|
||||
echo "Building Avalonia demo..."
|
||||
|
||||
@@ -80,8 +80,14 @@ rm -rf "$APPDIR"
|
||||
create_app_structure "$APPNAME"
|
||||
emit_plist "$APPNAME" "$APPDIR" true
|
||||
|
||||
mv -f "${{ Steam++_APPDIR }}" "$APPDIR/MacOS"
|
||||
chmod +x "$APPDIR/MacOS/Steam++"
|
||||
cd "$APPDIR/Frameworks"
|
||||
|
||||
mkdir "${{ Steam++_APPDIR }}"
|
||||
mv -f "${{ Steam++_OutPutFilePath }}/$BINARYNAME.app" "${{ Steam++_APPDIR }}/$BINARYNAME.app"
|
||||
APPNAME="$BINARYNAME Helper"
|
||||
APPDIR="$APPNAME.app/Contents"
|
||||
create_app_structure "$APPNAME"
|
||||
emit_plist "$APPNAME" "$APPDIR"
|
||||
cp -R "../../../steampp/" "../MacOS"
|
||||
ln -s "../../MacOS" "Frameworks/$APPDIR/MacOS"
|
||||
chmod +x "../MacOS/$BINARYNAME"
|
||||
cp "../MacOS/$BINARYNAME" "../MacOS/$APPNAME"
|
||||
chmod +x "../MacOS/$APPNAME"
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
[*.cs]
|
||||
|
||||
# IDE0055: 修正格式
|
||||
dotnet_diagnostic.IDE0055.severity = suggestion
|
||||
|
||||
# IDE1006: 命名样式
|
||||
dotnet_diagnostic.IDE1006.severity = suggestion
|
||||
@@ -1,7 +0,0 @@
|
||||
# ARM64(Windows/macOS/Linux) Native Library
|
||||
|
||||
## 7z.dll
|
||||
21.07 (2021-12-26) by https://www.7-zip.org
|
||||
|
||||
## libe_sqlite3.dylib
|
||||
sqlitepclraw.lib.e_sqlite3.2.0.7.nupkg
|
||||
@@ -1,98 +0,0 @@
|
||||
|
||||
DU'LAN 都兰
|
||||
ZHA'SHUI 柞水
|
||||
LU'HE 六合
|
||||
JUN'LIAN 筠连
|
||||
JIANG'DU 江都
|
||||
BAI'XIANG 柏乡
|
||||
CHANG'YANG 长阳
|
||||
CHANG'CHUN 长春
|
||||
CHANG'BAI 长白
|
||||
CHENG'DU 成都
|
||||
MIN'HANG 闵行
|
||||
XIN'DU 新都
|
||||
TIAN'CHANG 天长
|
||||
PAN'YU 番禺
|
||||
DU'YUN 都匀
|
||||
CHANG'YUAN 长垣
|
||||
CHANG'ZHI'XIAN 长治县
|
||||
WU'DU 武都
|
||||
CHEN'QIU 沈丘
|
||||
WEN'XIU 温宿
|
||||
BENG'BU 蚌埠
|
||||
CHANG'SHUN 长顺
|
||||
BI'YANG 泌阳
|
||||
SHEN'XIAN 莘县
|
||||
DA'BU 大埔
|
||||
TA'SHI'KU'ER'GAN 塔什库尔干
|
||||
SAN'DU 三都
|
||||
YAN'DU 盐都
|
||||
ZI'CHANG 子长
|
||||
YU'DU 于都
|
||||
MIN'YUE 民乐
|
||||
HUA'DU 花都
|
||||
SHANG'DU 商都
|
||||
DU'CHANG 都昌
|
||||
KE'SHI'KE'TENG'QI 克什克腾旗
|
||||
YAN'CHANG 延长
|
||||
CHANG'BAI'SHAN 长白山
|
||||
NING'DU 宁都
|
||||
ZENG'MU'AN'SHA 曾母暗沙
|
||||
NAN'YUE 南乐
|
||||
CHANG'WU 长武
|
||||
CHANG'NING 长宁
|
||||
CHANG'AN 长安
|
||||
CHONG'QING 重庆
|
||||
HANG'TANG 行唐
|
||||
GA'SHI 伽师
|
||||
CHANG'SHOU 长寿
|
||||
SUI'LING 绥棱
|
||||
CHANG'TING 长汀
|
||||
FAN'SHI 繁峙
|
||||
CHANG'SHA 长沙
|
||||
CHANG'DAO 长岛
|
||||
XIA'MEN 厦门
|
||||
CHANG'LING 长岭
|
||||
CHANG'TAI 长泰
|
||||
YU'LI 尉犁
|
||||
LU'AN 六安
|
||||
BA'XIU 八宿
|
||||
CHANG'HAI 长海
|
||||
MU'PING 牟平
|
||||
A'TU'SHI 阿图什
|
||||
CHANG'ZHI'SHI 长治市
|
||||
CHANG'QING 长清
|
||||
CHANG'FENG 长丰
|
||||
CHANG'LE 长乐
|
||||
FENG'DU 丰都
|
||||
KA'SHI 喀什
|
||||
TONG'BAI 桐柏
|
||||
YUE'QING 乐清
|
||||
ZHONG'MU 中牟
|
||||
SHI'FANG 什邡
|
||||
WU'SHI 乌什
|
||||
DU'AN 都安
|
||||
LAO'TING 乐亭
|
||||
WU'BU 吴堡
|
||||
NA'QU 那曲
|
||||
SHAN'XIAN 单县
|
||||
NA'PO 那坡
|
||||
JU'MO 且末
|
||||
CHANG'XING 长兴
|
||||
GONG'CHANG'LING 弓长岭
|
||||
CHANG'DU 昌都
|
||||
XIAO'TING 猇亭
|
||||
GUO'YANG 涡阳
|
||||
QIAN'WEI 犍为
|
||||
WANG'DU 望都
|
||||
LUE'YANG 略阳
|
||||
SHUANG'BAI 双柏
|
||||
CHANG'SHA'XIAN 长沙县
|
||||
XIN'YUE 新乐
|
||||
CHANG'GE 长葛
|
||||
CUO'NA 错那
|
||||
DU'JIANG'YAN 都江堰
|
||||
LANG'QIA'ZI 浪卡子
|
||||
XING'YANG 荥阳
|
||||
LU'QU 碌曲
|
||||
HUANG'PI 黄陂
|
||||
@@ -1,8 +0,0 @@
|
||||
# Android Native Library
|
||||
[Xamarin.Android 支持通过标准 PInvoke 机制使用本机库。 你还可以将不属于 OS 的其他本机库绑定到你的 .apk。](https://docs.microsoft.com/zh-cn/xamarin/android/platform/native-libraries)
|
||||
|
||||
## libgojni.so & libtun2socks.so
|
||||
Source code compilation by https://github.com/2dust/v2rayNG
|
||||
|
||||
## shadowsocks-android\libtun2socks.so
|
||||
Apk extraction by https://github.com/shadowsocks/shadowsocks-android/releases/tag/v5.2.6
|
||||
@@ -3,6 +3,5 @@ using static System.Properties.ThisAssembly;
|
||||
|
||||
[assembly: SuppressIldasm]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Avalonia" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("Xamarin.Forms.Platform.Android.UnitTests" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("Assembly-CSharp" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Mobile" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Desktop" + PublicKey)]
|
||||
@@ -1,7 +0,0 @@
|
||||
# Windows/macOS/Linux x64 Native Library & General C# Source Code & Third Party Projects
|
||||
|
||||
## 7z.dll
|
||||
21.07 (2021-12-26) by https://www.7-zip.org
|
||||
|
||||
## libzstd.dll
|
||||
https://github.com/facebook/zstd/releases/tag/v1.5.2
|
||||
@@ -1,4 +0,0 @@
|
||||
# Windows/macOS/Linux x86(32 bit) Native Library
|
||||
|
||||
## 7z.dll
|
||||
21.07 (2021-12-26) by https://www.7-zip.org
|
||||
@@ -1,34 +1,27 @@
|
||||
### 版本亮点
|
||||
1. Android 支持 VPN 模式(推荐) 进行本地加速
|
||||
2. 新增 Steam 游戏信息编辑功能,可修改游戏名称、图片、启动项等数据并同步至 Steam 客户端生效
|
||||
3. ASF 升级至 V5.2.5.4
|
||||
4. 优化了显示图片时 GPU 占用
|
||||
5. 优化库存游戏和脚本内存占用
|
||||
6. 库存游戏编辑功能支持从 SteamGridDB 匹配预览和下载图片
|
||||
7. 网络加速新增 MEGA 网盘反代服务
|
||||
8. macOS 支持 Arm64(Apple Silicon)
|
||||
|
||||
<!--
|
||||
. ~~Windows 支持 DNS 驱动拦截模式(推荐) 进行本地加速~~
|
||||
-->
|
||||
1. ASF 升级至 **V5.2.3.5**
|
||||
2. ASF 配置 中新增 设置自定义密钥(ASF_CRYPTKEY) 与 导入 Bot 文件
|
||||
3. Linux 发行压缩包由 7z 格式更改为 tar.zst
|
||||
4. 网络加速 支持 IPv6 网络访问 Steam 讨论/留言相关功能
|
||||
6. 网络加速 支持 Steam 商店 访问被限制的游戏页面
|
||||
7. 网络加速 新增了部分被限制的 CDN 加速,支持访问 stackoverflow
|
||||
8. 账号切换 家庭库共享管理新增暂时禁用启用指定账号的功能 可在排序失效时使用
|
||||
|
||||
### 修复问题
|
||||
1. 修复 本地令牌 无令牌刷新时提示密码错误
|
||||
2. 改进 Android 端 本地令牌 列表样式第一条与最后一条的上下外边距
|
||||
3. 改进 俄语翻译,由 vanja-san 提供
|
||||
4. 改进 .NET 运行时升级至 6.0.4(仅 Desktop 端)
|
||||
5. 改进 脚本配置 未启动时的内存占用,以及减少总体内存占用率
|
||||
6. 修复 Hosts 加速模式下使用仅启用脚本功能导致死循环
|
||||
7. 改进 Linux 端 可监听 443 端口配置
|
||||
8. 修复 Windows 端,动态桌面背景窗口显示时一些可能导致闪退的潜在问题
|
||||
9. 修复 Android 端,因 CheckBox 导致在低于 6.0 Marshmallow 系统上引发的闪退
|
||||
10. 修复 Desktop 高 DPI 分辨率下菜单图标会显示模糊的问题
|
||||
11. 修复 Windows 端,切换至网络加速菜单时可能会出现 UI 错乱的问题
|
||||
12. 修复 Desktop 端,某些情况库存游戏会卡住无限加载的问题
|
||||
13. 修复 网络加速 Onedrive 加速失效问题
|
||||
14. 修复 消息框不再提醒复选框勾上可能不生效的问题
|
||||
15. 修复 Windows 端, JumpList 切换 Steam Beta 账号失效的问题
|
||||
16. 修复 ASF,当使用 IPC.config 时,程序内打开网页端口号值不正确
|
||||
1. 修复 Android 端 程序启动时自动运行 网络加速 与 ASF 服务
|
||||
2. 修复 Android 端 网络加速 VPN 模式
|
||||
3. 修复 Android 端 切换系统语言时可能导致的闪退
|
||||
4. 修复 Android 端 拒绝授予存储权限导致的闪退
|
||||
5. 改进 网络加速 中的代理证书生成
|
||||
6. 改进 账号切换 中读取 Vdf 配置操作
|
||||
7. 修复 Desktop 端 家庭共享库管理 在 Steam Beta 版上不能正常使用
|
||||
8. 修复 网络加速 Twitch 聊天服务链接不上的问题
|
||||
9. 修复 网络加速 github.io 加速影响部分仓库访问 404 的问题
|
||||
10. 修复 网络加速 Steam 社区加速后会出现【请重新输入下方验证码中的字符来验证此为人工操作】的问题
|
||||
11. 暂时移除了网络加速中部分失效的加速项目
|
||||
12. 修复 令牌交易 登录状态失效时刷新应该回到登录界面
|
||||
13. 改进 本地令牌 移除令牌时的提示
|
||||
14. 修复 网络加速 滚动条错误滚动的问题
|
||||
|
||||
### 已知问题
|
||||
- 除 Windows 之外的平台此软件自动更新尚不可用
|
||||
@@ -36,6 +29,7 @@
|
||||
- macOS
|
||||
- [尚未公证](https://support.apple.com/zh-cn/guide/mac-help/mh40616/10.15/mac/10.15),这会影响 macOS Catalina(版本 10.15)以上版本
|
||||
- Linux
|
||||
- **Hosts 代理模式**可能无法配置成功,推荐使用**系统代理模式**
|
||||
- 窗口弹出位置不正确
|
||||
- 鼠标指针浮动样式不正确
|
||||
- Windows
|
||||
@@ -48,20 +42,19 @@
|
||||
- 需要安装 Extended Security Update
|
||||
- 在不符合先决条件的情况下运行可能导致
|
||||
- 程序无法正常运行
|
||||
- **解决方案**
|
||||
- 使用 Windows Update 更新系统补丁
|
||||
- 运行程序时提示 计算机中丢失 api-ms-win-core-winrt-l1-1-0.dll
|
||||
- **解决方案**
|
||||
- 下载 api-ms-win-core-winrt-l1-1-0.dll 文件放入程序根目录(Steam++.exe 所在文件夹)
|
||||
- [从 Github 上直接下载](https://github.com/BeyondDimension/SteamTools/raw/develop/references/runtime.win7-x64.Microsoft.NETCore.Windows.ApiSets/api-ms-win-core-winrt-l1-1-0.dll)
|
||||
- [从 Gitee 上直接下载](https://gitee.com/rmbgame/SteamTools/raw/develop/references/runtime.win7-x64.Microsoft.NETCore.Windows.ApiSets/api-ms-win-core-winrt-l1-1-0.dll)
|
||||
- Android
|
||||
- 本地加速
|
||||
- 因 Android 7(Nougat API 24) 之后的版本不在信任用户证书,所以此功能已放弃继续开发,如仍想使用需要自行导入证书到系统目录,使用 adb 工具或 Magisk 之类的软件操作,未来会使用不需要证书的加速功能替换此功能
|
||||
|
||||
- **解决方案**
|
||||
- 因 [Windows 7 延长结束日期](https://support.microsoft.com/zh-cn/windows/windows-7-%E6%94%AF%E6%8C%81%E4%BA%8E-2020-%E5%B9%B4-1-%E6%9C%88-14-%E6%97%A5%E7%BB%88%E6%AD%A2-b75d4580-2cc7-895a-2c9c-1466d9a53962)以于 2020 年 1 月 14 日结束支持
|
||||
- 所以必须安装 [Extended Security Update](https://docs.microsoft.com/zh-cn/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq) 支持,在安装第三年的补丁后[结束支持日期](https://docs.microsoft.com/zh-cn/lifecycle/products/windows-7)可延长至 2023 年 1 月 10 日
|
||||
- 可安装 *第三方* 补丁整合包例如 **[UpdatePack7R2](https://cn.bing.com/search?q=UpdatePack7R2)** *或* 购买官方 ESU 产品密钥 解决
|
||||
- 下载 api-ms-win-core-winrt-l1-1-0.dll 文件放入程序根目录(Steam++.exe 所在文件夹)
|
||||
- [从 Github 上直接下载](https://github.com/BeyondDimension/SteamTools/raw/develop/references/runtime.win7-x64.Microsoft.NETCore.Windows.ApiSets/api-ms-win-core-winrt-l1-1-0.dll)
|
||||
- [从 Gitee 上直接下载](https://gitee.com/rmbgame/SteamTools/raw/develop/references/runtime.win7-x64.Microsoft.NETCore.Windows.ApiSets/api-ms-win-core-winrt-l1-1-0.dll)
|
||||
- [从 NuGet 上下载后提取](https://www.nuget.org/api/v2/package/runtime.win7-x64.Microsoft.NETCore.Windows.ApiSets/1.0.1)
|
||||
- .nupkg 文件可使用解压工具打开或解压,找到此文件复制即可
|
||||
|
||||
[](https://steampp.net)
|
||||
[]()
|
||||
[]()
|
||||
|
||||
|
||||
##### [不知道该下载哪个文件?](./download-guide.md)
|
||||
@@ -70,22 +63,21 @@
|
||||
### 文件校验
|
||||
| File | Checksum (SHA256) |
|
||||
| ---- | ---- |
|
||||
| Steam++_win_x64_v2.7.0.7z | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.7.0.7z | SHA256 |
|
||||
| Steam++_win_x64_v2.6.9.7z | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.6.9.7z | SHA256 |
|
||||
| | |
|
||||
| Steam++_win_x64_v2.7.0.exe | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.7.0.exe | SHA256 |
|
||||
| Steam++_win_x64_v2.6.9.exe | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.6.9.exe | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.7.0.7z | SHA256 |
|
||||
| Steam++_linux_arm64_v2.7.0.7z | SHA256 |
|
||||
| Steam++_linux_x64_v2.6.9.7z | SHA256 |
|
||||
| Steam++_linux_arm64_v2.6.9.7z | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.7.0.deb | SHA256 |
|
||||
| Steam++_linux_arm64_v2.7.0.deb | SHA256 |
|
||||
| Steam++_linux_x64_v2.6.9.deb | SHA256 |
|
||||
| Steam++_linux_arm64_v2.6.9.deb | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.7.0.rpm | SHA256 |
|
||||
| Steam++_linux_arm64_v2.7.0.rpm | SHA256 |
|
||||
| Steam++_linux_x64_v2.6.9.rpm | SHA256 |
|
||||
| Steam++_linux_arm64_v2.6.9.rpm | SHA256 |
|
||||
| | |
|
||||
| Steam++_macos_x64_v2.7.0.dmg | SHA256 |
|
||||
| Steam++_macos_arm64_v2.7.0.dmg | SHA256 |
|
||||
| Steam++_macos_x64_v2.6.9.dmg | SHA256 |
|
||||
| | |
|
||||
| Steam++_android_v2.7.0.apk | SHA256 |
|
||||
| Steam++_android_v2.6.9.apk | SHA256 |
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace System
|
||||
public const string MainDllPath_ =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\{0}\Steam++.dll";
|
||||
|
||||
[Obsolete("use DirPublishWinX86_")]
|
||||
[Obsolete("use DirPublishWinX86_", true)]
|
||||
public const string DirPublishWinX86 =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Publish\win-x86";
|
||||
|
||||
@@ -46,9 +46,6 @@ namespace System
|
||||
public const string DirPublishWinX64_ =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\{0}\Publish\win-x64";
|
||||
|
||||
public const string DirPublishOsx =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Publish\{0}";
|
||||
|
||||
public const string DirPublishWinX64_FDE_ =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\{0}\Publish\FrameworkDependent\win-x64";
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 829 KiB After Width: | Height: | Size: 686 KiB |
|
Before Width: | Height: | Size: 660 KiB After Width: | Height: | Size: 657 KiB |
@@ -151,24 +151,6 @@ namespace System.Application.UI
|
||||
b.Append(platformService.IsInstall.ToLowerString());
|
||||
b.AppendLine();
|
||||
|
||||
#if WINDOWS10_0_17763_0_OR_GREATER
|
||||
if (OperatingSystem2.IsWindows10AtLeast)
|
||||
{
|
||||
try
|
||||
{
|
||||
#pragma warning disable CA1416 // 验证平台兼容性
|
||||
var currentPackage = global::Windows.ApplicationModel.Package.Current;
|
||||
var familyName = currentPackage.Id.FamilyName;
|
||||
b.Append("[app.pkg] ");
|
||||
b.Append(familyName);
|
||||
b.AppendLine();
|
||||
#pragma warning restore CA1416 // 验证平台兼容性
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
b.Append("[memory.usage] ");
|
||||
#if __ANDROID__
|
||||
@@ -197,7 +179,6 @@ namespace System.Application.UI
|
||||
b.Append(RuntimeInformation.ProcessArchitecture);
|
||||
b.AppendLine();
|
||||
|
||||
#if MONOANDROID
|
||||
b.Append("[clr.ver] ");
|
||||
string? clrVersion;
|
||||
try
|
||||
@@ -213,16 +194,9 @@ namespace System.Application.UI
|
||||
else
|
||||
b.Append(clrVersion);
|
||||
b.AppendLine();
|
||||
#endif
|
||||
|
||||
#if __ANDROID__
|
||||
|
||||
#if V2RAY
|
||||
b.Append("[v2ray.ver] ");
|
||||
b.Append(Libv2ray.Libv2ray.CheckVersionX());
|
||||
b.AppendLine();
|
||||
#endif
|
||||
|
||||
//if (_ThisAssembly.Debuggable)
|
||||
//{
|
||||
// b.Append("[app.multi] ");
|
||||
@@ -269,25 +243,18 @@ namespace System.Application.UI
|
||||
static void GetStartTime(StringBuilder b)
|
||||
{
|
||||
string startTimeStr;
|
||||
try
|
||||
{
|
||||
const string f = "yy-MM-dd HH:mm:ss";
|
||||
const string f2 = "HH:mm:ss";
|
||||
const string f3 = "dd HH:mm:ss";
|
||||
var starttime = ArchiSteamFarm.Core.OS.ProcessStartTime;
|
||||
starttime = starttime.ToLocalTime();
|
||||
var utc_time = starttime.ToUniversalTime();
|
||||
var local = TimeZoneInfo.Local;
|
||||
startTimeStr = utc_time.Hour == starttime.Hour
|
||||
? starttime.ToString(starttime.Year >= 2100 ? DateTimeFormat.Standard : f)
|
||||
: utc_time.Day == starttime.Day
|
||||
? $"{utc_time.ToString(f)}({starttime.ToString(f2)} {local.StandardName})"
|
||||
: $"{utc_time.ToString(f)}({starttime.ToString(f3)} {local.StandardName})";
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
startTimeStr = string.Empty;
|
||||
}
|
||||
const string f = "yy-MM-dd HH:mm:ss";
|
||||
const string f2 = "HH:mm:ss";
|
||||
const string f3 = "dd HH:mm:ss";
|
||||
var starttime = Process.GetCurrentProcess().StartTime;
|
||||
starttime = starttime.ToLocalTime();
|
||||
var utc_time = starttime.ToUniversalTime();
|
||||
var local = TimeZoneInfo.Local;
|
||||
startTimeStr = utc_time.Hour == starttime.Hour
|
||||
? starttime.ToString(starttime.Year >= 2100 ? DateTimeFormat.Standard : f)
|
||||
: utc_time.Day == starttime.Day
|
||||
? $"{utc_time.ToString(f)}({starttime.ToString(f2)} {local.StandardName})"
|
||||
: $"{utc_time.ToString(f)}({starttime.ToString(f3)} {local.StandardName})";
|
||||
b.Append(startTimeStr);
|
||||
}
|
||||
b.AppendLine();
|
||||
@@ -395,15 +362,9 @@ namespace System.Application.UI
|
||||
b.Append(GetJavaSystemGetProperty("java.vm.version"));
|
||||
b.AppendLine();
|
||||
|
||||
#if MONOANDROID
|
||||
b.Append("[mono.ver] ");
|
||||
b.Append(Mono.Runtime.GetDisplayName());
|
||||
b.AppendLine();
|
||||
#else
|
||||
b.Append("[clr.ver] ");
|
||||
b.Append(Environment.Version);
|
||||
b.AppendLine();
|
||||
#endif
|
||||
|
||||
b.Append("[kernel.ver] ");
|
||||
b.Append(GetJavaSystemGetProperty("os.version"));
|
||||
|
||||
@@ -14,8 +14,4 @@
|
||||
<PackageReference Include="Avalonia.Skia" Aliases="AvaloniaSkia" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -9,7 +9,6 @@ namespace Avalonia.Skia
|
||||
public sealed class SKTypefaceCollection
|
||||
{
|
||||
readonly @this @this;
|
||||
|
||||
internal SKTypefaceCollection(@this @this)
|
||||
{
|
||||
this.@this = @this;
|
||||
|
||||
@@ -37,8 +37,4 @@
|
||||
<LastGenOutput>SR.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -118,19 +118,19 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ExitCode_IsEmulator" xml:space="preserve">
|
||||
<value>이 앱은 에뮬레이터에서 실행을 지원하지 않습니다.</value>
|
||||
<value>이 앱은 에뮬레이터에서 실행을 지원하지 않습니다</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsRoot" xml:space="preserve">
|
||||
<value>이 응용 프로그램은 루트 권한이있는 장치에서 실행할 수 없습니다</value>
|
||||
<value>이 앱은 ROOT 권한이 있는 장치에서 실행을 지원하지 않습니다</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsVirtualApk" xml:space="preserve">
|
||||
<value>이 응용 프로그램은 멀티 오픈을 지원하지 않습니다.</value>
|
||||
<value>이 응용 프로그램은 멀티 오픈을 지원하지 않습니다</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsXposedExists" xml:space="preserve">
|
||||
<value>이 응용 프로그램은 Xposed 프레임 워크가 설치된 장치에서 실행을 지원하지 않습니다.</value>
|
||||
<value>이 앱은 Xposed 프레임워크가 설치된 장치에서 실행을 지원하지 않습니다</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -118,19 +118,19 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ExitCode_IsEmulator" xml:space="preserve">
|
||||
<value>Это приложение невозможно запустить через эмулятор</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<value>Это приложение не поддерживает запуск в эмуляторе</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsRoot" xml:space="preserve">
|
||||
<value>Это приложение невозможно запустить на устройствах с root правами</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<value>Это приложение не поддерживается для запуска на устройствах с привилегиями ROOT</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsVirtualApk" xml:space="preserve">
|
||||
<value>Это приложение не поддерживает несколько окон</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<value>Это приложение не поддерживает мультиоткрытие</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsXposedExists" xml:space="preserve">
|
||||
<value>Это приложение невозможно запустить на устройствах с установленным Xposed Framework</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<value>Это приложение не поддерживает запуск на устройствах с установленной платформой Xposed</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -55,9 +55,9 @@ namespace System.Application.Services.Implementation
|
||||
Log.Error(TAG, e, "ShowDroidToast Error, text: {0}, IsMainThread: {1}", text, IsMainThread);
|
||||
// 解决在子线程中调用Toast的异常情况处理
|
||||
Looper.Prepare();
|
||||
var toast_ = AndroidToast.MakeText(context, text, duration2)
|
||||
var _toast = AndroidToast.MakeText(context, text, duration2)
|
||||
?? throw new NullReferenceException("toast markeText Fail(2)");
|
||||
SetTextAndShow(toast_, text);
|
||||
SetTextAndShow(_toast, text);
|
||||
Looper.Loop();
|
||||
}
|
||||
|
||||
|
||||
@@ -2,62 +2,33 @@ using Android.Runtime;
|
||||
using Java.Security.Cert;
|
||||
using System.IO;
|
||||
using Xamarin.Android.Net;
|
||||
using X509Certificate2 = System.Security.Cryptography.X509Certificates.X509Certificate2;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace System
|
||||
{
|
||||
public static partial class HttpClientExtensions
|
||||
{
|
||||
const string certificateFileType = "X.509";
|
||||
|
||||
static readonly Lazy<CertificateFactory?> certificateFactory = new(() =>
|
||||
{
|
||||
var certificateFactory = CertificateFactory.GetInstance(certificateFileType);
|
||||
return certificateFactory;
|
||||
});
|
||||
|
||||
internal static CertificateFactory CertificateFactory
|
||||
{
|
||||
get
|
||||
{
|
||||
var certificateFactory = HttpClientExtensions.certificateFactory.Value;
|
||||
if (certificateFactory == null)
|
||||
throw new NullReferenceException(
|
||||
$"CertificateFactory.GetInstance Fail, Type: {certificateFileType}");
|
||||
return certificateFactory;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加可信任证书,可用于调试时 HTTPS 抓包
|
||||
/// 添加可信任证书,可用于调试时HTTPS抓包
|
||||
/// </summary>
|
||||
/// <param name="handler"></param>
|
||||
/// <param name="certificateFileData">证书文件数据(文件流,内嵌资源流)</param>
|
||||
/// <param name="certificateFileType">证书文件类型,默认使用X.509</param>
|
||||
public static void AddTrustedCert(
|
||||
this AndroidClientHandler handler,
|
||||
Stream certificateFileData)
|
||||
Stream certificateFileData,
|
||||
string certificateFileType = "X.509")
|
||||
{
|
||||
var certificate = CertificateFactory.GenerateCertificate(certificateFileData);
|
||||
var certificateFactory = CertificateFactory.GetInstance(certificateFileType);
|
||||
if (certificateFactory == null)
|
||||
throw new NullReferenceException(
|
||||
$"CertificateFactory.GetInstance Fail, Type: {certificateFileType}");
|
||||
var certificate = certificateFactory.GenerateCertificate(certificateFileData);
|
||||
if (certificate == null)
|
||||
throw new NullReferenceException("GenerateCertificate Fail");
|
||||
if (handler.TrustedCerts == null)
|
||||
handler.TrustedCerts = new JavaList<Certificate>();
|
||||
handler.TrustedCerts.Add(certificate);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将 .NET 中的 X509 证书对象 转换为 JVM 中的 X509 证书对象
|
||||
/// <para>Java.Security.Cert.X509Certificate</para>
|
||||
/// <para>=></para>
|
||||
/// <para>System.Security.Cryptography.X509Certificates.X509Certificate2</para>
|
||||
/// </summary>
|
||||
/// <param name="certificate2"></param>
|
||||
/// <returns></returns>
|
||||
public static X509Certificate Convert(this X509Certificate2 certificate2)
|
||||
{
|
||||
using var stream = new MemoryStream(certificate2.RawData);
|
||||
return CertificateFactory.GenerateCertificate(stream)!.JavaCast<X509Certificate>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,8 +22,4 @@
|
||||
<ProjectReference Include="..\Common.ClientLib\Common.ClientLib.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -1,126 +1,125 @@
|
||||
//using System.Diagnostics;
|
||||
//using System.Diagnostics.CodeAnalysis;
|
||||
//using System.IO;
|
||||
//using System.Linq;
|
||||
//using System.Properties;
|
||||
//using System.Reflection;
|
||||
//using System.Security.Cryptography;
|
||||
//using System.Text;
|
||||
//using _ThisAssembly = System.Properties.ThisAssembly;
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Properties;
|
||||
using System.Reflection;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using _ThisAssembly = System.Properties.ThisAssembly;
|
||||
|
||||
//namespace System.Application
|
||||
//{
|
||||
// [Obsolete]
|
||||
// [DebuggerDisplay("{DebuggerDisplay(),nq}")]
|
||||
// [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
|
||||
// public sealed class AppClientAttribute : Attribute
|
||||
// {
|
||||
// string DebuggerDisplay() => $"type: {type}";
|
||||
namespace System.Application
|
||||
{
|
||||
[DebuggerDisplay("{DebuggerDisplay(),nq}")]
|
||||
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
|
||||
public sealed class AppClientAttribute : Attribute
|
||||
{
|
||||
string DebuggerDisplay() => $"type: {type}";
|
||||
|
||||
// readonly Type? type;
|
||||
// string? str;
|
||||
readonly Type? type;
|
||||
string? str;
|
||||
|
||||
// [NotNull, DisallowNull] // C# 8 not null
|
||||
// public object? Value { get; private set; }
|
||||
[NotNull, DisallowNull] // C# 8 not null
|
||||
public object? Value { get; private set; }
|
||||
|
||||
// public AppClientAttribute(Type type, string str)
|
||||
// {
|
||||
// this.type = type;
|
||||
// this.str = str;
|
||||
// init();
|
||||
// if (Value == null) throw new ArgumentNullException(nameof(Value));
|
||||
// }
|
||||
public AppClientAttribute(Type type, string str)
|
||||
{
|
||||
this.type = type;
|
||||
this.str = str;
|
||||
init();
|
||||
if (Value == null) throw new ArgumentNullException(nameof(Value));
|
||||
}
|
||||
|
||||
//#pragma warning disable IDE1006 // 命名样式
|
||||
#pragma warning disable IDE1006 // 命名样式
|
||||
|
||||
// void init()
|
||||
//#pragma warning restore IDE1006 // 命名样式
|
||||
// {
|
||||
// ctor();
|
||||
void init()
|
||||
#pragma warning restore IDE1006 // 命名样式
|
||||
{
|
||||
ctor();
|
||||
|
||||
// void ctor()
|
||||
// {
|
||||
//#if DEBUG
|
||||
// var stopwatch = Stopwatch.StartNew();
|
||||
//#endif
|
||||
// Value = Serializable.DMPB64U(type.ThrowIsNull(nameof(type)), str)
|
||||
// .ThrowIsNull(nameof(Value));
|
||||
// str = null;
|
||||
//#if DEBUG
|
||||
// stopwatch.Stop();
|
||||
// Debug.WriteLine($"AppClientAttr init 耗时:{stopwatch.ElapsedMilliseconds}ms");
|
||||
//#endif
|
||||
// }
|
||||
// }
|
||||
void ctor()
|
||||
{
|
||||
#if DEBUG
|
||||
var stopwatch = Stopwatch.StartNew();
|
||||
#endif
|
||||
Value = Serializable.DMPB64U(type.ThrowIsNull(nameof(type)), str)
|
||||
.ThrowIsNull(nameof(Value));
|
||||
str = null;
|
||||
#if DEBUG
|
||||
stopwatch.Stop();
|
||||
Debug.WriteLine($"AppClientAttr init 耗时:{stopwatch.ElapsedMilliseconds}ms");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
// [return: MaybeNull]
|
||||
// public static T Get<T>(Assembly? assembly = null)
|
||||
// {
|
||||
//#if DEBUG
|
||||
// var stopwatch = Stopwatch.StartNew();
|
||||
//#endif
|
||||
// assembly ??= Assembly.GetCallingAssembly();
|
||||
// var attrs = assembly.GetCustomAttributes<AppClientAttribute>();
|
||||
// var type = typeof(T);
|
||||
// var attr = attrs.FirstOrDefault(x => x.Value != null && x.type == type);
|
||||
// var t = (attr != default && attr.Value is T value) ? value : default;
|
||||
//#if DEBUG
|
||||
// stopwatch.Stop();
|
||||
// Debug.WriteLine($"AppClientAttr Get<{type.Name}> 耗时:{stopwatch.ElapsedMilliseconds}ms");
|
||||
//#endif
|
||||
// return t;
|
||||
// }
|
||||
[return: MaybeNull]
|
||||
public static T Get<T>(Assembly? assembly = null)
|
||||
{
|
||||
#if DEBUG
|
||||
var stopwatch = Stopwatch.StartNew();
|
||||
#endif
|
||||
assembly ??= Assembly.GetCallingAssembly();
|
||||
var attrs = assembly.GetCustomAttributes<AppClientAttribute>();
|
||||
var type = typeof(T);
|
||||
var attr = attrs.FirstOrDefault(x => x.Value != null && x.type == type);
|
||||
var t = (attr != default && attr.Value is T value) ? value : default;
|
||||
#if DEBUG
|
||||
stopwatch.Stop();
|
||||
Debug.WriteLine($"AppClientAttr Get<{type.Name}> 耗时:{stopwatch.ElapsedMilliseconds}ms");
|
||||
#endif
|
||||
return t;
|
||||
}
|
||||
|
||||
// public enum ResValueFormat : byte
|
||||
// {
|
||||
// String,
|
||||
// StringGuidD,
|
||||
// StringGuidN,
|
||||
// }
|
||||
public enum ResValueFormat : byte
|
||||
{
|
||||
String,
|
||||
StringGuidD,
|
||||
StringGuidN,
|
||||
}
|
||||
|
||||
// public static string? GetResValue(Func<string, Stream?> func, string name, bool isSingle, string namespacePrefix, ResValueFormat format)
|
||||
// {
|
||||
// static string GetResFileName(string name, bool isSingle) => isSingle ? $"{name}.pfx" : $"{name}-{(_ThisAssembly.Debuggable ? "debug" : "release")}.pfx";
|
||||
// static string GetResFileNameH(string name) => Hashs.String.Crc32(name, isLower: false);
|
||||
// static string GetResFullName(string name, string namespacePrefix) => string.IsNullOrEmpty(namespacePrefix) ? name : namespacePrefix + name;
|
||||
// static MemoryStream GetMemoryStream(Stream stream)
|
||||
// {
|
||||
// if (stream is not MemoryStream ms)
|
||||
// {
|
||||
// ms = new MemoryStream();
|
||||
// stream.CopyTo(ms);
|
||||
// }
|
||||
// return ms;
|
||||
// }
|
||||
// static string ReadStream(Stream stream, ResValueFormat format)
|
||||
// {
|
||||
// if (format == ResValueFormat.String)
|
||||
// {
|
||||
// using var reader = new StreamReader(stream, EncodingCache.UTF8NoBOM);
|
||||
// return reader.ReadToEnd();
|
||||
// }
|
||||
// if (format == ResValueFormat.StringGuidD || format == ResValueFormat.StringGuidN)
|
||||
// {
|
||||
// using var ms = GetMemoryStream(stream);
|
||||
// var guid = new Guid(ms.ToArray());
|
||||
// return format switch
|
||||
// {
|
||||
// ResValueFormat.StringGuidD => guid.ToString("D"),
|
||||
// ResValueFormat.StringGuidN => guid.ToString("N"),
|
||||
// _ => throw new ArgumentOutOfRangeException(nameof(format), format, null),
|
||||
// };
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// throw new ArgumentOutOfRangeException(nameof(format), format, null);
|
||||
// }
|
||||
// }
|
||||
// name = GetResFileName(name, isSingle);
|
||||
// name = GetResFileNameH(name);
|
||||
// name = GetResFullName(name, namespacePrefix);
|
||||
// using var stream = func(name);
|
||||
// if (stream != null) return ReadStream(stream, format);
|
||||
// return null;
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
public static string? GetResValue(Func<string, Stream?> func, string name, bool isSingle, string namespacePrefix, ResValueFormat format)
|
||||
{
|
||||
static string GetResFileName(string name, bool isSingle) => isSingle ? $"{name}.pfx" : $"{name}-{(_ThisAssembly.Debuggable ? "debug" : "release")}.pfx";
|
||||
static string GetResFileNameH(string name) => Hashs.String.Crc32(name, isLower: false);
|
||||
static string GetResFullName(string name, string namespacePrefix) => string.IsNullOrEmpty(namespacePrefix) ? name : namespacePrefix + name;
|
||||
static MemoryStream GetMemoryStream(Stream stream)
|
||||
{
|
||||
if (stream is not MemoryStream ms)
|
||||
{
|
||||
ms = new MemoryStream();
|
||||
stream.CopyTo(ms);
|
||||
}
|
||||
return ms;
|
||||
}
|
||||
static string ReadStream(Stream stream, ResValueFormat format)
|
||||
{
|
||||
if (format == ResValueFormat.String)
|
||||
{
|
||||
using var reader = new StreamReader(stream, EncodingCache.UTF8NoBOM);
|
||||
return reader.ReadToEnd();
|
||||
}
|
||||
if (format == ResValueFormat.StringGuidD || format == ResValueFormat.StringGuidN)
|
||||
{
|
||||
using var ms = GetMemoryStream(stream);
|
||||
var guid = new Guid(ms.ToArray());
|
||||
return format switch
|
||||
{
|
||||
ResValueFormat.StringGuidD => guid.ToString("D"),
|
||||
ResValueFormat.StringGuidN => guid.ToString("N"),
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(format), format, null),
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(format), format, null);
|
||||
}
|
||||
}
|
||||
name = GetResFileName(name, isSingle);
|
||||
name = GetResFileNameH(name);
|
||||
name = GetResFullName(name, namespacePrefix);
|
||||
using var stream = func(name);
|
||||
if (stream != null) return ReadStream(stream, format);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,8 +10,6 @@ namespace System.Application
|
||||
public const string Prefix_HTTP = "http://";
|
||||
|
||||
public const string Prefix_MSStore = "ms-windows-store://";
|
||||
|
||||
public const string Prefix_Email = "mailto:";
|
||||
|
||||
/// <summary>
|
||||
/// 判断字符串是否为 Http Url
|
||||
@@ -29,12 +27,5 @@ namespace System.Application
|
||||
/// <param name="url"></param>
|
||||
/// <returns></returns>
|
||||
public static bool IsStoreUrl([NotNullWhen(true)] string? url) => url != null && url.StartsWith(Prefix_MSStore, StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
/// <summary>
|
||||
/// 判断字符串是否为 Email Url
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
/// <returns></returns>
|
||||
public static bool IsEmailUrl([NotNullWhen(true)] string? url) => url != null && url.StartsWith(Prefix_Email, StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
}
|
||||
@@ -52,7 +52,7 @@ namespace System.Application
|
||||
|
||||
static OpenResultCode OpenAnalysis(string? url)
|
||||
{
|
||||
if (IsStoreUrl(url) || IsEmailUrl(url))
|
||||
if (IsStoreUrl(url))
|
||||
{
|
||||
return OpenCoreByProcess(url);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ namespace System.Application
|
||||
public static class DeviceInfo2
|
||||
{
|
||||
static readonly Lazy<IDeviceInfoPlatformService?> @interface = new(DI.Get_Nullable<IDeviceInfoPlatformService>);
|
||||
|
||||
static IDeviceInfoPlatformService? Interface => @interface.Value;
|
||||
|
||||
/// <inheritdoc cref="DeviceInfo.Model"/>
|
||||
@@ -161,10 +160,6 @@ namespace System.Application
|
||||
{
|
||||
return OSNames.Value.WSA;
|
||||
}
|
||||
else if (Interface != null && Interface.IsChromeOS)
|
||||
{
|
||||
return OSNames.Value.ChromeOS;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DeviceType == DeviceType.Virtual)
|
||||
@@ -206,7 +201,6 @@ namespace System.Application
|
||||
}
|
||||
return default;
|
||||
});
|
||||
|
||||
public static OSNames.Value OSNameValue => _OSNameValue.Value;
|
||||
|
||||
/// <inheritdoc cref="DeviceInfo.DeviceType"/>
|
||||
|
||||
@@ -94,7 +94,6 @@ namespace System.Application
|
||||
}
|
||||
|
||||
static bool mIsFirstLaunchEver;
|
||||
|
||||
/// <summary>
|
||||
/// 获取一个值,该值指示此应用是否首次在此设备上启动。
|
||||
/// </summary>
|
||||
@@ -111,7 +110,6 @@ namespace System.Application
|
||||
return mIsFirstLaunchEver;
|
||||
}
|
||||
}
|
||||
|
||||
private set
|
||||
{
|
||||
mIsFirstLaunchEver = value;
|
||||
@@ -119,7 +117,6 @@ namespace System.Application
|
||||
}
|
||||
|
||||
static bool mIsFirstLaunchForCurrentVersion;
|
||||
|
||||
/// <summary>
|
||||
/// 获取一个值,该值指示这是否是当前版本号的应用程序的首次启动。
|
||||
/// </summary>
|
||||
@@ -136,7 +133,6 @@ namespace System.Application
|
||||
return mIsFirstLaunchForCurrentVersion;
|
||||
}
|
||||
}
|
||||
|
||||
private set
|
||||
{
|
||||
mIsFirstLaunchForCurrentVersion = value;
|
||||
|
||||
@@ -13,11 +13,10 @@ namespace System.Application.Services
|
||||
string VersionString { get; }
|
||||
|
||||
DeviceType DeviceType { get; }
|
||||
|
||||
bool IsChromeOS { get; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
namespace System.Application.Services.Implementation
|
||||
{
|
||||
public abstract class DeviceInfoPlatformServiceImpl : IDeviceInfoPlatformService
|
||||
@@ -31,7 +30,5 @@ namespace System.Application.Services.Implementation
|
||||
public /*virtual*/ string VersionString => DeviceInfo.VersionString;
|
||||
|
||||
public virtual DeviceType DeviceType => DeviceInfo.DeviceType;
|
||||
|
||||
public virtual bool IsChromeOS => false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
namespace System.Application.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 通知栏服务
|
||||
/// </summary>
|
||||
/// <typeparam name="TNotificationType"></typeparam>
|
||||
/// <typeparam name="TEntrance"></typeparam>
|
||||
public interface INotificationService<TNotificationType, TEntrance, TNotificationService>
|
||||
where TNotificationType : notnull, Enum
|
||||
where TEntrance : notnull, Enum
|
||||
where TNotificationService : INotificationService<TNotificationType, TEntrance, TNotificationService>
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取是否有通知权限
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
bool AreNotificationsEnabled();
|
||||
|
||||
/// <summary>
|
||||
/// 显示通知
|
||||
/// </summary>
|
||||
/// <param name="text">通知内容</param>
|
||||
/// <param name="notificationType">通知类型</param>
|
||||
/// <param name="autoCancel"></param>
|
||||
/// <param name="title">通知标题</param>
|
||||
/// <param name="entrance">点击通知的入口点</param>
|
||||
void Notify(
|
||||
string text,
|
||||
TNotificationType notificationType,
|
||||
bool autoCancel = true,
|
||||
string? title = default,
|
||||
TEntrance? entrance = default);
|
||||
|
||||
/// <summary>
|
||||
/// 取消通知
|
||||
/// </summary>
|
||||
/// <param name="notificationType"></param>
|
||||
void Cancel(TNotificationType notificationType);
|
||||
|
||||
/// <summary>
|
||||
/// 取消所有通知
|
||||
/// </summary>
|
||||
void CancelAll();
|
||||
|
||||
/// <summary>
|
||||
/// 下载进度通知
|
||||
/// </summary>
|
||||
Progress<float> NotifyDownload(
|
||||
Func<string> text,
|
||||
TNotificationType notificationType,
|
||||
string? title = default);
|
||||
}
|
||||
}
|
||||
@@ -29,7 +29,7 @@ namespace System.Application.Services
|
||||
if ((!string.IsNullOrWhiteSpace(value)) &&
|
||||
(string.IsNullOrWhiteSpace(textBoxText) ||
|
||||
(textBoxText.Length < value.Length &&
|
||||
value[..textBoxText.Length] == textBoxText)))
|
||||
value.Substring(0, textBoxText.Length) == textBoxText)))
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -9,16 +9,10 @@ namespace System.Application.Services.Implementation
|
||||
/// <inheritdoc cref="ILocalDataProtectionProvider"/>
|
||||
public abstract class LocalDataProtectionProviderBase : ILocalDataProtectionProvider
|
||||
{
|
||||
#pragma warning disable IDE1006 // 命名样式
|
||||
#pragma warning disable SA1309 // Field names should not begin with underscore
|
||||
readonly Lazy<Aes> _aes;
|
||||
|
||||
#pragma warning disable SA1300 // Element should begin with upper-case letter
|
||||
#pragma warning disable IDE1006 // 命名样式
|
||||
protected Aes aes => _aes.Value;
|
||||
#pragma warning restore SA1300 // Element should begin with upper-case letter
|
||||
#pragma warning restore SA1309 // Field names should not begin with underscore
|
||||
#pragma warning restore IDE1006 // 命名样式
|
||||
|
||||
protected readonly LocalDataProtectionType defaultELocalDataProtectionType;
|
||||
protected readonly IProtectedData protectedData;
|
||||
protected readonly IDataProtectionProvider dataProtectionProvider;
|
||||
|
||||
@@ -24,7 +24,6 @@ namespace System.Application.Services.Implementation
|
||||
if (sharedName == null) return GetId(key);
|
||||
return $"{key}_{sharedName}_S";
|
||||
}
|
||||
|
||||
public void PlatformClear(string? sharedName)
|
||||
{
|
||||
conn.Execute(Sql_Delete_Where_SharedName_Equals, sharedName ?? string.Empty);
|
||||
|
||||
@@ -47,8 +47,8 @@ namespace System.Application.Services.Implementation
|
||||
void Show_()
|
||||
{
|
||||
if (intercept.OnShowExecuting(text)) return;
|
||||
var duration_ = duration ?? CalcDurationByStringLength(text.Length);
|
||||
PlatformShow(text, duration_);
|
||||
var _duration = duration ?? CalcDurationByStringLength(text.Length);
|
||||
PlatformShow(text, _duration);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
@@ -7,7 +7,6 @@ namespace System.Application.UI.ViewModels
|
||||
protected virtual bool IgnoreIcon { get; }
|
||||
|
||||
protected TId? id;
|
||||
|
||||
/// <summary>
|
||||
/// 唯一键
|
||||
/// </summary>
|
||||
@@ -29,7 +28,6 @@ namespace System.Application.UI.ViewModels
|
||||
}
|
||||
|
||||
protected string title = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 标题文本
|
||||
/// </summary>
|
||||
@@ -40,7 +38,6 @@ namespace System.Application.UI.ViewModels
|
||||
}
|
||||
|
||||
protected TIcon? icon;
|
||||
|
||||
/// <summary>
|
||||
/// 图标
|
||||
/// </summary>
|
||||
|
||||
@@ -31,8 +31,4 @@
|
||||
<ProjectReference Include="..\Repositories.sqlite-net-pcl\Repositories.sqlite-net-pcl.csproj" />
|
||||
<ProjectReference Include="..\Common.CoreLib\Common.CoreLib.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -28,8 +28,10 @@ namespace System.Application.Models
|
||||
if (mDataSource == null) mDataSource = new List<T>();
|
||||
return mDataSource;
|
||||
}
|
||||
|
||||
set => mDataSource = value;
|
||||
set
|
||||
{
|
||||
mDataSource = value;
|
||||
}
|
||||
}
|
||||
|
||||
[MPKey(1)]
|
||||
|
||||
@@ -92,11 +92,6 @@ namespace System.Application
|
||||
/// Android 模拟器
|
||||
/// </summary>
|
||||
AndroidVirtual,
|
||||
|
||||
/// <summary>
|
||||
/// https://github.com/chromeos
|
||||
/// </summary>
|
||||
ChromeOS,
|
||||
}
|
||||
|
||||
public static string ToDisplayName(this Value value) => value == default ? string.Empty :
|
||||
@@ -124,8 +119,7 @@ namespace System.Application
|
||||
Value.AndroidDesktop or
|
||||
Value.AndroidTV or
|
||||
Value.AndroidWatch or
|
||||
Value.AndroidVirtual or
|
||||
Value.ChromeOS => true,
|
||||
Value.AndroidVirtual => true,
|
||||
_ => false,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -120,8 +120,7 @@ namespace System.Application
|
||||
/// <summary>
|
||||
/// 黑名单
|
||||
/// </summary>
|
||||
public static readonly byte[] Blacklist = new byte[]
|
||||
{
|
||||
public static readonly byte[] Blacklist = new byte[] {
|
||||
148, 149, 146, // 物联网号段
|
||||
};
|
||||
}
|
||||
|
||||
@@ -70,6 +70,7 @@ namespace System.Application.Services
|
||||
/// <param name="requestUri"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
[Obsolete("use cached")]
|
||||
Task<Stream?> GetImageStreamAsync(string requestUri, CancellationToken cancellationToken = default);
|
||||
|
||||
static string GetImagesCacheDirectory(string? channelType)
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace System.Application.Services.Implementation
|
||||
static readonly IDictionary<Type, object> validators = new Dictionary<Type, object>();
|
||||
|
||||
public static void AddColumnValidate<T>(Func<T, string?> validate)
|
||||
=> validators.TryAdd(typeof(T), validate);
|
||||
=> validators.Add(typeof(T), validate);
|
||||
|
||||
const string I = "I";
|
||||
const string IReadOnly = "IReadOnly";
|
||||
|
||||
@@ -68,7 +68,7 @@ namespace System.Application.Settings
|
||||
stream.Position = 0;
|
||||
}
|
||||
var data = Serializable.SMP(_settings);
|
||||
stream.Write(data);
|
||||
stream.Write(data, 0, data.Length);
|
||||
//XamlServices.Save(stream, this._settings);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,7 +41,6 @@ namespace System.Application.Settings
|
||||
|
||||
return _cached ? _value : Default;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
if (_cached && Equals(_value, value)) return;
|
||||
@@ -182,7 +181,6 @@ namespace System.Application.Settings
|
||||
if (value == null) return;
|
||||
ValueChanged += _handlers[value] = (sender, args) => value(sender, new PropertyChangedEventArgs(nameof(Value)));
|
||||
}
|
||||
|
||||
remove
|
||||
{
|
||||
if (value == null) return;
|
||||
|
||||
@@ -22,7 +22,6 @@ namespace System.Application.Settings
|
||||
protected static string GetLocalFilePath(string configName) => Path.Combine(IOPath.AppDataDirectory, configName);
|
||||
|
||||
static readonly Lazy<string> _LocalFilePath = new(() => GetLocalFilePath(ConfigName));
|
||||
|
||||
public static string LocalFilePath => _LocalFilePath.Value;
|
||||
|
||||
public static ISerializationProvider Local { get; } = new FileSettingsProvider(LocalFilePath);
|
||||
@@ -82,7 +81,6 @@ namespace System.Application.Settings
|
||||
}
|
||||
|
||||
static readonly Lazy<string> _CategoryName = new(() => typeof(TSettings).Name);
|
||||
|
||||
public static new string CategoryName => _CategoryName.Value;
|
||||
|
||||
static string GetKey(string propertyName) => $"{CategoryName}.{propertyName}";
|
||||
|
||||
@@ -3,7 +3,6 @@ namespace System.Application.Settings
|
||||
public sealed class ValueChangedEventArgs<T> : EventArgs where T : notnull
|
||||
{
|
||||
public T? OldValue { get; }
|
||||
|
||||
public T? NewValue { get; }
|
||||
|
||||
public ValueChangedEventArgs(T? oldValue, T? newValue)
|
||||
|
||||
@@ -54,8 +54,4 @@
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -10,8 +10,8 @@ namespace System
|
||||
{
|
||||
public static sbyte[] ToSByteArray(this byte[] buffer)
|
||||
{
|
||||
ReadOnlySpan<byte> buffer_ = buffer;
|
||||
return buffer_.ToSByteArray();
|
||||
ReadOnlySpan<byte> _buffer = buffer;
|
||||
return _buffer.ToSByteArray();
|
||||
}
|
||||
|
||||
public static sbyte[] ToSByteArray(this ReadOnlySpan<byte> buffer)
|
||||
@@ -19,8 +19,8 @@ namespace System
|
||||
|
||||
public static byte[] ToByteArray(this sbyte[] buffer)
|
||||
{
|
||||
ReadOnlySpan<sbyte> buffer_ = buffer;
|
||||
return buffer_.ToByteArray();
|
||||
ReadOnlySpan<sbyte> _buffer = buffer;
|
||||
return _buffer.ToByteArray();
|
||||
}
|
||||
|
||||
public static byte[] ToByteArray(this ReadOnlySpan<sbyte> buffer)
|
||||
|
||||
@@ -113,16 +113,5 @@ namespace System
|
||||
return new(stream, encoding, bufferSize, leaveOpen);
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] ToByteArray2(this Stream stream)
|
||||
{
|
||||
byte[] bytes = new byte[stream.Length];
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
stream.Read(bytes, 0, bytes.Length);
|
||||
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
return bytes;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -37,7 +37,7 @@ namespace System
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
if (isDian || (item >= '0' && item <= '9'))
|
||||
if (isDian || item >= '0' && item <= '9')
|
||||
{
|
||||
findChar = true;
|
||||
yield return item;
|
||||
@@ -52,14 +52,12 @@ namespace System
|
||||
}
|
||||
|
||||
#region TryParse
|
||||
|
||||
/// <summary>
|
||||
/// 尝试将数字的字符串表示形式转换为 双精度浮点型
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public static decimal? TryParseDecimal(this string value) => decimal.TryParse(value, out var temp) ? temp : null;
|
||||
|
||||
/// <summary>
|
||||
/// 尝试将数字的字符串表示形式转换为 双精度浮点型
|
||||
/// </summary>
|
||||
|
||||
@@ -106,6 +106,7 @@ namespace System
|
||||
Exception = exception;
|
||||
}
|
||||
|
||||
|
||||
public static readonly EventHandler<TaskLog> Occured = (sender, e) =>
|
||||
{
|
||||
const string format = @"Unhandled Exception occured from Task.Forget()
|
||||
|
||||
@@ -117,16 +117,6 @@ namespace System
|
||||
|
||||
public const string maFile = ".maFile";
|
||||
|
||||
public static readonly string[] ImageFileExtensions = new string[]
|
||||
{
|
||||
FileEx.BMP,
|
||||
FileEx.JPG,
|
||||
FileEx.JPEG,
|
||||
FileEx.PNG,
|
||||
FileEx.GIF,
|
||||
FileEx.WEBP,
|
||||
};
|
||||
|
||||
public static bool IsSupportedTextReader(string extension) =>
|
||||
string.Equals(extension, JSON, StringComparison.OrdinalIgnoreCase) ||
|
||||
string.Equals(extension, TXT, StringComparison.OrdinalIgnoreCase) ||
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace System
|
||||
/// </summary>
|
||||
public static partial class VideoFormatEnumExtensions
|
||||
{
|
||||
static readonly Lazy<IReadOnlyDictionary<VideoFormat, string>> mEnumMime = new(() =>
|
||||
static readonly Lazy<IReadOnlyDictionary<VideoFormat, string>> _enum_mime = new(() =>
|
||||
{
|
||||
var value = new Dictionary<VideoFormat, string>()
|
||||
{
|
||||
@@ -28,33 +28,31 @@ namespace System
|
||||
};
|
||||
return value;
|
||||
});
|
||||
|
||||
static readonly Lazy<IReadOnlyDictionary<string, VideoFormat>> mMimeEnum = new(() =>
|
||||
static readonly Lazy<IReadOnlyDictionary<string, VideoFormat>> _mime_enum = new(() =>
|
||||
{
|
||||
var value = EnumMime.ToDictionary(x => x.Value, x => x.Key, StringComparer.OrdinalIgnoreCase);
|
||||
var value = enum_mime.ToDictionary(x => x.Value, x => x.Key, StringComparer.OrdinalIgnoreCase);
|
||||
return value;
|
||||
});
|
||||
|
||||
static IReadOnlyDictionary<VideoFormat, string> EnumMime => mEnumMime.Value;
|
||||
|
||||
static IReadOnlyDictionary<string, VideoFormat> MimeEnum => mMimeEnum.Value;
|
||||
static IReadOnlyDictionary<VideoFormat, string> enum_mime => _enum_mime.Value;
|
||||
static IReadOnlyDictionary<string, VideoFormat> mime_enum => _mime_enum.Value;
|
||||
|
||||
/// <summary>
|
||||
/// 获取MIME
|
||||
/// </summary>
|
||||
/// <param name="videoFormat"></param>
|
||||
/// <param name="imageFormat"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="ArgumentOutOfRangeException"></exception>
|
||||
public static string GetMIME(this VideoFormat videoFormat)
|
||||
{
|
||||
if (EnumMime.ContainsKey(videoFormat)) return EnumMime[videoFormat];
|
||||
if (enum_mime.ContainsKey(videoFormat)) return enum_mime[videoFormat];
|
||||
throw new ArgumentOutOfRangeException(nameof(videoFormat), videoFormat, null);
|
||||
}
|
||||
|
||||
public static VideoFormat? GetFormat(string? mime)
|
||||
{
|
||||
if (mime == null) return null;
|
||||
if (MimeEnum.ContainsKey(mime)) return MimeEnum[mime];
|
||||
if (mime_enum.ContainsKey(mime)) return mime_enum[mime];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
#if !NET35 && !NOT_XE
|
||||
using System.Threading.Tasks;
|
||||
@@ -41,16 +40,14 @@ namespace System
|
||||
/// </summary>
|
||||
/// <param name="dirPath"></param>
|
||||
/// <param name="noRecursive"></param>
|
||||
public static bool DirTryDelete(string dirPath, bool noRecursive = false)
|
||||
public static void DirTryDelete(string dirPath, bool noRecursive = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
Directory.Delete(dirPath, !noRecursive);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,16 +99,14 @@ namespace System
|
||||
/// <para>通常用于删除缓存</para>
|
||||
/// </summary>
|
||||
/// <param name="filePath"></param>
|
||||
public static bool FileTryDelete(string filePath)
|
||||
public static void FileTryDelete(string filePath)
|
||||
{
|
||||
try
|
||||
{
|
||||
File.Delete(filePath);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,7 +158,7 @@ namespace System
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化文件系统
|
||||
/// (可选)初始化文件系统
|
||||
/// </summary>
|
||||
/// <param name="getAppDataDirectory">获取应用目录文件夹</param>
|
||||
/// <param name="getCacheDirectory">获取缓存目录文件夹</param>
|
||||
@@ -173,119 +168,31 @@ namespace System
|
||||
IOPath.getCacheDirectory = getCacheDirectory;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 带迁移的初始化文件系统,使用 <see cref="Directory.Move(string, string)"/> 或 xcopy 进行移动,如果迁移失败则回退源目录
|
||||
/// </summary>
|
||||
/// <param name="destAppDataPath">新的 AppData 文件夹路径</param>
|
||||
/// <param name="destCachePath">新的 Cache 文件夹路径</param>
|
||||
/// <param name="sourceAppDataPath">旧的 AppData 文件夹路径</param>
|
||||
/// <param name="sourceCachePath">旧的 Cache 文件夹路径</param>
|
||||
protected static void InitFileSystemWithMigrations(
|
||||
string destAppDataPath, string destCachePath,
|
||||
string sourceAppDataPath, string sourceCachePath)
|
||||
{
|
||||
bool ExistsNotEmptyDir(string path)
|
||||
{
|
||||
var exists = Directory.Exists(path);
|
||||
if (DesktopBridge.IsRunningAsUwp)
|
||||
{
|
||||
if (path == destCachePath || path == sourceCachePath)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return exists && Directory.EnumerateFileSystemEntries(path).Any(); // 文件夹存在且不为空文件夹
|
||||
}
|
||||
|
||||
var paths = new[] { destAppDataPath, destCachePath, };
|
||||
var dict_paths = paths.ToDictionary(x => x, x => ExistsNotEmptyDir(x));
|
||||
var dict_paths = paths.ToDictionary(x => x, x => Directory.Exists(x) && Directory.EnumerateFileSystemEntries(x).Any());
|
||||
|
||||
if (dict_paths.Values.All(x => !x))
|
||||
{
|
||||
var old_paths = new[] { sourceAppDataPath, sourceCachePath, };
|
||||
if (old_paths.All(x => Directory.Exists(x) && Directory.EnumerateFileSystemEntries(x).Any())) // 迁移之前根目录上的文件夹
|
||||
{
|
||||
var isNotFirst = false;
|
||||
for (int i = 0; i < old_paths.Length; i++)
|
||||
{
|
||||
var path = paths[i];
|
||||
var old_path = old_paths[i];
|
||||
try
|
||||
{
|
||||
if (!isNotFirst)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 尝试搜索之前版本的进程将其结束
|
||||
var currentProcess = Process.GetCurrentProcess();
|
||||
var query = from x in Process.GetProcessesByName(currentProcess.ProcessName)
|
||||
where x != currentProcess
|
||||
let m = x.TryGetMainModule()
|
||||
where m != null && m.FileName != currentProcess.TryGetMainModule()?.FileName
|
||||
select x;
|
||||
var process = query.ToArray();
|
||||
foreach (var proces in process)
|
||||
{
|
||||
try
|
||||
{
|
||||
#if NETCOREAPP3_0_OR_GREATER
|
||||
proces.Kill(true);
|
||||
#else
|
||||
proces.Kill();
|
||||
#endif
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
isNotFirst = true;
|
||||
}
|
||||
try
|
||||
{
|
||||
Directory.Move(old_path, path);
|
||||
}
|
||||
catch
|
||||
{
|
||||
try
|
||||
{
|
||||
CopyDirectory(old_path, path);
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (OperatingSystem2.IsWindows)
|
||||
{
|
||||
var psi = new ProcessStartInfo
|
||||
{
|
||||
FileName = "cmd.exe",
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true,
|
||||
RedirectStandardInput = true,
|
||||
};
|
||||
var p = Process.Start(psi);
|
||||
p.Start();
|
||||
p.StandardInput.WriteLine($"xcopy \"{old_path}\" \"{path}\" /y &exit");
|
||||
p.WaitForExit(10000);
|
||||
p.Kill();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
Directory.Move(old_path, path);
|
||||
dict_paths[path] = true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (!DesktopBridge.IsRunningAsUwp)
|
||||
{
|
||||
// 跨卷移动失败或其他原因失败,使用旧的目录,并尝试删除创建的空文件夹
|
||||
DirTryDelete(path);
|
||||
}
|
||||
// 跨卷移动失败或其他原因失败,使用旧的目录,并尝试删除创建的空文件夹
|
||||
DirTryDelete(path);
|
||||
paths[i] = old_path;
|
||||
}
|
||||
}
|
||||
@@ -304,34 +211,6 @@ namespace System
|
||||
string GetAppDataDirectory() => paths[0];
|
||||
string GetCacheDirectory() => paths[1];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化文件系统,但优先使用旧目录上的文件夹,如果存在的话(允许空文件夹),不会进行文件迁移
|
||||
/// </summary>
|
||||
/// <param name="destAppDataPath">新的 AppData 文件夹路径</param>
|
||||
/// <param name="destCachePath">新的 Cache 文件夹路径</param>
|
||||
/// <param name="sourceAppDataPath">旧的 AppData 文件夹路径</param>
|
||||
/// <param name="sourceCachePath">旧的 Cache 文件夹路径</param>
|
||||
protected static void InitFileSystemUseDestFirst(
|
||||
string destAppDataPath, string destCachePath,
|
||||
string sourceAppDataPath, string sourceCachePath)
|
||||
{
|
||||
var paths = new[] { destAppDataPath, destCachePath, };
|
||||
var old_paths = new[] { sourceAppDataPath, sourceCachePath, };
|
||||
|
||||
for (int i = 0; i < old_paths.Length; i++)
|
||||
{
|
||||
var item = old_paths[i];
|
||||
if (Directory.Exists(item))
|
||||
{
|
||||
paths[i] = item;
|
||||
}
|
||||
}
|
||||
|
||||
InitFileSystem(GetAppDataDirectory, GetCacheDirectory);
|
||||
string GetAppDataDirectory() => paths[0];
|
||||
string GetCacheDirectory() => paths[1];
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -581,38 +460,5 @@ namespace System
|
||||
|
||||
public const char UnixDirectorySeparatorChar = '/';
|
||||
public const char WinDirectorySeparatorChar = '\\';
|
||||
|
||||
public static void CopyDirectory(string sourceDir, string destinationDir, bool recursive = true)
|
||||
{
|
||||
// Get information about the source directory
|
||||
var dir = new DirectoryInfo(sourceDir);
|
||||
|
||||
// Check if the source directory exists
|
||||
if (!dir.Exists)
|
||||
throw new DirectoryNotFoundException($"Source directory not found: {dir.FullName}");
|
||||
|
||||
// Cache directories before we start copying
|
||||
DirectoryInfo[] dirs = dir.GetDirectories();
|
||||
|
||||
// Create the destination directory
|
||||
Directory.CreateDirectory(destinationDir);
|
||||
|
||||
// Get the files in the source directory and copy to the destination directory
|
||||
foreach (FileInfo file in dir.GetFiles())
|
||||
{
|
||||
string targetFilePath = Path.Combine(destinationDir, file.Name);
|
||||
file.CopyTo(targetFilePath);
|
||||
}
|
||||
|
||||
// If recursive and copying subdirectories, recursively call this method
|
||||
if (recursive)
|
||||
{
|
||||
foreach (DirectoryInfo subDir in dirs)
|
||||
{
|
||||
string newDestinationDir = Path.Combine(destinationDir, subDir.Name);
|
||||
CopyDirectory(subDir.FullName, newDestinationDir, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,7 +25,6 @@ namespace System.Net.Http
|
||||
#endif
|
||||
return UseWebProxy(proxy) ? proxy : null;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
#if NETSTANDARD
|
||||
@@ -63,13 +62,9 @@ namespace System.Net.Http
|
||||
sealed class HttpNoProxy : IWebProxy
|
||||
{
|
||||
public static readonly HttpNoProxy Instance = new();
|
||||
|
||||
private HttpNoProxy() { }
|
||||
|
||||
public ICredentials? Credentials { get; set; }
|
||||
|
||||
public Uri? GetProxy(Uri destination) => null;
|
||||
|
||||
public bool IsBypassed(Uri host) => true;
|
||||
}
|
||||
|
||||
@@ -80,13 +75,14 @@ namespace System.Net.Http
|
||||
{
|
||||
try
|
||||
{
|
||||
#if NETCOREAPP2_1_OR_GREATER
|
||||
if (handler is SocketsHttpHandler s)
|
||||
{
|
||||
s.Proxy = proxy;
|
||||
if (useProxy && s.UseProxy != useProxy) s.UseProxy = useProxy; // 仅启用代理时修改开关
|
||||
return;
|
||||
}
|
||||
|
||||
#if !NETSTANDARD
|
||||
if (handler is SocketsHttpHandler s)
|
||||
{
|
||||
s.Proxy = proxy;
|
||||
if (useProxy && s.UseProxy != useProxy) s.UseProxy = useProxy; // 仅启用代理时修改开关
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (handler is HttpClientHandler h)
|
||||
{
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
@@ -133,16 +134,12 @@ namespace System.Net.Sockets
|
||||
tcpTableRecords.Add(new TcpProcessRecord(
|
||||
new IPAddress(tcpRow.localAddr),
|
||||
new IPAddress(tcpRow.remoteAddr),
|
||||
BitConverter.ToUInt16(new byte[2]
|
||||
{
|
||||
BitConverter.ToUInt16(new byte[2] {
|
||||
tcpRow.localPort[1],
|
||||
tcpRow.localPort[0]
|
||||
}, 0),
|
||||
BitConverter.ToUInt16(new byte[2]
|
||||
{
|
||||
tcpRow.localPort[0] }, 0),
|
||||
BitConverter.ToUInt16(new byte[2] {
|
||||
tcpRow.remotePort[1],
|
||||
tcpRow.remotePort[0]
|
||||
}, 0),
|
||||
tcpRow.remotePort[0] }, 0),
|
||||
tcpRow.owningPid, tcpRow.state));
|
||||
tableRowPtr = (IntPtr)((long)tableRowPtr + Marshal.SizeOf(tcpRow));
|
||||
}
|
||||
@@ -238,7 +235,6 @@ namespace System.Net.Sockets
|
||||
public MibTcpState State { get; set; }
|
||||
|
||||
int _ProcessId;
|
||||
|
||||
[DisplayName("Process ID")]
|
||||
public int ProcessId
|
||||
{
|
||||
@@ -262,7 +258,6 @@ namespace System.Net.Sockets
|
||||
}
|
||||
|
||||
Lazy<Process?>? _Process;
|
||||
|
||||
[DisplayName("Process")]
|
||||
public Process? Process => _Process?.Value;
|
||||
|
||||
|
||||
@@ -6,5 +6,4 @@ using static System.Properties.ThisAssembly;
|
||||
[assembly: InternalsVisibleTo("System.Common.UnitTest.Droid" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.UnitTest" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Desktop.UnitTest" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Droid.UnitTest" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Droid.UnitTest.App" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Droid.UnitTest" + PublicKey)]
|
||||
@@ -118,7 +118,7 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Age_" xml:space="preserve">
|
||||
<value>{0}세</value>
|
||||
<value>{0}</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_L0" xml:space="preserve">
|
||||
@@ -178,27 +178,27 @@
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="Female" xml:space="preserve">
|
||||
<value>여자</value>
|
||||
<value>여성</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="He" xml:space="preserve">
|
||||
<value>그</value>
|
||||
<value>그는</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="Male" xml:space="preserve">
|
||||
<value>남자</value>
|
||||
<value>남성</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="NotSupported_FixedSizeCollection" xml:space="preserve">
|
||||
<value>컬렉션은 고정 된 크기였습니다.</value>
|
||||
<value>Collection was of a fixed size.</value>
|
||||
<comment>Comment=https://github.com/dotnet/runtime/blob/v5.0.0-rc.1.20451.14/src/libraries/System.Private.CoreLib/src/Resources/Strings.resx#L2893;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="She" xml:space="preserve">
|
||||
<value>그녀</value>
|
||||
<value>그녀는</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="Unknown" xml:space="preserve">
|
||||
<value>알려지지 않은</value>
|
||||
<value>알 수 없습니다</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="UnsupportedPhoneNumberSegment_" xml:space="preserve">
|
||||
@@ -206,7 +206,7 @@
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="OpenCoreByProcess_Win32Exception_" xml:space="preserve">
|
||||
<value>웹 링크 열기 실패 0x{0}, 시도하기 전에 시스템 기본 브라우저를 설정하십시오.</value>
|
||||
<value>웹 링크를 열지 못한 경우 0x{0} 시스템 기본 브라우저를 설정한 다음 다시 시도하십시오</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -118,95 +118,95 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Age_" xml:space="preserve">
|
||||
<value>Возраст: {0}</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<value>{0} лет</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_L0" xml:space="preserve">
|
||||
<value>Воскресенье</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_L1" xml:space="preserve">
|
||||
<value>Понедельник</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_L2" xml:space="preserve">
|
||||
<value>Вторник</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_L3" xml:space="preserve">
|
||||
<value>Среда</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_L4" xml:space="preserve">
|
||||
<value>Четверг</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_L5" xml:space="preserve">
|
||||
<value>Пятница</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_L6" xml:space="preserve">
|
||||
<value>Суббота</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_S0" xml:space="preserve">
|
||||
<value>Воскресенье</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_S1" xml:space="preserve">
|
||||
<value>Понедельник</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_S2" xml:space="preserve">
|
||||
<value>Вторник</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_S3" xml:space="preserve">
|
||||
<value>Среда</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_S4" xml:space="preserve">
|
||||
<value>Четверг</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_S5" xml:space="preserve">
|
||||
<value>Пятница</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="DayOfWeek_S6" xml:space="preserve">
|
||||
<value>Суббота</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="Female" xml:space="preserve">
|
||||
<value>Женщина</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<value>женщина</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="He" xml:space="preserve">
|
||||
<value>Он</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<value>он</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="Male" xml:space="preserve">
|
||||
<value>Мужчина</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<value>мужчина</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="NotSupported_FixedSizeCollection" xml:space="preserve">
|
||||
<value>Коллекция имела фиксированный размер.</value>
|
||||
<comment>Comment=https://github.com/dotnet/runtime/blob/v5.0.0-rc.1.20451.14/src/libraries/System.Private.CoreLib/src/Resources/Strings.resx#L2893;Author=vanja-san</comment>
|
||||
<value>Коллекция была фиксированного размера.</value>
|
||||
<comment>Comment=https://github.com/dotnet/runtime/blob/v5.0.0-rc.1.20451.14/src/libraries/System.Private.CoreLib/src/Resources/Strings.resx#L2893;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="She" xml:space="preserve">
|
||||
<value>Она</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<value>она</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="Unknown" xml:space="preserve">
|
||||
<value>Неизвестно</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<value>Неизвестный</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="UnsupportedPhoneNumberSegment_" xml:space="preserve">
|
||||
<value>Неподдерживаемые номера телефонов ({0})</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<value>Сегмент неподдерживаемых номеров мобильных телефонов ({0})</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="OpenCoreByProcess_Win32Exception_" xml:space="preserve">
|
||||
<value>Невозможно открыть ссылку 0x{0}, повторите снова, после установки браузер по умолчанию.</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
<value>Открыть веб-ссылку не удалось 0x{0}, пожалуйста, установите системный браузер по умолчанию перед попыткой</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
namespace System.Properties
|
||||
{
|
||||
partial class ThisAssembly
|
||||
{
|
||||
public static string DisplayTrademark => /*DesktopBridge.IsRunningAsUwp ? $"蒸汽++" :*/ AssemblyTrademark;
|
||||
}
|
||||
}
|
||||
@@ -26,11 +26,9 @@ namespace System.Properties
|
||||
|
||||
#if NETSTANDARD2_1 || NETCOREAPP2_1_OR_GREATER
|
||||
static readonly Lazy<bool> mIsBetaRelease = new(() => DynamicVersion.Contains(beta, StringComparison.Ordinal));
|
||||
|
||||
public static bool IsBetaRelease => mIsBetaRelease.Value;
|
||||
|
||||
static readonly Lazy<bool> mIsAlphaRelease = new(() => DynamicVersion.Contains(alpha, StringComparison.Ordinal));
|
||||
|
||||
public static bool IsAlphaRelease => mIsAlphaRelease.Value;
|
||||
|
||||
static readonly Lazy<string> mVersionDisplay = new(() =>
|
||||
@@ -38,7 +36,6 @@ namespace System.Properties
|
||||
Version version = new(Version);
|
||||
return $"{version.ToString(3)}{(IsAlphaRelease ? " α" : (IsBetaRelease ? " β" : ""))}{(version.Revision <= 0 ? "" : " rev." + version.Revision)}";
|
||||
});
|
||||
|
||||
public static string VersionDisplay => mVersionDisplay.Value;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace System.Properties
|
||||
/// <item> macOS:\packaging\build-osx-app.sh <CFBundleVersion> <CFBundleShortVersionString> </item>
|
||||
/// </list>
|
||||
/// </summary>
|
||||
public const string Version = "2.7.0";
|
||||
public const string Version = "2.6.9";
|
||||
|
||||
//public const string InfoVersion = Version + "-beta";
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace System.Properties
|
||||
/// <summary>
|
||||
/// 提供程序集的文本说明
|
||||
/// </summary>
|
||||
public const string AssemblyDescription = "「Steam++ 工具箱」是一个开源跨平台的多功能游戏工具箱。";
|
||||
public const string AssemblyDescription = "「Steam++」是一个包含多种Steam工具功能的工具箱。";
|
||||
|
||||
/// <summary>
|
||||
/// 定义程序集清单的版权自定义属性
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// https://github.com/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/IsExternalInit.cs
|
||||
// https://stackoverflow.com/questions/64749385/predefined-type-system-runtime-compilerservices-isexternalinit-is-not-defined
|
||||
// https://stackoverflow.com/questions/62648189/testing-c-sharp-9-0-in-vs2019-cs0518-isexternalinit-is-not-defined-or-imported
|
||||
// https://github.com/dotnet/roslyn/issues/45510
|
||||
// https://docs.microsoft.com/zh-cn/dotnet/api/system.runtime.compilerservices.isexternalinit?view=net-6.0
|
||||
#if NETSTANDARD2_1
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace System.Runtime.CompilerServices
|
||||
{
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public class IsExternalInit
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -560,9 +560,9 @@ namespace System.Security.Cryptography
|
||||
{
|
||||
var uint16 = BitConverter.ToUInt16(data, 0);
|
||||
var flags = (Flags)uint16;
|
||||
var mIVByteArray = data.Skip(2).Take(16).ToArray();
|
||||
var mKeyByteArray = data.Skip(18).Reverse().ToArray();
|
||||
return new Parameters(mKeyByteArray, mIVByteArray, flags);
|
||||
var IVByteArray = data.Skip(2).Take(16).ToArray();
|
||||
var KeyByteArray = data.Skip(18).Reverse().ToArray();
|
||||
return new Parameters(KeyByteArray, IVByteArray, flags);
|
||||
}
|
||||
|
||||
public static Parameters Create(string data)
|
||||
|
||||
@@ -126,9 +126,8 @@ namespace System
|
||||
var formatting = writeIndented ? Formatting.Indented : Formatting.None;
|
||||
var settings = ignoreNullValues ? new JsonSerializerSettings
|
||||
{
|
||||
NullValueHandling = NullValueHandling.Ignore,
|
||||
}
|
||||
: null;
|
||||
NullValueHandling = NullValueHandling.Ignore
|
||||
} : null;
|
||||
return SerializeObject(value, inputType, formatting, settings);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -350,8 +350,8 @@ namespace System
|
||||
/// </summary>
|
||||
public static bool operator ==(ShortGuid x, ShortGuid y)
|
||||
{
|
||||
//if (ReferenceEquals(x, null))
|
||||
// return ReferenceEquals(y, null);
|
||||
if (ReferenceEquals(x, null))
|
||||
return ReferenceEquals(y, null);
|
||||
|
||||
return x.underlyingGuid == y.underlyingGuid;
|
||||
}
|
||||
@@ -361,8 +361,8 @@ namespace System
|
||||
/// </summary>
|
||||
public static bool operator ==(ShortGuid x, Guid y)
|
||||
{
|
||||
//if (ReferenceEquals(x, null))
|
||||
// return ReferenceEquals(y, null);
|
||||
if (ReferenceEquals(x, null))
|
||||
return ReferenceEquals(y, null);
|
||||
|
||||
return x.underlyingGuid == y;
|
||||
}
|
||||
|
||||
@@ -22,8 +22,4 @@
|
||||
<ProjectReference Include="..\Common.PinyinLib\Common.PinyinLib.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -43,6 +43,7 @@ namespace System.Application.Services.Implementation
|
||||
return Array.Empty<string>();
|
||||
}
|
||||
|
||||
|
||||
bool IPinyin.IsChinese(char c) => TransformMandarinLatin(c.ToString(), out var _);
|
||||
}
|
||||
}
|
||||
@@ -25,8 +25,4 @@
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
<Project Sdk="MSBuild.Sdk.Extras">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>MonoAndroid12.0;netstandard2.1;net6.0-android</TargetFrameworks>
|
||||
<TargetFrameworks>MonoAndroid12.0;netstandard2.1</TargetFrameworks>
|
||||
<RootNamespace>System</RootNamespace>
|
||||
<AssemblyName>System.Common.PinyinLib.TinyPinyin</AssemblyName>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" $(TargetFramework.StartsWith('MonoAndroid')) Or $(TargetFramework.Contains('-android')) ">
|
||||
<PropertyGroup Condition=" $(TargetFramework.StartsWith('MonoAndroid')) ">
|
||||
<AndroidUseIntermediateDesignerFile>false</AndroidUseIntermediateDesignerFile>
|
||||
<!--<IsBindingProject>true</IsBindingProject>-->
|
||||
<DefineConstants>ANDROID;$(DefineConstants)</DefineConstants>
|
||||
<IsBindingProject>true</IsBindingProject>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -28,32 +27,22 @@
|
||||
<ProjectReference Include="..\Common.PinyinLib\Common.PinyinLib.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('MonoAndroid')) Or $(TargetFramework.Contains('-android')) ">
|
||||
<!--<EmbeddedJar Include="Jars\ahocorasick-0.3.0.jar" />
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('MonoAndroid')) ">
|
||||
<EmbeddedJar Include="Jars\ahocorasick-0.3.0.jar" />
|
||||
<EmbeddedJar Include="Jars\tinypinyin-2.0.3.jar" />
|
||||
<EmbeddedJar Include="Jars\tinypinyin-android-asset-lexicons-2.0.3.jar" />
|
||||
<LibraryProjectZip Include="Jars\tinypinyin-lexicons-android-cncity-2.0.3.aar" />
|
||||
<TransformFile Include="Transforms\Metadata.xml" />-->
|
||||
<PackageReference Include="XAB.TinyPinyin" />
|
||||
<TransformFile Include="Transforms\Metadata.xml" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" !($(TargetFramework.StartsWith('MonoAndroid')) Or $(TargetFramework.Contains('-android'))) ">
|
||||
<!--<Compile Remove="Jars\**" />
|
||||
<ItemGroup Condition=" !$(TargetFramework.StartsWith('MonoAndroid')) ">
|
||||
<Compile Remove="Jars\**" />
|
||||
<EmbeddedResource Remove="Jars\**" />
|
||||
<None Remove="Jars\**" />
|
||||
<Compile Remove="Transforms\**" />
|
||||
<EmbeddedResource Remove="Transforms\**" />
|
||||
<None Remove="Transforms\**" />-->
|
||||
<None Remove="Transforms\**" />
|
||||
<PackageReference Include="TinyPinyin.Net" />
|
||||
</ItemGroup>
|
||||
|
||||
<!--<ItemGroup Condition=" $(TargetFramework.StartsWith('MonoAndroid')) ">
|
||||
<Compile Remove="obj\Debug\net6.0-android\**" />
|
||||
<Compile Remove="obj\Release\net6.0-android\**" />
|
||||
</ItemGroup>-->
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
#if MONOANDROID
|
||||
using Org.Ahocorasick.Trie;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using static TinyPinyin.ReflectUtils;
|
||||
|
||||
namespace TinyPinyin
|
||||
{
|
||||
/// <summary>
|
||||
/// 字符串转拼音引擎,支持字典和 <see cref="ISegmentationSelector"/>
|
||||
/// </summary>
|
||||
partial class Engine
|
||||
{
|
||||
static readonly Lazy<Java.Util.IComparator> _EMIT_COMPARATOR = new(() => GetStaticField<Java.Util.IComparator>(nameof(EMIT_COMPARATOR))() ?? throw new ArgumentNullException(nameof(EMIT_COMPARATOR)));
|
||||
public static Java.Util.IComparator EMIT_COMPARATOR => _EMIT_COMPARATOR.Value;
|
||||
|
||||
public static string[]? PinyinFromDict(string wordInDict, IList<IPinyinDict> pinyinDictSet)
|
||||
{
|
||||
if (pinyinDictSet != null)
|
||||
{
|
||||
foreach (var dict in pinyinDictSet)
|
||||
{
|
||||
var words = dict?.Words();
|
||||
if (words != null && words.Contains(wordInDict))
|
||||
{
|
||||
return dict!.ToPinyin(wordInDict);
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new Java.Lang.IllegalArgumentException($"No pinyin dict contains word: {wordInDict}");
|
||||
}
|
||||
|
||||
public static IEnumerable<string> GetPinyinArray(string s, Trie trie, IList<IPinyinDict> pinyinDictList, ISegmentationSelector selector)
|
||||
{
|
||||
// https://github.com/promeG/TinyPinyin/blob/v2.0.3/lib/src/main/java/com/github/promeg/pinyinhelper/Engine.java#L44
|
||||
|
||||
var selectedEmits = selector.Select(trie.ParseText(s))!;
|
||||
|
||||
Java.Util.Collections.Sort((IList)selectedEmits!, EMIT_COMPARATOR);
|
||||
|
||||
int nextHitIndex = 0;
|
||||
|
||||
for (int i = 0; i < s.Length;)
|
||||
{
|
||||
// 首先确认是否有以第i个字符作为begin的hit
|
||||
if (nextHitIndex < selectedEmits.Count && i == selectedEmits[nextHitIndex].Start)
|
||||
{
|
||||
// 有以第i个字符作为begin的hit
|
||||
var fromDicts = PinyinFromDict(selectedEmits[nextHitIndex].Keyword!, pinyinDictList!)!;
|
||||
for (int j = 0; j < fromDicts.Length; j++)
|
||||
{
|
||||
yield return fromDicts[j].ToUpper();
|
||||
}
|
||||
|
||||
i += selectedEmits[nextHitIndex].Size();
|
||||
nextHitIndex++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 将第i个字符转为拼音
|
||||
yield return PinyinHelper.GetPinyin(s[i]) ?? string.Empty;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
#if MONOANDROID
|
||||
|
||||
namespace TinyPinyin
|
||||
{
|
||||
/// <summary>
|
||||
/// 分词选择算法应实现的接口
|
||||
/// </summary>
|
||||
partial interface ISegmentationSelector
|
||||
{
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
# [TinyPinyin](https://github.com/promeG/TinyPinyin)
|
||||
[  ](https://bintray.com/promeg/maven/tinypinyin/_latestVersion)
|
||||
|
||||
适用于Java和Android的快速、低内存占用的汉字转拼音库。
|
||||
|
||||
## 依赖项
|
||||
❌ android.support.*
|
||||
|
||||
## 升级注意事项
|
||||
|
||||
无
|
||||
@@ -0,0 +1,22 @@
|
||||
#if MONOANDROID
|
||||
using Android.Runtime;
|
||||
|
||||
namespace Org.Ahocorasick.Interval
|
||||
{
|
||||
partial class IntervalableComparatorByPosition
|
||||
{
|
||||
int Java.Util.IComparator.Compare(Java.Lang.Object? o1, Java.Lang.Object? o2)
|
||||
{
|
||||
return Compare(o1.JavaCast<IIntervalable>(), o2.JavaCast<IIntervalable>());
|
||||
}
|
||||
}
|
||||
|
||||
partial class IntervalableComparatorBySize
|
||||
{
|
||||
int Java.Util.IComparator.Compare(Java.Lang.Object? o1, Java.Lang.Object? o2)
|
||||
{
|
||||
return Compare(o1.JavaCast<IIntervalable>(), o2.JavaCast<IIntervalable>());
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,71 @@
|
||||
#if MONOANDROID
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Android.Content;
|
||||
using Org.Ahocorasick.Trie;
|
||||
using static TinyPinyin.ReflectUtils;
|
||||
|
||||
namespace TinyPinyin
|
||||
{
|
||||
partial class PinyinHelper
|
||||
{
|
||||
static readonly Lazy<Func<Trie?>> mTrieDict = new(() => GetStaticField<Trie>(nameof(mTrieDict)));
|
||||
public static Trie? TrieDict => mTrieDict.Value();
|
||||
|
||||
static readonly Lazy<Func<ISegmentationSelector?>> mSelector = new(() => GetStaticField<ISegmentationSelector>(nameof(mSelector)));
|
||||
public static ISegmentationSelector? Selector => mSelector.Value();
|
||||
|
||||
static readonly Lazy<Func<IList<IPinyinDict>?>> mPinyinDicts = new(() => GetStaticField<IList<IPinyinDict>>(nameof(mPinyinDicts)));
|
||||
public static IList<IPinyinDict>? PinyinDicts => mPinyinDicts.Value();
|
||||
|
||||
/// <summary>
|
||||
/// 使用 <see cref="CnCityDict"/> 初始化拼音库
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
public static void InitWithCnCityDict(Context context)
|
||||
{
|
||||
var dict = CnCityDict.GetInstance(context);
|
||||
var config = NewConfig()!.With(dict);
|
||||
Init(config);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化拼音库
|
||||
/// </summary>
|
||||
public static void Init()
|
||||
{
|
||||
var config = NewConfig();
|
||||
Init(config);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化拼音库
|
||||
/// </summary>
|
||||
/// <param name="action"></param>
|
||||
public static void Init(Action<Config> action)
|
||||
{
|
||||
var config = NewConfig()!;
|
||||
action(config);
|
||||
Init(config);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 使用词典初始化拼音库
|
||||
/// </summary>
|
||||
/// <param name="dicts"></param>
|
||||
public static void InitWithDicts(params IPinyinDict[] dicts)
|
||||
{
|
||||
var config = NewConfig()!;
|
||||
if (dicts.Any())
|
||||
{
|
||||
foreach (var dict in dicts)
|
||||
{
|
||||
config.With(dict);
|
||||
}
|
||||
}
|
||||
Init(config);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -1,9 +1,5 @@
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using TinyPinyin;
|
||||
#if MONOANDROID || ANDROID
|
||||
using Org.AhoCorasick.Trie;
|
||||
#endif
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace System.Application.Services.Implementation
|
||||
@@ -11,13 +7,10 @@ namespace System.Application.Services.Implementation
|
||||
/// <summary>
|
||||
/// 使用 <see cref="PinyinHelper"/>(https://github.com/promeG/TinyPinyin) or (https://github.com/hueifeng/TinyPinyin.Net) 实现的拼音功能
|
||||
/// </summary>
|
||||
internal sealed partial class PinyinImpl : IPinyin
|
||||
internal sealed class PinyinImpl : IPinyin
|
||||
{
|
||||
static string GetPinyin(string str, string separator)
|
||||
{
|
||||
string? value = PinyinHelper.GetPinyin(str, separator);
|
||||
return value ?? string.Empty;
|
||||
}
|
||||
=> PinyinHelper.GetPinyin(str, separator) ?? string.Empty;
|
||||
|
||||
string IPinyin.GetPinyin(string s, PinyinFormat format) => format switch
|
||||
{
|
||||
@@ -26,117 +19,22 @@ namespace System.Application.Services.Implementation
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(format), format, null),
|
||||
};
|
||||
|
||||
bool IPinyin.IsChinese(char c)
|
||||
{
|
||||
return PinyinHelper.IsChinese(c);
|
||||
}
|
||||
|
||||
static string? GetPinyin(char c)
|
||||
{
|
||||
return PinyinHelper.GetPinyin(c);
|
||||
}
|
||||
|
||||
#if MONOANDROID || ANDROID
|
||||
static IEnumerable<string> GetPinyinArray(string s, Trie trie, IList<IPinyinDict> pinyinDictList, ISegmentationSelector selector)
|
||||
{
|
||||
// https://github.com/promeG/TinyPinyin/blob/v2.0.3/lib/src/main/java/com/github/promeg/pinyinhelper/Engine.java#L44
|
||||
|
||||
var selectedEmits = Engine.Select(s, trie, selector)!;
|
||||
|
||||
int nextHitIndex = 0;
|
||||
|
||||
for (int i = 0; i < s.Length;)
|
||||
{
|
||||
// 首先确认是否有以第i个字符作为begin的hit
|
||||
if (nextHitIndex < selectedEmits.Count && i == selectedEmits[nextHitIndex].Start)
|
||||
{
|
||||
// 有以第i个字符作为begin的hit
|
||||
var fromDicts = Engine.PinyinFromDict(selectedEmits[nextHitIndex].Keyword!, pinyinDictList!)!;
|
||||
for (int j = 0; j < fromDicts.Length; j++)
|
||||
{
|
||||
yield return fromDicts[j].ToUpper();
|
||||
}
|
||||
|
||||
i += selectedEmits[nextHitIndex].Size();
|
||||
nextHitIndex++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 将第i个字符转为拼音
|
||||
yield return GetPinyin(s[i]) ?? string.Empty;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static PinyinHelper.Config NewConfig() => PinyinHelper.NewConfig()!;
|
||||
|
||||
static void Init(PinyinHelper.Config? config) => PinyinHelper.Init(config);
|
||||
|
||||
/// <summary>
|
||||
/// 使用 CnCityDict 初始化拼音库
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
public static void InitWithCnCityDict(Android.Content.Context context)
|
||||
{
|
||||
var config = NewConfig();
|
||||
var dict = new CnCityDict(context, CnCityDict.DefaultAssetFileName);
|
||||
config = config.With(dict);
|
||||
Init(config);
|
||||
}
|
||||
|
||||
///// <summary>
|
||||
///// 初始化拼音库
|
||||
///// </summary>
|
||||
//public static void Init()
|
||||
//{
|
||||
// var config = NewConfig();
|
||||
// Init(config);
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// 初始化拼音库
|
||||
///// </summary>
|
||||
///// <param name="action"></param>
|
||||
//public static void Init(Action<PinyinHelper.Config> action)
|
||||
//{
|
||||
// var config = NewConfig()!;
|
||||
// action(config);
|
||||
// Init(config);
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// 使用词典初始化拼音库
|
||||
///// </summary>
|
||||
///// <param name="dicts"></param>
|
||||
//public static void InitWithDicts(params IPinyinDict[] dicts)
|
||||
//{
|
||||
// var config = NewConfig()!;
|
||||
// if (dicts.Any())
|
||||
// {
|
||||
// foreach (var dict in dicts)
|
||||
// {
|
||||
// config.With(dict);
|
||||
// }
|
||||
// }
|
||||
// Init(config);
|
||||
//}
|
||||
#endif
|
||||
bool IPinyin.IsChinese(char c) => PinyinHelper.IsChinese(c);
|
||||
|
||||
string[] IPinyin.GetPinyinArray(string s)
|
||||
{
|
||||
if (string.IsNullOrEmpty(s)) return Array.Empty<string>();
|
||||
#if MONOANDROID || ANDROID
|
||||
#if MONOANDROID
|
||||
var trie = PinyinHelper.TrieDict;
|
||||
var selector = PinyinHelper.Selector;
|
||||
var pinyinDictList = PinyinHelper.PinyinDicts;
|
||||
if (trie != null && selector != null && pinyinDictList != null)
|
||||
{
|
||||
return GetPinyinArray(s, trie, pinyinDictList, selector).ToArray();
|
||||
return Engine.GetPinyinArray(s, trie, pinyinDictList, selector).ToArray();
|
||||
}
|
||||
#endif
|
||||
// 没有提供字典或选择器,按单字符转换输出
|
||||
return s.Select(x => GetPinyin(x) ?? string.Empty).ToArray();
|
||||
return s.Select(x => PinyinHelper.GetPinyin(x) ?? string.Empty).ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
#if MONOANDROID
|
||||
using System;
|
||||
|
||||
namespace TinyPinyin
|
||||
{
|
||||
internal static class ReflectUtils
|
||||
{
|
||||
public static Func<T?> GetStaticField<T>(string fieldName) where T : notnull
|
||||
{
|
||||
var field = Java.Lang.Class.FromType(typeof(PinyinHelper)).GetDeclaredField(fieldName);
|
||||
if (field != null)
|
||||
{
|
||||
return () =>
|
||||
{
|
||||
if (field.Get(null) is T value)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
return default;
|
||||
};
|
||||
}
|
||||
return () => default;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||