Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6f1c11ff33 | ||
|
|
fe31908a50 | ||
|
|
31f6c4c32c | ||
|
|
4ac8a221ed | ||
|
|
808ad66976 | ||
|
|
9bd6f5d74f | ||
|
|
0e08852567 | ||
|
|
39f7cd8c1c | ||
|
|
9d43183003 | ||
|
|
aaf9a8c807 | ||
|
|
3342ab0483 | ||
|
|
08ee9c11ef | ||
|
|
b6733bf965 | ||
|
|
416f88d993 | ||
|
|
a82f27542e | ||
|
|
37bb1ce4fe | ||
|
|
f73031acd3 | ||
|
|
27ecde90f4 | ||
|
|
aefb1282e7 | ||
|
|
1871eeff69 | ||
|
|
5eaba8c5d4 | ||
|
|
c092eb046e | ||
|
|
e28ce37edd | ||
|
|
cd6d7e7243 | ||
|
|
da055b48d1 | ||
|
|
6e9bf51b1d | ||
|
|
b74bd54ae1 | ||
|
|
5f9a25868e | ||
|
|
2a6d400831 | ||
|
|
55f71a335c | ||
|
|
984286e6cd | ||
|
|
ffbde37ce1 | ||
|
|
7c93df07ca | ||
|
|
1fc4adc4f3 | ||
|
|
ec4a224a0c | ||
|
|
4093323510 | ||
|
|
56ef576ec0 | ||
|
|
cff783ae52 | ||
|
|
fbbba8708f | ||
|
|
38acfa7760 | ||
|
|
c86a9a5b04 | ||
|
|
0ac7ba5b1d | ||
|
|
9260d8a5ca | ||
|
|
33d017f990 | ||
|
|
c755f90a4e | ||
|
|
77928273bf | ||
|
|
15f83c9094 | ||
|
|
0c9abed768 | ||
|
|
b883655ad9 | ||
|
|
4b9fdc6787 | ||
|
|
01c731a13a | ||
|
|
998862823c | ||
|
|
e02764c7ce | ||
|
|
1bbd5b425b | ||
|
|
baed8b9ee5 | ||
|
|
b76a31d246 | ||
|
|
843562a5d3 | ||
|
|
0b22813a8c | ||
|
|
857dfbd0d7 | ||
|
|
9cd2647f73 | ||
|
|
1dc9087962 | ||
|
|
4b89619286 | ||
|
|
e6f376e5ea | ||
|
|
a69aa24b56 | ||
|
|
add400fbae | ||
|
|
157d205df9 | ||
|
|
2706d63f69 | ||
|
|
965bb36e65 | ||
|
|
3ef8f16ea1 | ||
|
|
91fd62cdd7 | ||
|
|
1a93067529 | ||
|
|
c299bc1b3a | ||
|
|
6a03055ba0 | ||
|
|
41e1192b25 | ||
|
|
9845d1a505 | ||
|
|
2433ea1fa7 | ||
|
|
d474332b35 | ||
|
|
2fac37f9c2 | ||
|
|
b045c98097 | ||
|
|
cd6fb1e912 | ||
|
|
50df449b63 | ||
|
|
52fed1d494 | ||
|
|
97bb658cda | ||
|
|
26133671ee | ||
|
|
b87d610e1d | ||
|
|
070e4b909c | ||
|
|
876f7706ff | ||
|
|
999cd90c61 | ||
|
|
7151851812 | ||
|
|
498e9ededb | ||
|
|
f3c040d621 | ||
|
|
6bc806b9a9 | ||
|
|
d39e9437a8 | ||
|
|
7b70591914 | ||
|
|
50c68dcaf3 | ||
|
|
f6f38eaf34 | ||
|
|
a7306d7478 | ||
|
|
e1e59cc66b | ||
|
|
1610ee0165 | ||
|
|
b17534ef57 | ||
|
|
2475f59ff1 | ||
|
|
dc1415c0ce | ||
|
|
9b1eb631c1 | ||
|
|
97566df29d | ||
|
|
e0fbe76b97 | ||
|
|
2f76b78ffd | ||
|
|
5179ad8827 | ||
|
|
ce222da8ef | ||
|
|
31dd1731df | ||
|
|
5388425f1d | ||
|
|
56687596c6 | ||
|
|
edf5acc455 | ||
|
|
b21972db50 | ||
|
|
7a12b50ba4 | ||
|
|
cfb5796cb6 | ||
|
|
faecc2b4d8 | ||
|
|
c3c7c889d4 | ||
|
|
e29e7a8f0e | ||
|
|
3723e0866f | ||
|
|
bf5ca108e0 | ||
|
|
69e60440e1 | ||
|
|
76e75abbc2 | ||
|
|
df7c1d62fb | ||
|
|
ceabdaaa64 | ||
|
|
170dc355b7 | ||
|
|
0b9bccf1e3 | ||
|
|
91ce45feda | ||
|
|
61722994b1 | ||
|
|
15557ecd74 | ||
|
|
53b2c514a5 | ||
|
|
517a259e4e | ||
|
|
f15d005771 | ||
|
|
9f9478f0e5 | ||
|
|
3822a646de | ||
|
|
35d4bc83e6 | ||
|
|
f7a5646836 | ||
|
|
29820061e1 | ||
|
|
281332be71 | ||
|
|
92f1eb9585 | ||
|
|
0b9fdcc0b6 | ||
|
|
d83c0536c9 | ||
|
|
d95559e36a | ||
|
|
185532c79a | ||
|
|
c6710ddf2c | ||
|
|
537fc51d49 | ||
|
|
ed3cf8d36e | ||
|
|
09ab684548 | ||
|
|
fbe0d85d12 | ||
|
|
5887602e31 | ||
|
|
e0bbb58c1a | ||
|
|
3b3bcc856a | ||
|
|
846c9feac1 | ||
|
|
8f7930450f | ||
|
|
c913f623e9 | ||
|
|
21a2dc8d31 | ||
|
|
eef90d9aaf | ||
|
|
7e1b4bd820 | ||
|
|
2af95b4491 | ||
|
|
5167c6cbfe | ||
|
|
c551cd278e | ||
|
|
258aa518a9 | ||
|
|
6158b30364 | ||
|
|
f721c6695f | ||
|
|
a8c7a6fe02 | ||
|
|
8969f7008c | ||
|
|
f0e6a4fb8f | ||
|
|
e647d195fa | ||
|
|
229e9644de | ||
|
|
ea59d32c93 | ||
|
|
d794fb6a22 | ||
|
|
62ad711dbd | ||
|
|
2f472a55ad | ||
|
|
588d663216 | ||
|
|
5510b4915c | ||
|
|
f3649d3246 | ||
|
|
fe45b39c8f | ||
|
|
c59fb1076c | ||
|
|
7717188152 | ||
|
|
8e78557f16 | ||
|
|
835083b899 | ||
|
|
1588749280 | ||
|
|
69c6baf39e | ||
|
|
36bff3751d | ||
|
|
86df7af88d | ||
|
|
09edd5dc3d | ||
|
|
cd599de46a | ||
|
|
3d8001dc75 | ||
|
|
da3a1e9d9d | ||
|
|
49aff6e7dc | ||
|
|
bf34c219a1 | ||
|
|
efbc17d15f | ||
|
|
682165d90e | ||
|
|
046d60112c | ||
|
|
927439c80d | ||
|
|
a28f8fa1e1 | ||
|
|
29cc793628 | ||
|
|
42f8971bd7 | ||
|
|
f98473246c | ||
|
|
e9bbbd8a32 | ||
|
|
9a6c52b88f | ||
|
|
a603fdd834 | ||
|
|
a5343bb2b2 | ||
|
|
e14eec48e9 | ||
|
|
2f2923fdb8 | ||
|
|
f41fd35d78 | ||
|
|
32e90b672f | ||
|
|
ad98879d5c | ||
|
|
61a4f05480 | ||
|
|
3a8a232f98 | ||
|
|
52897064dd | ||
|
|
e202f4ae5e | ||
|
|
f51ce974de | ||
|
|
4806dbcf27 | ||
|
|
e1db44af68 | ||
|
|
d6031c8acd | ||
|
|
2852c630e9 | ||
|
|
8a06b7d09f | ||
|
|
c14e548b0f | ||
|
|
0820c880ac | ||
|
|
84e3752f88 | ||
|
|
1f62313978 | ||
|
|
ffcf0f0ff0 | ||
|
|
c01a9157e2 | ||
|
|
13db16b07c | ||
|
|
33b76c6622 | ||
|
|
6c905ab4c7 | ||
|
|
cb16f7690d | ||
|
|
2c80c2d80c | ||
|
|
778a76a36e | ||
|
|
660fb687f3 | ||
|
|
39766838df | ||
|
|
12e438c8cd | ||
|
|
c5eae6a980 | ||
|
|
e249b0a60f | ||
|
|
c407d0d5c7 | ||
|
|
848aa77029 | ||
|
|
bdfa82e557 | ||
|
|
4491e32cf3 | ||
|
|
86cb93a02a | ||
|
|
1e26b22bc8 | ||
|
|
8e50c843f0 | ||
|
|
8a4fcaa539 | ||
|
|
15fc32dd46 | ||
|
|
fb9cb68957 | ||
|
|
91152a55fc | ||
|
|
8aebbe2b0a | ||
|
|
ecf085c7c4 | ||
|
|
13d6b6213f | ||
|
|
9c49c82db9 | ||
|
|
428b841712 | ||
|
|
716210b089 | ||
|
|
2b2ccdd3b1 | ||
|
|
8d0e857df5 | ||
|
|
978f0d8f51 | ||
|
|
b4b0303426 | ||
|
|
f4c928c46c | ||
|
|
34a25ceabe | ||
|
|
90a5f30802 | ||
|
|
3f113c96aa | ||
|
|
4982faf5ba | ||
|
|
e10e14cd0c | ||
|
|
86a2bc25bc | ||
|
|
4ef3523dff | ||
|
|
5fa4086aee | ||
|
|
689faa5f67 | ||
|
|
0d6bb55d17 | ||
|
|
5ce5697a75 | ||
|
|
a6694c5820 | ||
|
|
d3be62c5ec | ||
|
|
c68ff50812 | ||
|
|
fba8dca6c3 | ||
|
|
03f3a73a60 | ||
|
|
6cdfb98b0f | ||
|
|
a930211594 | ||
|
|
d54b828135 | ||
|
|
c86f28161f | ||
|
|
9932606be2 | ||
|
|
d56de1676e | ||
|
|
5b787b6d7c | ||
|
|
35adebcbb1 | ||
|
|
83b6d9d67c | ||
|
|
7a18b0a8e2 | ||
|
|
7ce53f11aa | ||
|
|
f45db63b87 | ||
|
|
3a3beec9db | ||
|
|
45c866ba2d | ||
|
|
90c0513493 | ||
|
|
7854a0446b | ||
|
|
e730b4f7f1 | ||
|
|
f2fa9d78de | ||
|
|
ef751f8c3a | ||
|
|
aa9698887d | ||
|
|
7e04eeb7c6 | ||
|
|
e59d1a5002 | ||
|
|
2a42ce2caf | ||
|
|
6d82ca02df | ||
|
|
8cc5bb4dab | ||
|
|
6480d258bf | ||
|
|
71f7fbf890 | ||
|
|
98f6bbd249 | ||
|
|
3b4efd3ce3 | ||
|
|
a20ceb840f | ||
|
|
ad23a712a3 | ||
|
|
931c4ad288 | ||
|
|
c1f6781fa9 | ||
|
|
09a4e8b5dd | ||
|
|
fe4f11b868 | ||
|
|
02e30a379a | ||
|
|
6b816d7a88 | ||
|
|
6c0d817c2b | ||
|
|
487365e148 | ||
|
|
467c0f4975 | ||
|
|
1245c44fe1 | ||
|
|
4fa35b762e | ||
|
|
a38fdbf1eb | ||
|
|
a64493721e | ||
|
|
809c531202 | ||
|
|
6566e5f129 | ||
|
|
7c37aca596 | ||
|
|
93b88bb35b | ||
|
|
54cc336983 | ||
|
|
2e7eb319ea | ||
|
|
886f35e22a | ||
|
|
df734d2784 | ||
|
|
718d6babad | ||
|
|
f369ca2c7d | ||
|
|
3089eacc57 | ||
|
|
af1915de71 | ||
|
|
2c50a0a220 | ||
|
|
2f2404236a | ||
|
|
9b6c374950 | ||
|
|
84b15343cc | ||
|
|
2e96d594df | ||
|
|
2eec779a00 | ||
|
|
285d071125 | ||
|
|
0ad2b9f05d | ||
|
|
8d8565c4d1 | ||
|
|
2ee1eed145 | ||
|
|
d16778fda2 | ||
|
|
efbc9489cd | ||
|
|
ca8ad41b7b | ||
|
|
535894798c | ||
|
|
629518f31d | ||
|
|
a5535cba87 | ||
|
|
a495cd2856 | ||
|
|
e7d8e636d2 | ||
|
|
3855291c68 | ||
|
|
d0d1baac29 | ||
|
|
1c50fdf4af | ||
|
|
c1b889f887 | ||
|
|
fa84523799 | ||
|
|
160f3d53bb | ||
|
|
ed77ad8d2d | ||
|
|
3fd32b3196 |
@@ -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,3 +240,192 @@ 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,18 +17,19 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
configuration: [ Debug, Release ]
|
||||
os: [ windows-latest, macOS-latest, ubuntu-latest ]
|
||||
# os: [ windows-latest, macOS-latest, ubuntu-latest ]
|
||||
os: [ windows-latest, macOS-latest ]
|
||||
# rid: [ fd-win-x64, win-x64, osx-x64, linux-x64,linux-arm64 ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v1
|
||||
uses: actions/setup-dotnet@v2
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
@@ -40,16 +41,24 @@ jobs:
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install macos
|
||||
|
||||
- name: Install Maui(Windows)
|
||||
- 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)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install maui
|
||||
run: dotnet workload install android
|
||||
|
||||
# - name: Install Maui(Windows)
|
||||
# if: matrix.os == 'windows-latest'
|
||||
# run: dotnet workload install maui
|
||||
|
||||
- name: Verify dotnet info
|
||||
run: dotnet --info
|
||||
|
||||
- name: Checkout Credentials repository
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: SteamTools-Team/Credentials
|
||||
token: ${{ secrets.REPO_TOKEN }}
|
||||
@@ -86,9 +95,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' }}
|
||||
@@ -117,7 +126,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@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
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
|
||||
@@ -125,7 +134,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@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
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
|
||||
@@ -133,7 +142,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@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
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
|
||||
@@ -141,7 +150,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@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
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
|
||||
@@ -149,15 +158,15 @@ 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@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
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 }}.7z
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_linux_x64_${{ env.GITHUB_SHA_SHORT }}.tar.zst
|
||||
|
||||
- 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@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
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 }}.7z
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_linux_arm64_${{ env.GITHUB_SHA_SHORT }}.tar.zst
|
||||
|
||||
@@ -22,13 +22,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v1
|
||||
uses: actions/setup-dotnet@v2
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
|
||||
- name: Checkout NSIS-Build repository
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: SteamTools-Team/NSIS-Build
|
||||
token: ${{ secrets.REPO_TOKEN }}
|
||||
@@ -60,7 +60,7 @@ jobs:
|
||||
|
||||
- name: Checkout Credentials repository
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: SteamTools-Team/Credentials
|
||||
token: ${{ secrets.REPO_TOKEN }}
|
||||
@@ -160,21 +160,21 @@ jobs:
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_macos_arm64_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "macos_arm64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_macos_arm64_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package linux-x64 7z
|
||||
- name: Package linux-x64 tar.zst
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_linux_x64_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "linux_x64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_linux_x64_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_linux_x64_v${{ steps.tag.outputs.tag }}.tar.zst" "${env:PublishFilePath}"
|
||||
Write-Output "linux_x64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_linux_x64_v${{ steps.tag.outputs.tag }}.tar.zst)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package linux-arm64 7z
|
||||
- name: Package linux-arm64 tar.zst
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_linux_arm64_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "linux_arm64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_linux_arm64_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_linux_arm64_v${{ steps.tag.outputs.tag }}.tar.zst" "${env:PublishFilePath}"
|
||||
Write-Output "linux_arm64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_linux_arm64_v${{ steps.tag.outputs.tag }}.tar.zst)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package linux-x64 deb
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
@@ -237,8 +237,8 @@ jobs:
|
||||
| <sub>${{ env.ProjectName }}_win_x64_v${{ steps.tag.outputs.tag }}.exe</sub> | <sub>${{ env.exe_win_x64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_win_x64_fde_v${{ steps.tag.outputs.tag }}.exe</sub> | <sub>${{ env.exe_fd_win_x64_SHA256 }}</sub> |
|
||||
|||
|
||||
| <sub>${{ env.ProjectName }}_linux_x64_v${{ steps.tag.outputs.tag }}.7z</sub> | <sub>${{ env.linux_x64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_linux_arm64_v${{ steps.tag.outputs.tag }}.7z</sub> | <sub>${{ env.linux_arm64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_linux_x64_v${{ steps.tag.outputs.tag }}.tar.zst</sub> | <sub>${{ env.linux_x64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_linux_arm64_v${{ steps.tag.outputs.tag }}.tar.zst</sub> | <sub>${{ env.linux_arm64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_linux_x64_v${{ steps.tag.outputs.tag }}.deb</sub> | <sub>${{ env.deb_linux_x64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_linux_arm64_v${{ steps.tag.outputs.tag }}.deb</sub> | <sub>${{ env.deb_linux_arm64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_linux_x64_v${{ steps.tag.outputs.tag }}.rpm</sub> | <sub>${{ env.rpm_linux_x64_SHA256 }}</sub> |
|
||||
@@ -264,13 +264,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v1
|
||||
uses: actions/setup-dotnet@v2
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
@@ -314,7 +314,7 @@ jobs:
|
||||
|
||||
- name: Checkout Credentials repository
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: SteamTools-Team/Credentials
|
||||
token: ${{ secrets.REPO_TOKEN }}
|
||||
|
||||
@@ -18,13 +18,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v1
|
||||
uses: actions/setup-dotnet@v2
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
|
||||
@@ -37,3 +37,6 @@
|
||||
[submodule "references/SevenZipSharp"]
|
||||
path = references/SevenZipSharp
|
||||
url = https://github.com/SteamTools-Team/SevenZipSharp.git
|
||||
[submodule "references/Gameloop.Vdf"]
|
||||
path = references/Gameloop.Vdf
|
||||
url = https://github.com/BeyondDimension/Gameloop.Vdf.git
|
||||
|
||||
@@ -1,287 +1,313 @@
|
||||
<Project>
|
||||
<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('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.12" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="5.0.12" />
|
||||
</ItemGroup>
|
||||
<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.1" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.1" />
|
||||
</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.7" />
|
||||
<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" />
|
||||
|
||||
<!-- AspNetCore 6 OpenId/OAuth -->
|
||||
<PackageVersion Include="AspNet.Security.OpenId.Steam" Version="6.0.0" />
|
||||
<PackageVersion Include="AspNet.Security.OAuth.QQ" Version="6.0.3" />
|
||||
<PackageVersion Include="AspNet.Security.OAuth.Apple" Version="6.0.3" />
|
||||
</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.1" />
|
||||
<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.0.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="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" />
|
||||
|
||||
<!-- 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.1" />
|
||||
<!-- Xamarin.Forms -->
|
||||
<PackageVersion Include="Xamarin.Forms" Version="5.0.0.2244" />
|
||||
<PackageVersion Include="Xamarin.Forms.Visual.Material" Version="5.0.0.2244" />
|
||||
<PackageVersion Include="Xam.Plugins.Forms.ImageCircle" Version="3.1.1.1-beta" />
|
||||
<!-- 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" />
|
||||
|
||||
<!-- 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.16.1" />
|
||||
<!-- 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" />
|
||||
|
||||
<!-- NLog -->
|
||||
<PackageVersion Include="NLog" Version="4.7.13" />
|
||||
<PackageVersion Include="NLog.Extensions.Logging" Version="1.7.4" />
|
||||
<PackageVersion Include="NLog.Web.AspNetCore" Version="4.14.0" />
|
||||
<!-- 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" />
|
||||
|
||||
<!-- ReactiveUI -->
|
||||
<PackageVersion Include="System.Reactive" Version="5.0.0" />
|
||||
<PackageVersion Include="Splat" Version="14.1.17" />
|
||||
<PackageVersion Include="DynamicData" Version="7.4.11" />
|
||||
<PackageVersion Include="ReactiveUI" Version="17.1.17" />
|
||||
<!--<PackageVersion Include="ReactiveUI.Fody" Version="17.1.17" /> -->
|
||||
<PackageVersion Include="ReactiveUI.XamForms" Version="17.1.17" />
|
||||
<PackageVersion Include="ReactiveUI.AndroidX" Version="17.1.17" />
|
||||
<!-- 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" />
|
||||
|
||||
<!-- SkiaSharp & HarfBuzzSharp -->
|
||||
<PackageVersion Include="HarfBuzzSharp" Version="2.8.2-preview.179" />
|
||||
<PackageVersion Include="HarfBuzzSharp.NativeAssets.Linux" Version="2.8.2-preview.179" />
|
||||
<PackageVersion Include="SkiaSharp" Version="2.88.0-preview.179" />
|
||||
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="2.88.0-preview.179" />
|
||||
<!-- 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" />
|
||||
|
||||
<!-- 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" />
|
||||
<!-- 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" />
|
||||
|
||||
<!-- 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-beta1.21308.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" />
|
||||
|
||||
<!-- Pinyin -->
|
||||
<PackageVersion Include="TinyPinyin.Net" Version="1.0.2" />
|
||||
<!-- Pinyin -->
|
||||
<PackageVersion Include="TinyPinyin.Net" Version="1.0.2" />
|
||||
<PackageVersion Include="XAB.TinyPinyin" Version="2.0.4.4" />
|
||||
|
||||
<!-- Win32/Windows -->
|
||||
<PackageVersion Include="TaskScheduler" Version="2.10.0" />
|
||||
<!-- Win32/Windows -->
|
||||
<PackageVersion Include="TaskScheduler" Version="2.10.1" />
|
||||
|
||||
<!-- Swagger -->
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.2.3" />
|
||||
<!-- 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" />
|
||||
|
||||
<!-- 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.0.7" />
|
||||
<!-- ORM -->
|
||||
<PackageVersion Include="sqlite-net-pcl" Version="1.8.116" />
|
||||
<PackageVersion Include="SQLitePCLRaw.bundle_green" Version="2.1.0-pre20220318192836" />
|
||||
|
||||
<!-- 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.2.1" />
|
||||
<!-- .NET Compat -->
|
||||
<PackageVersion Include="OperatingSystem2" Version="1.4.3" />
|
||||
<PackageVersion Include="JustArchiNET.Madness" Version="3.5.2" />
|
||||
|
||||
<!-- 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" />
|
||||
<!-- 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.12" />
|
||||
<PackageVersion Include="Avalonia.Desktop" Version="0.10.12" />
|
||||
<PackageVersion Include="Avalonia.Skia" Version="0.10.12" />
|
||||
<PackageVersion Include="Avalonia.Diagnostics" Version="0.10.12" />
|
||||
<PackageVersion Include="Avalonia.ReactiveUI" Version="0.10.12" />
|
||||
<!--<PackageVersion Include="Avalonia.Direct2D1" Version="0.10.12" />-->
|
||||
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="0.10.12" />
|
||||
<PackageVersion Include="Avalonia.Xaml.Behaviors" Version="0.10.12" />
|
||||
<!--<PackageVersion Include="Avalonia.AvaloniaEdit" Version="0.10.4" />-->
|
||||
<!--<PackageVersion Include="CefNet.Avalonia" Version="93.1.21240.857" />-->
|
||||
<!--<PackageVersion Include="LibVLCSharp.Avalonia" Version="3.5.1" />-->
|
||||
<!--<PackageVersion Include="FluentAvaloniaUI" Version="1.1.8" />-->
|
||||
<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.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-->
|
||||
|
||||
<!-- 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" />
|
||||
<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" />-->
|
||||
<!-- 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.AndroidX -->
|
||||
<PackageVersion Include="Xamarin.AndroidX.Migration" Version="1.0.8" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.AppCompat" Version="1.3.1.4" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Emoji.AppCompat" Version="1.1.0.5" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Fragment" Version="1.3.6.4" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Navigation.Fragment" Version="2.3.5.3" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.RecyclerView" Version="1.2.1.4" />
|
||||
<PackageVersion Include="Xamarin.Google.Android.Material" Version="1.4.0.5" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.SwipeRefreshLayout" Version="1.1.0.6" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ConstraintLayout" Version="2.1.2.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Navigation.UI" Version="2.3.5.3" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ViewPager2" Version="1.0.0.13" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Activity" Version="1.4.0.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Biometric" Version="1.1.0.6" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ExifInterface" Version="1.3.3.3" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Legacy.Support.Core.UI" Version="1.0.0.12" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="2.4.0.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.Camera2" Version="1.0.2.2" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.Lifecycle" Version="1.0.2.2" />
|
||||
<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" />-->
|
||||
|
||||
</ItemGroup>
|
||||
<!-- 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>
|
||||
</Project>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
English | [简体中文](./README.md)
|
||||
|
||||
「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.
|
||||
"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.
|
||||
|
||||

|
||||
[](https://github.com/rmbadmin/SteamTools/releases/latest)
|
||||
@@ -32,19 +32,24 @@ 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. 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.
|
||||
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
|
||||
|
||||
<!--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
|
||||
@@ -57,7 +62,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
|
||||
@@ -117,7 +122,7 @@ OS | Version | Architectures
|
||||
|
||||
OS | Version | Architectures |
|
||||
------------------------------|---------------------------|-------------------|
|
||||
[macOS][macOS] | 10.14+ | x64 |
|
||||
[macOS][macOS] | 10.15+ | x64, Arm64 |
|
||||
|
||||
[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,26 +33,24 @@
|
||||
- [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. 反代 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. 其他游戏工具
|
||||
- 目前已有强制游戏无边框窗口化
|
||||
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)
|
||||
- 强制游戏窗口使用无边框窗口化
|
||||
|
||||
<!--发布配置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)-->
|
||||
@@ -66,7 +64,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
|
||||
@@ -126,10 +124,12 @@ OS | Version | Architectures
|
||||
|
||||
OS | Version | Architectures |
|
||||
------------------------------|---------------------------|-------------------|
|
||||
[macOS][macOS] | 10.14+ | x64 |
|
||||
[macOS][macOS] | 10.15+ | x64, Arm64 |
|
||||
|
||||
[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,18 +16,15 @@
|
||||
"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",
|
||||
@@ -38,6 +35,7 @@
|
||||
"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,10 +16,11 @@
|
||||
"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",
|
||||
@@ -38,6 +39,10 @@
|
||||
"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,8 +152,6 @@ 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}"
|
||||
@@ -166,7 +164,29 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.UnitTest.Resource
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Diagnostics", "src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj", "{E84FF7BC-FC2A-424E-8780-7DA9B487E23F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Skia.Internals", "src\Avalonia.Skia.Internals\Avalonia.Skia.Internals.csproj", "{47C151DA-D2B1-43F4-A04E-B454E2134852}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia.Internals", "src\Avalonia.Skia.Internals\Avalonia.Skia.Internals.csproj", "{47C151DA-D2B1-43F4-A04E-B454E2134852}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bindings", "Bindings", "{80EBD601-28AC-4840-B9B8-E6064816A443}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Android.V2Ray", "src\ST.Client.Android.V2Ray\ST.Client.Android.V2Ray.csproj", "{4A79264D-5BF5-4F89-8066-44E154BF557F}"
|
||||
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
|
||||
@@ -1586,34 +1606,6 @@ 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
|
||||
@@ -1824,6 +1816,258 @@ Global
|
||||
{47C151DA-D2B1-43F4-A04E-B454E2134852}.Release|x64.Build.0 = Release|Any CPU
|
||||
{47C151DA-D2B1-43F4-A04E-B454E2134852}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{47C151DA-D2B1-43F4-A04E-B454E2134852}.Release|x86.Build.0 = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|x64.Build.0 = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|x86.Build.0 = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{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
|
||||
@@ -1880,7 +2124,6 @@ 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}
|
||||
@@ -1888,6 +2131,16 @@ Global
|
||||
{FB2CA9B4-71F1-48E8-B9AE-FF4375F4FE43} = {CC46B486-00D7-49E6-ABA3-FDF8F4868D2B}
|
||||
{E84FF7BC-FC2A-424E-8780-7DA9B487E23F} = {910D6A0F-42AB-4B65-B532-852E864EC006}
|
||||
{47C151DA-D2B1-43F4-A04E-B454E2134852} = {910D6A0F-42AB-4B65-B532-852E864EC006}
|
||||
{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,23 +1,27 @@
|
||||
# 下载指南
|
||||
- Desktop(桌面端)
|
||||
- Windows
|
||||
- 如果你使用 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)
|
||||
- 如果你使用 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)
|
||||
- macOS
|
||||
- 如果你使用 Intel、AMD 的 x64 芯片的 Mac(较为**普遍**),则下载文件名中带有 **macos_x64** 的文件
|
||||
- 如果你使用 ARM64 芯片的 Mac(较为**稀有**),例如 **M1**,则下载文件名中带有 **macos_arm64** 的文件
|
||||
- 如果你使用 Intel 的 x64(x86-64) 芯片的 Mac,则下载文件名中带有 **macos_x64** 的文件
|
||||
- 如果你使用 ARM64(Apple Silicon) 芯片的 Mac,例如 **Apple M1**,则下载文件名中带有 **macos_arm64** 的文件
|
||||
- Linux
|
||||
- 如果你使用 Intel、AMD 的 x64 芯片的 PC(较为**普遍**)则下载文件名中带有 **linux_x64** 的文件
|
||||
- 如果你使用 ARM64 芯片的 PC(较为**稀有**)例如 **Raspberry Pi Model 3+**,则下载文件名中带有 **linux_arm64** 的文件
|
||||
- 如果你使用 Intel、AMD 的 x64(x86-64) 芯片的 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,8 +1,9 @@
|
||||
{
|
||||
"msbuild-sdks": {
|
||||
"MSBuild.Sdk.Extras": "3.0.44"
|
||||
"MSBuild.Sdk.Extras": "3.0.44",
|
||||
"Xamarin.Legacy.Sdk": "0.1.2-alpha6"
|
||||
},
|
||||
"sdk": {
|
||||
"version": "6.0.101"
|
||||
"version": "6.0.202"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>net.steampp.app</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.4.10</string>
|
||||
<string>2.7.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.4.10.0</string>
|
||||
<string>2.7.0.0</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.14</string>
|
||||
<string>10.15</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="/Users/mossimo/bin/logo.icns"
|
||||
APPICONS="${{ Steam++_IcnsFile }}"
|
||||
|
||||
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>2.6.7</string>
|
||||
<string>${{ Steam++_ShortVersion }}</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.6.7.0</string>
|
||||
<string>${{ Steam++_Version }}</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.14</string>
|
||||
<string>10.15</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>zh_CN</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$PLIST_APPNAME</string>
|
||||
<string>${{ Steam++_RunName }}</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>$PLIST_APPNAME</string>
|
||||
<string>${{ Steam++_RunName }}</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>$PLIST_APPNAME</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
@@ -64,10 +64,10 @@ EOF
|
||||
fi
|
||||
}
|
||||
|
||||
cd "/Users/mossimo/bin"
|
||||
cd "${{ Steam++_OutPutFilePath }}"
|
||||
|
||||
|
||||
BINARYNAME="Steam++"
|
||||
BINARYNAME="${{ Steam++_AppName }}"
|
||||
|
||||
echo "Building Avalonia demo..."
|
||||
|
||||
@@ -80,14 +80,8 @@ rm -rf "$APPDIR"
|
||||
create_app_structure "$APPNAME"
|
||||
emit_plist "$APPNAME" "$APPDIR" true
|
||||
|
||||
cd "$APPDIR/Frameworks"
|
||||
mv -f "${{ Steam++_APPDIR }}" "$APPDIR/MacOS"
|
||||
chmod +x "$APPDIR/MacOS/Steam++"
|
||||
|
||||
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"
|
||||
mkdir "${{ Steam++_APPDIR }}"
|
||||
mv -f "${{ Steam++_OutPutFilePath }}/$BINARYNAME.app" "${{ Steam++_APPDIR }}/$BINARYNAME.app"
|
||||
@@ -0,0 +1,7 @@
|
||||
[*.cs]
|
||||
|
||||
# IDE0055: 修正格式
|
||||
dotnet_diagnostic.IDE0055.severity = suggestion
|
||||
|
||||
# IDE1006: 命名样式
|
||||
dotnet_diagnostic.IDE1006.severity = suggestion
|
||||
@@ -0,0 +1,7 @@
|
||||
# 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
|
||||
@@ -0,0 +1,98 @@
|
||||
|
||||
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 黄陂
|
||||
@@ -0,0 +1,8 @@
|
||||
# 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,5 +3,6 @@ using static System.Properties.ThisAssembly;
|
||||
|
||||
[assembly: SuppressIldasm]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Mobile" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Desktop" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Avalonia" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("Xamarin.Forms.Platform.Android.UnitTests" + PublicKey)]
|
||||
[assembly: InternalsVisibleTo("Assembly-CSharp" + PublicKey)]
|
||||
@@ -0,0 +1,7 @@
|
||||
# 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
|
||||
@@ -0,0 +1,4 @@
|
||||
# Windows/macOS/Linux x86(32 bit) Native Library
|
||||
|
||||
## 7z.dll
|
||||
21.07 (2021-12-26) by https://www.7-zip.org
|
||||
@@ -1,22 +1,34 @@
|
||||
### 版本亮点
|
||||
1. ASF 升级至 **V5.2.2.4**
|
||||
2. Android 12 适配
|
||||
3. Android 上的 ASP.NET Core 升级至 2.2.5
|
||||
4. Desktop 上的 Avalonia 升级至 0.10.12
|
||||
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. 修复 Steam Beta 版账号切换失效
|
||||
2. 修复 ASF 在线配置文件生成器链接错误
|
||||
3. 修复 Linux 上运行时闪退
|
||||
4. 修复 Windows 7 上点击任务栏图标没有最小化
|
||||
5. 改进 打开 Web 链接失败时候的错误提示
|
||||
6. 改进 JumpList 在 Windows 10.0.10586 上使用 UWP API
|
||||
7. 改进 Windows 安装包默认路径使用 $PROGRAMFILES64
|
||||
8. 改进 Windows 安装版 AppData 与 Cache 文件夹不再使用根目录
|
||||
9. 改进 Android Apk 包使用单一包,不再根据 ABI 拆分
|
||||
10. 改进 Android 本地加速与 ASF 使用前台服务运行
|
||||
11. 改进 本地加速 增加 重置 Hosts 文件 与 打开 Hosts 所在文件夹
|
||||
12. 改进 Hosts 文件存在多个 Mark 导致失败的错误提示
|
||||
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 时,程序内打开网页端口号值不正确
|
||||
|
||||
### 已知问题
|
||||
- 除 Windows 之外的平台此软件自动更新尚不可用
|
||||
@@ -24,8 +36,6 @@
|
||||
- macOS
|
||||
- [尚未公证](https://support.apple.com/zh-cn/guide/mac-help/mh40616/10.15/mac/10.15),这会影响 macOS Catalina(版本 10.15)以上版本
|
||||
- Linux
|
||||
- **Hosts 代理模式**可能无法配置成功,推荐使用**系统代理模式**
|
||||
- 系统代理模式下 Discord 更新下载加速不可用
|
||||
- 窗口弹出位置不正确
|
||||
- 鼠标指针浮动样式不正确
|
||||
- Windows
|
||||
@@ -38,19 +48,20 @@
|
||||
- 需要安装 Extended Security Update
|
||||
- 在不符合先决条件的情况下运行可能导致
|
||||
- 程序无法正常运行
|
||||
- **解决方案**
|
||||
- 使用 Windows Update 更新系统补丁
|
||||
- 运行程序时提示 计算机中丢失 api-ms-win-core-winrt-l1-1-0.dll
|
||||
- **解决方案**
|
||||
- 因 [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 文件可使用解压工具打开或解压,找到此文件复制即可
|
||||
- **解决方案**
|
||||
- 下载 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 之类的软件操作,未来会使用不需要证书的加速功能替换此功能
|
||||
|
||||
|
||||
[](https://steampp.net)
|
||||
[]()
|
||||
[]()
|
||||
|
||||
|
||||
##### [不知道该下载哪个文件?](./download-guide.md)
|
||||
@@ -59,21 +70,22 @@
|
||||
### 文件校验
|
||||
| File | Checksum (SHA256) |
|
||||
| ---- | ---- |
|
||||
| Steam++_win_x64_v2.6.7.7z | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.6.7.7z | SHA256 |
|
||||
| Steam++_win_x64_v2.7.0.7z | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.7.0.7z | SHA256 |
|
||||
| | |
|
||||
| Steam++_win_x64_v2.6.7.exe | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.6.7.exe | SHA256 |
|
||||
| Steam++_win_x64_v2.7.0.exe | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.7.0.exe | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.6.7.7z | SHA256 |
|
||||
| Steam++_linux_arm64_v2.6.7.7z | SHA256 |
|
||||
| Steam++_linux_x64_v2.7.0.7z | SHA256 |
|
||||
| Steam++_linux_arm64_v2.7.0.7z | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.6.7.deb | SHA256 |
|
||||
| Steam++_linux_arm64_v2.6.7.deb | SHA256 |
|
||||
| Steam++_linux_x64_v2.7.0.deb | SHA256 |
|
||||
| Steam++_linux_arm64_v2.7.0.deb | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.6.7.rpm | SHA256 |
|
||||
| Steam++_linux_arm64_v2.6.7.rpm | SHA256 |
|
||||
| Steam++_linux_x64_v2.7.0.rpm | SHA256 |
|
||||
| Steam++_linux_arm64_v2.7.0.rpm | SHA256 |
|
||||
| | |
|
||||
| Steam++_macos_x64_v2.6.7.dmg | SHA256 |
|
||||
| Steam++_macos_x64_v2.7.0.dmg | SHA256 |
|
||||
| Steam++_macos_arm64_v2.7.0.dmg | SHA256 |
|
||||
| | |
|
||||
| Steam++_android_v2.6.7.apk | SHA256 |
|
||||
| Steam++_android_v2.7.0.apk | SHA256 |
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace System
|
||||
public const string MainDllPath_ =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\{0}\Steam++.dll";
|
||||
|
||||
[Obsolete("use DirPublishWinX86_", true)]
|
||||
[Obsolete("use DirPublishWinX86_")]
|
||||
public const string DirPublishWinX86 =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Publish\win-x86";
|
||||
|
||||
@@ -46,6 +46,9 @@ 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: 71 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 686 KiB After Width: | Height: | Size: 829 KiB |
|
Before Width: | Height: | Size: 657 KiB After Width: | Height: | Size: 660 KiB |
@@ -1,4 +1,5 @@
|
||||
#if __ANDROID__
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.OS;
|
||||
using Android.Webkit;
|
||||
@@ -147,7 +148,41 @@ namespace System.Application.UI
|
||||
b.AppendLine();
|
||||
|
||||
b.Append("[app.install] ");
|
||||
b.Append(platformService.IsInstall);
|
||||
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__
|
||||
var activityManager = activity.GetActivityManager();
|
||||
ActivityManager.MemoryInfo memoryInfo = new();
|
||||
activityManager.GetMemoryInfo(memoryInfo);
|
||||
var nativeHeapSize = memoryInfo.TotalMem;
|
||||
var nativeHeapFreeSize = memoryInfo.AvailMem;
|
||||
var usedMemInBytes = nativeHeapSize - nativeHeapFreeSize;
|
||||
var usedMemInPercentage = usedMemInBytes * 100M / nativeHeapSize;
|
||||
b.Append($"{IOPath.GetSizeString(usedMemInBytes)} ({usedMemInPercentage:0.00}%)");
|
||||
#else
|
||||
b.Append(IOPath.GetSizeString(Environment.WorkingSet));
|
||||
#endif
|
||||
b.AppendLine();
|
||||
|
||||
b.Append("[deploy.mode] ");
|
||||
@@ -162,6 +197,7 @@ namespace System.Application.UI
|
||||
b.Append(RuntimeInformation.ProcessArchitecture);
|
||||
b.AppendLine();
|
||||
|
||||
#if MONOANDROID
|
||||
b.Append("[clr.ver] ");
|
||||
string? clrVersion;
|
||||
try
|
||||
@@ -177,9 +213,16 @@ 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] ");
|
||||
@@ -226,18 +269,25 @@ namespace System.Application.UI
|
||||
static void GetStartTime(StringBuilder b)
|
||||
{
|
||||
string startTimeStr;
|
||||
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})";
|
||||
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;
|
||||
}
|
||||
b.Append(startTimeStr);
|
||||
}
|
||||
b.AppendLine();
|
||||
@@ -345,9 +395,15 @@ 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,4 +14,8 @@
|
||||
<PackageReference Include="Avalonia.Skia" Aliases="AvaloniaSkia" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -9,6 +9,7 @@ namespace Avalonia.Skia
|
||||
public sealed class SKTypefaceCollection
|
||||
{
|
||||
readonly @this @this;
|
||||
|
||||
internal SKTypefaceCollection(@this @this)
|
||||
{
|
||||
this.@this = @this;
|
||||
|
||||
@@ -37,4 +37,8 @@
|
||||
<LastGenOutput>SR.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -118,11 +118,11 @@
|
||||
<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>This app does not support running in the emulator</value>
|
||||
<value>This app doesn't support running in the emulator</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsRoot" xml:space="preserve">
|
||||
<value>This app does not support running on devices with ROOT permissions</value>
|
||||
<value>This app is not supported to run on devices with ROOT privileges</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsVirtualApk" xml:space="preserve">
|
||||
@@ -130,7 +130,7 @@
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsXposedExists" xml:space="preserve">
|
||||
<value>This app does not support running on devices with Xposed frameworks</value>
|
||||
<value>This app does not support running on devices with the Xposed framework installed</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsRoot" xml:space="preserve">
|
||||
<value>Esta aplicación no admite la ejecución en dispositivos con permisos ROOT</value>
|
||||
<value>Esta aplicación no es compatible para ejecutarse en dispositivos con privilegios ROOT</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsVirtualApk" xml:space="preserve">
|
||||
@@ -130,7 +130,7 @@
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsXposedExists" xml:space="preserve">
|
||||
<value>Esta aplicación no admite la ejecución en dispositivos con marcos Xposed</value>
|
||||
<value>Esta aplicación no admite la ejecución en dispositivos con el marco Xposed instalado</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsRoot" xml:space="preserve">
|
||||
<value>Questa app non supporta l'esecuzione su dispositivi con autorizzazioni ROOT</value>
|
||||
<value>Questa app non è supportata per l'esecuzione su dispositivi con privilegi ROOT</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsVirtualApk" xml:space="preserve">
|
||||
@@ -130,7 +130,7 @@
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsXposedExists" xml:space="preserve">
|
||||
<value>Questa app non supporta l'esecuzione su dispositivi con framework Xposed</value>
|
||||
<value>Questa app non supporta l'esecuzione su dispositivi con il framework Xposed installato</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>
|
||||
<value>이 앱은 에뮬레이터에서 실행을 지원하지 않습니다.</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsRoot" xml:space="preserve">
|
||||
<value>이 앱은 ROOT 권한이 있는 장치에서 실행을 지원하지 않습니다</value>
|
||||
<value>이 응용 프로그램은 루트 권한이있는 장치에서 실행할 수 없습니다</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=MicrosoftTranslator</comment>
|
||||
<value>Это приложение невозможно запустить через эмулятор</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsRoot" xml:space="preserve">
|
||||
<value>Это приложение не поддерживает запуск на устройствах с разрешениями ROOT</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
<value>Это приложение невозможно запустить на устройствах с root правами</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsVirtualApk" xml:space="preserve">
|
||||
<value>Это приложение не поддерживает многооткрытие</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
<value>Это приложение не поддерживает несколько окон</value>
|
||||
<comment>Comment=;Author=vanja-san</comment>
|
||||
</data>
|
||||
<data name="ExitCode_IsXposedExists" xml:space="preserve">
|
||||
<value>Это приложение не поддерживает работу на устройствах, оснащенных платформой Xposed</value>
|
||||
<comment>Comment=;Author=MicrosoftTranslator</comment>
|
||||
<value>Это приложение невозможно запустить на устройствах с установленным Xposed Framework</value>
|
||||
<comment>Comment=;Author=vanja-san</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();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="MSBuild.Sdk.Extras">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>MonoAndroid11.0</TargetFramework>
|
||||
<TargetFramework>MonoAndroid12.0</TargetFramework>
|
||||
<RootNamespace>System</RootNamespace>
|
||||
<AssemblyName>System.Common.ClientLib.Droid</AssemblyName>
|
||||
<AndroidUseIntermediateDesignerFile>false</AndroidUseIntermediateDesignerFile>
|
||||
|
||||
@@ -2,33 +2,62 @@ 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,
|
||||
string certificateFileType = "X.509")
|
||||
Stream certificateFileData)
|
||||
{
|
||||
var certificateFactory = CertificateFactory.GetInstance(certificateFileType);
|
||||
if (certificateFactory == null)
|
||||
throw new NullReferenceException(
|
||||
$"CertificateFactory.GetInstance Fail, Type: {certificateFileType}");
|
||||
var certificate = certificateFactory.GenerateCertificate(certificateFileData);
|
||||
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,4 +22,8 @@
|
||||
<ProjectReference Include="..\Common.ClientLib\Common.ClientLib.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -1,125 +1,126 @@
|
||||
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
|
||||
{
|
||||
[DebuggerDisplay("{DebuggerDisplay(),nq}")]
|
||||
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
|
||||
public sealed class AppClientAttribute : Attribute
|
||||
{
|
||||
string DebuggerDisplay() => $"type: {type}";
|
||||
//namespace System.Application
|
||||
//{
|
||||
// [Obsolete]
|
||||
// [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,6 +10,8 @@ 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
|
||||
@@ -27,5 +29,12 @@ 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))
|
||||
if (IsStoreUrl(url) || IsEmailUrl(url))
|
||||
{
|
||||
return OpenCoreByProcess(url);
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ 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"/>
|
||||
@@ -160,6 +161,10 @@ namespace System.Application
|
||||
{
|
||||
return OSNames.Value.WSA;
|
||||
}
|
||||
else if (Interface != null && Interface.IsChromeOS)
|
||||
{
|
||||
return OSNames.Value.ChromeOS;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DeviceType == DeviceType.Virtual)
|
||||
@@ -201,6 +206,7 @@ namespace System.Application
|
||||
}
|
||||
return default;
|
||||
});
|
||||
|
||||
public static OSNames.Value OSNameValue => _OSNameValue.Value;
|
||||
|
||||
/// <inheritdoc cref="DeviceInfo.DeviceType"/>
|
||||
|
||||
@@ -51,8 +51,14 @@ namespace System.Application
|
||||
throw new PlatformNotSupportedException();
|
||||
}
|
||||
}
|
||||
catch (PermissionException e)
|
||||
{
|
||||
Toast.Show(e.Message); // Xamarin.Essentials.PermissionException
|
||||
return null;
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// The user canceled or something went wrong
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -96,7 +102,7 @@ namespace System.Application
|
||||
{
|
||||
Toast.Show(e.Message); // Xamarin.Essentials.PermissionException
|
||||
}
|
||||
catch
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// The user canceled or something went wrong
|
||||
}
|
||||
@@ -139,7 +145,7 @@ namespace System.Application
|
||||
{
|
||||
Toast.Show(e.Message); // Xamarin.Essentials.PermissionException
|
||||
}
|
||||
catch
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// The user canceled or something went wrong
|
||||
}
|
||||
@@ -169,8 +175,14 @@ namespace System.Application
|
||||
throw new PlatformNotSupportedException();
|
||||
}
|
||||
}
|
||||
catch (PermissionException e)
|
||||
{
|
||||
Toast.Show(e.Message); // Xamarin.Essentials.PermissionException
|
||||
return null;
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// The user canceled or something went wrong
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -212,7 +224,7 @@ namespace System.Application
|
||||
{
|
||||
Toast.Show(e.Message); // Xamarin.Essentials.PermissionException
|
||||
}
|
||||
catch
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// The user canceled or something went wrong
|
||||
}
|
||||
@@ -255,7 +267,7 @@ namespace System.Application
|
||||
{
|
||||
Toast.Show(e.Message); // Xamarin.Essentials.PermissionException
|
||||
}
|
||||
catch
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// The user canceled or something went wrong
|
||||
}
|
||||
@@ -278,8 +290,14 @@ namespace System.Application
|
||||
}
|
||||
throw new PlatformNotSupportedException();
|
||||
}
|
||||
catch (PermissionException e)
|
||||
{
|
||||
Toast.Show(e.Message); // Xamarin.Essentials.PermissionException
|
||||
return null;
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// The user canceled or something went wrong
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,6 +94,7 @@ namespace System.Application
|
||||
}
|
||||
|
||||
static bool mIsFirstLaunchEver;
|
||||
|
||||
/// <summary>
|
||||
/// 获取一个值,该值指示此应用是否首次在此设备上启动。
|
||||
/// </summary>
|
||||
@@ -110,6 +111,7 @@ namespace System.Application
|
||||
return mIsFirstLaunchEver;
|
||||
}
|
||||
}
|
||||
|
||||
private set
|
||||
{
|
||||
mIsFirstLaunchEver = value;
|
||||
@@ -117,6 +119,7 @@ namespace System.Application
|
||||
}
|
||||
|
||||
static bool mIsFirstLaunchForCurrentVersion;
|
||||
|
||||
/// <summary>
|
||||
/// 获取一个值,该值指示这是否是当前版本号的应用程序的首次启动。
|
||||
/// </summary>
|
||||
@@ -133,6 +136,7 @@ namespace System.Application
|
||||
return mIsFirstLaunchForCurrentVersion;
|
||||
}
|
||||
}
|
||||
|
||||
private set
|
||||
{
|
||||
mIsFirstLaunchForCurrentVersion = value;
|
||||
|
||||
@@ -13,10 +13,11 @@ namespace System.Application.Services
|
||||
string VersionString { get; }
|
||||
|
||||
DeviceType DeviceType { get; }
|
||||
|
||||
bool IsChromeOS { get; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
namespace System.Application.Services.Implementation
|
||||
{
|
||||
public abstract class DeviceInfoPlatformServiceImpl : IDeviceInfoPlatformService
|
||||
@@ -30,5 +31,7 @@ namespace System.Application.Services.Implementation
|
||||
public /*virtual*/ string VersionString => DeviceInfo.VersionString;
|
||||
|
||||
public virtual DeviceType DeviceType => DeviceInfo.DeviceType;
|
||||
|
||||
public virtual bool IsChromeOS => false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
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.Substring(0, textBoxText.Length) == textBoxText)))
|
||||
value[..textBoxText.Length] == textBoxText)))
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -9,10 +9,16 @@ namespace System.Application.Services.Implementation
|
||||
/// <inheritdoc cref="ILocalDataProtectionProvider"/>
|
||||
public abstract class LocalDataProtectionProviderBase : ILocalDataProtectionProvider
|
||||
{
|
||||
readonly Lazy<Aes> _aes;
|
||||
#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
|
||||
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,6 +24,7 @@ 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,6 +7,7 @@ namespace System.Application.UI.ViewModels
|
||||
protected virtual bool IgnoreIcon { get; }
|
||||
|
||||
protected TId? id;
|
||||
|
||||
/// <summary>
|
||||
/// 唯一键
|
||||
/// </summary>
|
||||
@@ -28,6 +29,7 @@ namespace System.Application.UI.ViewModels
|
||||
}
|
||||
|
||||
protected string title = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 标题文本
|
||||
/// </summary>
|
||||
@@ -38,6 +40,7 @@ namespace System.Application.UI.ViewModels
|
||||
}
|
||||
|
||||
protected TIcon? icon;
|
||||
|
||||
/// <summary>
|
||||
/// 图标
|
||||
/// </summary>
|
||||
|
||||
@@ -31,4 +31,8 @@
|
||||
<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,10 +28,8 @@ namespace System.Application.Models
|
||||
if (mDataSource == null) mDataSource = new List<T>();
|
||||
return mDataSource;
|
||||
}
|
||||
set
|
||||
{
|
||||
mDataSource = value;
|
||||
}
|
||||
|
||||
set => mDataSource = value;
|
||||
}
|
||||
|
||||
[MPKey(1)]
|
||||
|
||||
@@ -92,6 +92,11 @@ namespace System.Application
|
||||
/// Android 模拟器
|
||||
/// </summary>
|
||||
AndroidVirtual,
|
||||
|
||||
/// <summary>
|
||||
/// https://github.com/chromeos
|
||||
/// </summary>
|
||||
ChromeOS,
|
||||
}
|
||||
|
||||
public static string ToDisplayName(this Value value) => value == default ? string.Empty :
|
||||
@@ -119,7 +124,8 @@ namespace System.Application
|
||||
Value.AndroidDesktop or
|
||||
Value.AndroidTV or
|
||||
Value.AndroidWatch or
|
||||
Value.AndroidVirtual => true,
|
||||
Value.AndroidVirtual or
|
||||
Value.ChromeOS => true,
|
||||
_ => false,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -120,7 +120,8 @@ namespace System.Application
|
||||
/// <summary>
|
||||
/// 黑名单
|
||||
/// </summary>
|
||||
public static readonly byte[] Blacklist = new byte[] {
|
||||
public static readonly byte[] Blacklist = new byte[]
|
||||
{
|
||||
148, 149, 146, // 物联网号段
|
||||
};
|
||||
}
|
||||
|
||||
@@ -70,7 +70,6 @@ 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.Add(typeof(T), validate);
|
||||
=> validators.TryAdd(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, 0, data.Length);
|
||||
stream.Write(data);
|
||||
//XamlServices.Save(stream, this._settings);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ namespace System.Application.Settings
|
||||
|
||||
return _cached ? _value : Default;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
if (_cached && Equals(_value, value)) return;
|
||||
@@ -181,6 +182,7 @@ 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,6 +22,7 @@ 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);
|
||||
@@ -81,6 +82,7 @@ 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,6 +3,7 @@ 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,4 +54,8 @@
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -31,5 +31,7 @@ namespace System
|
||||
public const string RFC1123 = "r";
|
||||
|
||||
public const string File = "yyyy-MM-dd HHmmssfffffff";
|
||||
|
||||
public const string YearMonth = "yyyy/MM";
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace System
|
||||
/// <param name="dt"></param>
|
||||
/// <returns></returns>
|
||||
public static DateTimeOffset GetCurrentMonth(this DateTimeOffset dt)
|
||||
=> new(dt.Year, dt.Month, 1, 0, 0, 0, TimeSpan.Zero);
|
||||
=> new(dt.Year, dt.Month, 1, 0, 0, 0, dt.Offset);
|
||||
|
||||
/// <summary>
|
||||
/// 根据时间日期获取当前月(最后一天)
|
||||
@@ -33,6 +33,6 @@ namespace System
|
||||
/// <param name="dt"></param>
|
||||
/// <returns></returns>
|
||||
public static DateTimeOffset GetCurrentMonthLastDay(this DateTimeOffset dt)
|
||||
=> new DateTimeOffset(dt.Year, dt.Month, 1, 0, 0, 0, TimeSpan.Zero).AddMonths(1).AddDays(-1);
|
||||
=> new DateTimeOffset(dt.Year, dt.Month, 1, 0, 0, 0, dt.Offset).AddMonths(1).AddDays(-1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,5 +113,16 @@ 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,12 +52,14 @@ 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>
|
||||
@@ -226,10 +228,18 @@ namespace System
|
||||
/// </summary>
|
||||
/// <param name="pattern">The wildcard pattern to convert.</param>
|
||||
/// <returns>A regex equivalent of the given wildcard.</returns>
|
||||
public static bool IsWildcard(this string str, string pattern)
|
||||
public static bool IsWildcard(this string str, string pattern, RegexOptions options = RegexOptions.Compiled)
|
||||
=> Regex.IsMatch(str, "^" + Regex.Escape(pattern)
|
||||
.Replace("\\*", ".*")
|
||||
.Replace("\\?", ".") + "$", RegexOptions.Compiled);
|
||||
.Replace("\\?", ".") + "$", options);
|
||||
|
||||
/// <summary>
|
||||
/// 域名表达式
|
||||
/// *表示任意0到多个字符
|
||||
/// </summary>
|
||||
public static bool IsDomainPattern(this string str, string pattern, RegexOptions options = RegexOptions.IgnoreCase)
|
||||
=> Regex.IsMatch(str, Regex.Escape(pattern)
|
||||
.Replace(@"\*", @"[^\.]*"), options);
|
||||
|
||||
#region Compressor
|
||||
|
||||
|
||||
@@ -106,7 +106,6 @@ namespace System
|
||||
Exception = exception;
|
||||
}
|
||||
|
||||
|
||||
public static readonly EventHandler<TaskLog> Occured = (sender, e) =>
|
||||
{
|
||||
const string format = @"Unhandled Exception occured from Task.Forget()
|
||||
|
||||
@@ -117,6 +117,16 @@ 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>> _enum_mime = new(() =>
|
||||
static readonly Lazy<IReadOnlyDictionary<VideoFormat, string>> mEnumMime = new(() =>
|
||||
{
|
||||
var value = new Dictionary<VideoFormat, string>()
|
||||
{
|
||||
@@ -28,31 +28,33 @@ namespace System
|
||||
};
|
||||
return value;
|
||||
});
|
||||
static readonly Lazy<IReadOnlyDictionary<string, VideoFormat>> _mime_enum = new(() =>
|
||||
|
||||
static readonly Lazy<IReadOnlyDictionary<string, VideoFormat>> mMimeEnum = new(() =>
|
||||
{
|
||||
var value = enum_mime.ToDictionary(x => x.Value, x => x.Key, StringComparer.OrdinalIgnoreCase);
|
||||
var value = EnumMime.ToDictionary(x => x.Value, x => x.Key, StringComparer.OrdinalIgnoreCase);
|
||||
return value;
|
||||
});
|
||||
|
||||
static IReadOnlyDictionary<VideoFormat, string> enum_mime => _enum_mime.Value;
|
||||
static IReadOnlyDictionary<string, VideoFormat> mime_enum => _mime_enum.Value;
|
||||
static IReadOnlyDictionary<VideoFormat, string> EnumMime => mEnumMime.Value;
|
||||
|
||||
static IReadOnlyDictionary<string, VideoFormat> MimeEnum => mMimeEnum.Value;
|
||||
|
||||
/// <summary>
|
||||
/// 获取MIME
|
||||
/// </summary>
|
||||
/// <param name="imageFormat"></param>
|
||||
/// <param name="videoFormat"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="ArgumentOutOfRangeException"></exception>
|
||||
public static string GetMIME(this VideoFormat videoFormat)
|
||||
{
|
||||
if (enum_mime.ContainsKey(videoFormat)) return enum_mime[videoFormat];
|
||||
if (EnumMime.ContainsKey(videoFormat)) return EnumMime[videoFormat];
|
||||
throw new ArgumentOutOfRangeException(nameof(videoFormat), videoFormat, null);
|
||||
}
|
||||
|
||||
public static VideoFormat? GetFormat(string? mime)
|
||||
{
|
||||
if (mime == null) return null;
|
||||
if (mime_enum.ContainsKey(mime)) return mime_enum[mime];
|
||||
if (MimeEnum.ContainsKey(mime)) return MimeEnum[mime];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ 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;
|
||||
@@ -40,14 +41,16 @@ namespace System
|
||||
/// </summary>
|
||||
/// <param name="dirPath"></param>
|
||||
/// <param name="noRecursive"></param>
|
||||
public static void DirTryDelete(string dirPath, bool noRecursive = false)
|
||||
public static bool DirTryDelete(string dirPath, bool noRecursive = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
Directory.Delete(dirPath, !noRecursive);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,14 +102,16 @@ namespace System
|
||||
/// <para>通常用于删除缓存</para>
|
||||
/// </summary>
|
||||
/// <param name="filePath"></param>
|
||||
public static void FileTryDelete(string filePath)
|
||||
public static bool FileTryDelete(string filePath)
|
||||
{
|
||||
try
|
||||
{
|
||||
File.Delete(filePath);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,7 +163,7 @@ namespace System
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// (可选)初始化文件系统
|
||||
/// 初始化文件系统
|
||||
/// </summary>
|
||||
/// <param name="getAppDataDirectory">获取应用目录文件夹</param>
|
||||
/// <param name="getCacheDirectory">获取缓存目录文件夹</param>
|
||||
@@ -168,31 +173,119 @@ 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 => Directory.Exists(x) && Directory.EnumerateFileSystemEntries(x).Any());
|
||||
var dict_paths = paths.ToDictionary(x => x, x => ExistsNotEmptyDir(x));
|
||||
|
||||
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
|
||||
{
|
||||
Directory.Move(old_path, path);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
dict_paths[path] = true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
// 跨卷移动失败或其他原因失败,使用旧的目录,并尝试删除创建的空文件夹
|
||||
DirTryDelete(path);
|
||||
if (!DesktopBridge.IsRunningAsUwp)
|
||||
{
|
||||
// 跨卷移动失败或其他原因失败,使用旧的目录,并尝试删除创建的空文件夹
|
||||
DirTryDelete(path);
|
||||
}
|
||||
paths[i] = old_path;
|
||||
}
|
||||
}
|
||||
@@ -211,6 +304,34 @@ 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>
|
||||
@@ -394,16 +515,16 @@ namespace System
|
||||
/// </summary>
|
||||
/// <param name="filePath"></param>
|
||||
/// <returns>单位 字节</returns>
|
||||
public static double GetFileSize(FileInfo fileInfo) => fileInfo.Exists ? fileInfo.Length : 0D;
|
||||
public static decimal GetFileSize(FileInfo fileInfo) => fileInfo.Exists ? fileInfo.Length : 0M;
|
||||
|
||||
/// <summary>
|
||||
/// 获取指定路径的大小
|
||||
/// </summary>
|
||||
/// <param name="dirPath">路径</param>
|
||||
/// <returns>单位 字节</returns>
|
||||
public static double GetDirectorySize(string dirPath)
|
||||
public static decimal GetDirectorySize(string dirPath)
|
||||
{
|
||||
double len = 0D;
|
||||
var len = 0M;
|
||||
// 判断该路径是否存在(是否为文件夹)
|
||||
var isDirectory = IsDirectory(dirPath, out var fileInfo, out var directoryInfo);
|
||||
if (isDirectory.HasValue)
|
||||
@@ -424,12 +545,12 @@ namespace System
|
||||
return len;
|
||||
}
|
||||
|
||||
const double unit = 1024d;
|
||||
static readonly string[] units = new[] { "B", "KB", "MB", "GB", "TB" };
|
||||
const decimal unit = 1024M;
|
||||
static readonly string[] units = new[] { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB", "BB" };
|
||||
|
||||
public static (double length, string unit) GetSize(double length)
|
||||
public static (decimal length, string unit) GetSize(decimal length)
|
||||
{
|
||||
if (length > 0d)
|
||||
if (length > 0M)
|
||||
{
|
||||
for (int i = 0; i < units.Length; i++)
|
||||
{
|
||||
@@ -440,11 +561,11 @@ namespace System
|
||||
}
|
||||
else
|
||||
{
|
||||
return (0, units.First());
|
||||
return (0M, units.First());
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetSizeString(double length)
|
||||
public static string GetSizeString(decimal length)
|
||||
{
|
||||
(length, string unit) = GetSize(length);
|
||||
return $"{length:0.00} {unit}";
|
||||
@@ -460,5 +581,38 @@ 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,6 +25,7 @@ namespace System.Net.Http
|
||||
#endif
|
||||
return UseWebProxy(proxy) ? proxy : null;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
#if NETSTANDARD
|
||||
@@ -62,9 +63,13 @@ 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;
|
||||
}
|
||||
|
||||
@@ -75,14 +80,13 @@ namespace System.Net.Http
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
#if !NETSTANDARD
|
||||
if (handler is SocketsHttpHandler s)
|
||||
{
|
||||
s.Proxy = proxy;
|
||||
if (useProxy && s.UseProxy != useProxy) s.UseProxy = useProxy; // 仅启用代理时修改开关
|
||||
}
|
||||
else
|
||||
#if NETCOREAPP2_1_OR_GREATER
|
||||
if (handler is SocketsHttpHandler s)
|
||||
{
|
||||
s.Proxy = proxy;
|
||||
if (useProxy && s.UseProxy != useProxy) s.UseProxy = useProxy; // 仅启用代理时修改开关
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
if (handler is HttpClientHandler h)
|
||||
{
|
||||
|
||||