Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e136e5a3c | ||
|
|
56bc907ec6 | ||
|
|
bcd00d565f | ||
|
|
2682b548ae | ||
|
|
4ccad101be | ||
|
|
ac63f3cead | ||
|
|
709979c597 | ||
|
|
4435efc1f0 | ||
|
|
79c52389c1 | ||
|
|
b8fa4b6e0e | ||
|
|
8e28762857 | ||
|
|
9311f2bad8 | ||
|
|
93667c4686 | ||
|
|
c9873d660a | ||
|
|
7ee9cc6651 | ||
|
|
1a2f495ce9 | ||
|
|
45764fff62 | ||
|
|
b6bb9c0237 | ||
|
|
1df8039650 | ||
|
|
ad67ca2350 | ||
|
|
5e1dc75485 | ||
|
|
bfc7e8532f | ||
|
|
55f9917c51 | ||
|
|
05e6750892 | ||
|
|
de9ccc5db7 | ||
|
|
5e5c5d8d75 | ||
|
|
81b6ab63d9 | ||
|
|
cdee33f44c | ||
|
|
a93c4df1ad | ||
|
|
f1e5b630e7 | ||
|
|
57bc58dea2 | ||
|
|
79b66c3b35 | ||
|
|
3f3c308156 | ||
|
|
7f7f4c31b1 | ||
|
|
cf981e9d3d | ||
|
|
778f9072a9 | ||
|
|
855c8c295a | ||
|
|
6148cc1c79 | ||
|
|
83690efd5a | ||
|
|
dc487ca09e | ||
|
|
9119b68b6d | ||
|
|
1b59208adf | ||
|
|
b9653f23d0 | ||
|
|
98b9257726 | ||
|
|
a5dc378056 | ||
|
|
bf4df45ba0 | ||
|
|
29e1e79816 | ||
|
|
7d956f5a86 | ||
|
|
bd0eeea8dc | ||
|
|
2e18ae5bfb | ||
|
|
92d87bf922 | ||
|
|
f9384e6f3b | ||
|
|
6324ae6b43 | ||
|
|
054bde6a66 | ||
|
|
9ab7a84165 | ||
|
|
b27818c3be | ||
|
|
eee8da0b3c | ||
|
|
d3ea00697b | ||
|
|
218d3ba532 | ||
|
|
6d0da3244a | ||
|
|
15a6eef4eb | ||
|
|
0c5c910df1 | ||
|
|
3f021ce1ce | ||
|
|
e634eb7080 | ||
|
|
ea712ab193 | ||
|
|
6571e6398c | ||
|
|
6a53613b49 | ||
|
|
c3a9ecaffc | ||
|
|
19a55445c4 | ||
|
|
1704c4837d | ||
|
|
75ae9754ca | ||
|
|
777cec974a | ||
|
|
8f1f04ddea | ||
|
|
a870bb69b3 | ||
|
|
3678a8ff3e | ||
|
|
96734e5bd1 | ||
|
|
158607da27 | ||
|
|
64ec928fef | ||
|
|
22633f2881 | ||
|
|
99e924213c | ||
|
|
55abb91108 | ||
|
|
bf8c060bbb | ||
|
|
f2afcdbd0c | ||
|
|
175d857d2c | ||
|
|
53580be5a0 | ||
|
|
d2ef06cc92 | ||
|
|
acf8373a4d | ||
|
|
7814832034 | ||
|
|
2b228e92b4 | ||
|
|
3d9e392b23 | ||
|
|
37361e1abb | ||
|
|
f7e5419972 | ||
|
|
25c0daafd1 | ||
|
|
615f5ff438 | ||
|
|
09557235c9 | ||
|
|
50cd3edf45 | ||
|
|
108005c9fe | ||
|
|
a23a538f6c | ||
|
|
0c74aaae3e | ||
|
|
236509cc4f | ||
|
|
88d90c2485 | ||
|
|
5c25b7bd80 | ||
|
|
e94fe1969a | ||
|
|
afbac81b63 | ||
|
|
cdf0260b83 | ||
|
|
62d51aff97 | ||
|
|
b1da66c9c2 | ||
|
|
5eb4f158d8 | ||
|
|
e127395211 | ||
|
|
021957ba3f | ||
|
|
6abcd3ddf6 | ||
|
|
a6e6de14e4 | ||
|
|
1753594796 | ||
|
|
38af907cbb | ||
|
|
11266ab461 | ||
|
|
4fbd98ef2b | ||
|
|
591fe9bff4 | ||
|
|
9979241967 | ||
|
|
88bcc121e7 | ||
|
|
1759a04208 | ||
|
|
79c6675479 | ||
|
|
a2e1966773 | ||
|
|
010ab035fb | ||
|
|
ca501006aa | ||
|
|
1e0d6c6de4 | ||
|
|
95647e911c | ||
|
|
05f5e6612f | ||
|
|
e3f5178c04 | ||
|
|
f6b9c26ccc | ||
|
|
dafa44b627 | ||
|
|
0f23f3c388 | ||
|
|
4f4836a8d8 | ||
|
|
6dd4922ea2 | ||
|
|
415a50871e | ||
|
|
54c0cd25d8 | ||
|
|
f057d41333 | ||
|
|
5d848c92e9 | ||
|
|
30ebcce718 | ||
|
|
9d1252485e | ||
|
|
89f2c7e37c | ||
|
|
b91cf81c90 | ||
|
|
fbbada6769 | ||
|
|
246a3b6a97 | ||
|
|
43df3f9f4f | ||
|
|
c95913901f | ||
|
|
12827e7bef | ||
|
|
9c378dcf2a | ||
|
|
fb6eca3489 | ||
|
|
2482a5427f | ||
|
|
1755244f75 | ||
|
|
bb3376d7c9 | ||
|
|
d997e85504 | ||
|
|
b953f65688 | ||
|
|
58d9a3f307 | ||
|
|
e15126a2a4 | ||
|
|
edddc8b757 | ||
|
|
f94f8ed190 | ||
|
|
29fbd52d24 | ||
|
|
69246f21ac | ||
|
|
eca89d8acc | ||
|
|
1215c50739 | ||
|
|
0d1cd9be49 | ||
|
|
e4c2244ec5 | ||
|
|
6fb255c428 | ||
|
|
d66245c689 | ||
|
|
fe7e4abc28 | ||
|
|
7a3efde07b | ||
|
|
21d1d03a3c | ||
|
|
3c8e2c142c | ||
|
|
c696651a42 | ||
|
|
76e1d32bdd | ||
|
|
a89ddccd32 | ||
|
|
18258152e4 | ||
|
|
f28b4ea7ed | ||
|
|
8d3584cd1f | ||
|
|
57da3455b4 | ||
|
|
8cb7bac0f0 | ||
|
|
6e2e7f4ad5 | ||
|
|
9fe1ee7b1f | ||
|
|
ea2d304c95 | ||
|
|
094a7fe814 | ||
|
|
3154d9658a | ||
|
|
a9fdfbe5c9 | ||
|
|
229ce50517 | ||
|
|
184760fcd7 | ||
|
|
0c34fdc135 | ||
|
|
02ae040a2e | ||
|
|
aa29128742 | ||
|
|
f8bf05688b | ||
|
|
1291e7b13f | ||
|
|
e8024fb875 | ||
|
|
648f6b22ff | ||
|
|
66ee4d5002 | ||
|
|
d52e61954b | ||
|
|
f8eea714e8 | ||
|
|
352aa2ad66 | ||
|
|
849f43e5ec | ||
|
|
1dfd9250b0 | ||
|
|
24fd562475 | ||
|
|
c033e853d6 | ||
|
|
4153805a5f | ||
|
|
8b583406a4 | ||
|
|
8d28cc1246 | ||
|
|
125928243d | ||
|
|
44d880b1cc | ||
|
|
2929d7b8b8 | ||
|
|
9fab6a1718 | ||
|
|
78feece7bf | ||
|
|
262797b500 | ||
|
|
6d10b27b31 | ||
|
|
95dd788ede | ||
|
|
3a95dcc4cb | ||
|
|
f6055f1230 | ||
|
|
034cbd083f | ||
|
|
32588e3e36 | ||
|
|
6179816aaa | ||
|
|
1e0d63f5ab | ||
|
|
b7b16ceded | ||
|
|
4a7f419945 | ||
|
|
3a345f5781 | ||
|
|
31b16bec97 | ||
|
|
eaa2908e88 | ||
|
|
9c157c46d8 | ||
|
|
13d6018cf1 | ||
|
|
065c1a1fde | ||
|
|
3d12f64ba4 | ||
|
|
2352b9e083 | ||
|
|
5bf26e39b4 | ||
|
|
ed0669eaf5 | ||
|
|
7a1134425a | ||
|
|
650f623588 | ||
|
|
7bcc264c45 | ||
|
|
ed074ff8c0 | ||
|
|
bcecb4c13d | ||
|
|
f3235510b5 | ||
|
|
6b3db82538 | ||
|
|
0355a08020 | ||
|
|
0e81951016 | ||
|
|
0d85c60555 | ||
|
|
c81e431324 | ||
|
|
85144aaf21 | ||
|
|
10731b173b | ||
|
|
1370a04e2d | ||
|
|
b5b8b6fa20 | ||
|
|
4de7587466 | ||
|
|
b563718fbf | ||
|
|
bf399f6fd3 | ||
|
|
3d335d3906 | ||
|
|
66832affdd | ||
|
|
680fb876ce | ||
|
|
503c5f425b | ||
|
|
ba2d6888f8 | ||
|
|
baba93152c | ||
|
|
45a30c0bff | ||
|
|
ea08c28362 | ||
|
|
bbcf171c48 | ||
|
|
6a8cd687a7 | ||
|
|
9848fa52e7 | ||
|
|
510cf6d3ca | ||
|
|
087f85d8d2 | ||
|
|
653525eeed | ||
|
|
0bbc561fc1 | ||
|
|
dcebb03c8a | ||
|
|
b952be27c9 | ||
|
|
32ffa2f179 | ||
|
|
3eb03d4347 | ||
|
|
441a5a5be6 | ||
|
|
50cd52d5ca | ||
|
|
12393aa4ec | ||
|
|
11c1320ce1 | ||
|
|
9ae70b82c7 | ||
|
|
8053629ddd | ||
|
|
97e946a21b | ||
|
|
56951ce078 | ||
|
|
a927b8f4f4 | ||
|
|
17c4a077bf | ||
|
|
97e5748de0 | ||
|
|
38bd825718 | ||
|
|
6d07859245 | ||
|
|
934131da94 | ||
|
|
50cf638ee7 | ||
|
|
76c1866108 | ||
|
|
632bb1105b | ||
|
|
f11d651985 | ||
|
|
1f97f1cfe5 | ||
|
|
10766a2a92 | ||
|
|
589b62f8d3 | ||
|
|
d14b79cf47 | ||
|
|
7fc28ab5d8 | ||
|
|
48238531d8 | ||
|
|
01f1be61bd | ||
|
|
54d381d600 | ||
|
|
d07ae46afc | ||
|
|
f7abf4e9cd | ||
|
|
15ad1a5c2d | ||
|
|
9a83489531 | ||
|
|
851d385514 | ||
|
|
7b8c016e57 | ||
|
|
4709e2060d | ||
|
|
bd294f3edf | ||
|
|
0c6834cd42 | ||
|
|
dadb7ae01d | ||
|
|
e2f240946e | ||
|
|
8a208b05d9 | ||
|
|
586f0de609 | ||
|
|
5ec326baa1 | ||
|
|
13975d60bf | ||
|
|
6482d0dc47 | ||
|
|
54ba10aee8 | ||
|
|
d9030f2223 | ||
|
|
061117342c | ||
|
|
fd3b45cdb4 | ||
|
|
17649352aa | ||
|
|
666b145328 | ||
|
|
b4aaec51b2 | ||
|
|
0a4eace40a | ||
|
|
3841580596 | ||
|
|
c102c3c9a4 | ||
|
|
0869c3610f | ||
|
|
877e9e6dc6 | ||
|
|
dbdc97805e | ||
|
|
2ec6a033b9 | ||
|
|
57da5ab908 | ||
|
|
6fe0e5a1e5 | ||
|
|
8110090ace | ||
|
|
97b8246275 | ||
|
|
fe673959a5 | ||
|
|
7b247ac0d7 | ||
|
|
54493f5969 | ||
|
|
ae43cd8906 | ||
|
|
c66a427e53 | ||
|
|
b37864dd18 | ||
|
|
36ac02b4f5 | ||
|
|
39d78529c2 | ||
|
|
1499aa4086 | ||
|
|
0344682186 | ||
|
|
311c678312 | ||
|
|
5739794136 | ||
|
|
d2fb620b90 | ||
|
|
d672b989d5 | ||
|
|
4b443e7178 | ||
|
|
94e4977341 | ||
|
|
85bc693e3e | ||
|
|
555a812e39 | ||
|
|
8f45f3b031 | ||
|
|
0db4a6a69e | ||
|
|
13a6cf0bb5 | ||
|
|
c46e3bbb7c | ||
|
|
b70806c3c7 | ||
|
|
ec7e36dd61 | ||
|
|
60c8395ec9 | ||
|
|
cfef0c1a1a | ||
|
|
431fe98ee9 | ||
|
|
57f8bda1b8 | ||
|
|
3fb64c6eb9 | ||
|
|
085c25e69d | ||
|
|
de9d80156d | ||
|
|
fd50522341 | ||
|
|
55b95cb9c7 | ||
|
|
53f71f8d2b | ||
|
|
0c76d4dcdd | ||
|
|
8c13a1e645 | ||
|
|
25ee6130f7 | ||
|
|
310d45dab2 | ||
|
|
d6f14268fb | ||
|
|
6aacfec4b6 | ||
|
|
c5400dcd8c | ||
|
|
5c2fca9db0 | ||
|
|
01eb6e15e1 | ||
|
|
5287ab24d5 | ||
|
|
1a645d7d64 | ||
|
|
6df16335bc | ||
|
|
88b95350bc | ||
|
|
a0983dd59f | ||
|
|
1d9180ae88 | ||
|
|
fe19ba505d | ||
|
|
8049043c70 | ||
|
|
02717fefb0 | ||
|
|
057d5c0a41 | ||
|
|
b34c5298d3 | ||
|
|
5d34ada716 | ||
|
|
50a2933612 | ||
|
|
135fde3471 | ||
|
|
9f01e1ffaa | ||
|
|
f90f62d03d | ||
|
|
b1417cd53a | ||
|
|
06497e92eb | ||
|
|
7f9ca3690e | ||
|
|
afb9ff9b17 | ||
|
|
d72a4970ea | ||
|
|
913a5385b6 | ||
|
|
2118ad8be1 | ||
|
|
ad912ab1e0 | ||
|
|
f581accdad | ||
|
|
59450b720a | ||
|
|
bc07b8de54 | ||
|
|
b1c4adf64c | ||
|
|
bc20fdb35a | ||
|
|
594dfd28ac | ||
|
|
a021462411 | ||
|
|
f55f6bf95c | ||
|
|
e7a254c377 | ||
|
|
59a35e45e4 | ||
|
|
6adce8e71d | ||
|
|
f620722113 | ||
|
|
6c3f3b33ae | ||
|
|
e23c0a901d | ||
|
|
832c115e79 | ||
|
|
7b510f1536 | ||
|
|
de7ed70517 | ||
|
|
b438164b52 | ||
|
|
f962d36894 | ||
|
|
162a809840 | ||
|
|
c1016614db | ||
|
|
cad5ef60a9 | ||
|
|
cb9d4b31e9 | ||
|
|
ff87958dc0 | ||
|
|
0306732eea | ||
|
|
727d429ca7 | ||
|
|
3a41b36bda | ||
|
|
7776192c5a | ||
|
|
97e3ebfc20 | ||
|
|
453334ded8 | ||
|
|
b5d5bd0b53 | ||
|
|
7b5a06ba24 | ||
|
|
a65bd810a5 | ||
|
|
6b01cffc29 | ||
|
|
d10fc62a00 | ||
|
|
858af3f8b6 | ||
|
|
3e8cb72c55 |
@@ -204,26 +204,26 @@ dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.style = 帕斯
|
||||
|
||||
dotnet_naming_symbols.interface.applicable_kinds = interface
|
||||
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.interface.required_modifiers =
|
||||
dotnet_naming_symbols.interface.required_modifiers =
|
||||
|
||||
dotnet_naming_symbols.类型.applicable_kinds = class, struct, interface, enum
|
||||
dotnet_naming_symbols.类型.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.类型.required_modifiers =
|
||||
dotnet_naming_symbols.类型.required_modifiers =
|
||||
|
||||
dotnet_naming_symbols.非字段成员.applicable_kinds = property, event, method
|
||||
dotnet_naming_symbols.非字段成员.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.非字段成员.required_modifiers =
|
||||
dotnet_naming_symbols.非字段成员.required_modifiers =
|
||||
|
||||
# 命名样式
|
||||
|
||||
dotnet_naming_style.帕斯卡拼写法.required_prefix =
|
||||
dotnet_naming_style.帕斯卡拼写法.required_suffix =
|
||||
dotnet_naming_style.帕斯卡拼写法.word_separator =
|
||||
dotnet_naming_style.帕斯卡拼写法.required_prefix =
|
||||
dotnet_naming_style.帕斯卡拼写法.required_suffix =
|
||||
dotnet_naming_style.帕斯卡拼写法.word_separator =
|
||||
dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case
|
||||
|
||||
dotnet_naming_style.以_i_开始.required_prefix = I
|
||||
dotnet_naming_style.以_i_开始.required_suffix =
|
||||
dotnet_naming_style.以_i_开始.word_separator =
|
||||
dotnet_naming_style.以_i_开始.required_suffix =
|
||||
dotnet_naming_style.以_i_开始.word_separator =
|
||||
dotnet_naming_style.以_i_开始.capitalization = pascal_case
|
||||
|
||||
# IDE0010: 添加缺失的事例
|
||||
@@ -428,4 +428,31 @@ dotnet_diagnostic.SA1501.severity = silent
|
||||
dotnet_diagnostic.SA1500.severity = silent
|
||||
|
||||
# SA1518: Use line endings correctly at end of file
|
||||
dotnet_diagnostic.SA1518.severity = silent
|
||||
dotnet_diagnostic.SA1518.severity = silent
|
||||
|
||||
# SA1118: Parameter should not span multiple lines
|
||||
dotnet_diagnostic.SA1118.severity = silent
|
||||
|
||||
# SA1214: Readonly fields should appear before non-readonly fields
|
||||
dotnet_diagnostic.SA1214.severity = silent
|
||||
|
||||
# SA1309: Field names should not begin with underscore
|
||||
dotnet_diagnostic.SA1309.severity = silent
|
||||
|
||||
# SA1027: Use tabs correctly
|
||||
dotnet_diagnostic.SA1027.severity = silent
|
||||
|
||||
# SA1306: Field names should begin with lower-case letter
|
||||
dotnet_diagnostic.SA1306.severity = silent
|
||||
|
||||
# SA1643: Destructor summary documentation should begin with standard text
|
||||
dotnet_diagnostic.SA1643.severity = silent
|
||||
|
||||
# SA1303: Const field names should begin with upper-case letter
|
||||
dotnet_diagnostic.SA1303.severity = silent
|
||||
|
||||
# SA1300: Element should begin with upper-case letter
|
||||
dotnet_diagnostic.SA1300.severity = silent
|
||||
|
||||
# SA1316: Tuple element names should use correct casing
|
||||
dotnet_diagnostic.SA1316.severity = silent
|
||||
|
||||
@@ -10,7 +10,9 @@ assignees: ''
|
||||
### 🐛 描述(Description)
|
||||
|
||||
<!--
|
||||
详细地描述 bug,让大家都能理解
|
||||
发布前请先尝试在 Issuse 内搜索一下你的问题是否已经被提出过,
|
||||
详细地描述 bug,让大家都能理解,请一定确定你所要发布的内容是一个 Bug,如果不确定请发 Question
|
||||
Before posting, please try searching in Issuse to see if your question has already been asked,
|
||||
Describe the bug in detail so that everyone can understand it
|
||||
-->
|
||||
|
||||
|
||||
@@ -49,9 +49,14 @@ jobs:
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install android
|
||||
|
||||
# - name: Install Maui(Windows)
|
||||
# if: matrix.os == 'windows-latest'
|
||||
# run: dotnet workload install maui
|
||||
- name: Install Maui(Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install maui
|
||||
|
||||
- name: Install Maui(Unix)
|
||||
# if: ${{ matrix.os == 'macOS-latest' || matrix.os == 'ubuntu-latest' }}
|
||||
if: matrix.os == 'macOS-latest'
|
||||
run: sudo dotnet workload install maui
|
||||
|
||||
- name: Verify dotnet info
|
||||
run: dotnet --info
|
||||
@@ -139,6 +144,22 @@ jobs:
|
||||
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
|
||||
|
||||
- name: Upload fd-win-x86 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_win_x86_fde_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_win_x86_fde_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
|
||||
- name: Upload win-x86 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_win_x86_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_win_x86_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
|
||||
- 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' }}
|
||||
|
||||
@@ -40,10 +40,23 @@ jobs:
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install macos
|
||||
|
||||
- name: Install Android SDK(Unix)
|
||||
if: ${{ matrix.os == 'macOS-latest' || matrix.os == 'ubuntu-latest' }}
|
||||
run: sudo dotnet workload install android
|
||||
|
||||
- name: Install Android SDK(Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install android
|
||||
|
||||
- name: Install Maui(Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install maui
|
||||
|
||||
- name: Install Maui(Unix)
|
||||
# if: ${{ matrix.os == 'macOS-latest' || matrix.os == 'ubuntu-latest' }}
|
||||
if: matrix.os == 'macOS-latest'
|
||||
run: sudo dotnet workload install maui
|
||||
|
||||
- name: Verify dotnet info
|
||||
run: dotnet --info
|
||||
|
||||
@@ -111,6 +124,7 @@ jobs:
|
||||
run: .\packaging\build.ps1 -version ${{ steps.tag.outputs.tag }} -configuration ${{ env.Configuration }} -isPublish $true
|
||||
env:
|
||||
Token: ${{ secrets.PUBLISH_TOKEN }}
|
||||
WIN_SIGN_PFX_PWD: ${{ secrets.WIN_SIGN_PFX_PWD }}
|
||||
|
||||
- name: Package fd-win-x64 7z
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
@@ -144,6 +158,38 @@ jobs:
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_win_x64_v${{ steps.tag.outputs.tag }}.exe" "${env:PublishFilePath}"
|
||||
Write-Output "exe_win_x64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x64_v${{ steps.tag.outputs.tag }}.exe)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package fd-win-x86 7z
|
||||
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}_win_x86_fde_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "fd_win_x86_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x86_fde_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package fd-win-x86 exe
|
||||
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}_win_x86_fde_v${{ steps.tag.outputs.tag }}.exe" "${env:PublishFilePath}"
|
||||
Write-Output "exe_fd_win_x86_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x86_fde_v${{ steps.tag.outputs.tag }}.exe)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package win-x86 7z
|
||||
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}_win_x86_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "win_x86_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x86_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package win-x86 exe
|
||||
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}_win_x86_v${{ steps.tag.outputs.tag }}.exe" "${env:PublishFilePath}"
|
||||
Write-Output "exe_win_x86_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x86_v${{ steps.tag.outputs.tag }}.exe)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package osx-x64 7z
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
@@ -237,6 +283,11 @@ 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 }}_win_x86_v${{ steps.tag.outputs.tag }}.7z</sub> | <sub>${{ env.win_x86_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_win_x86_fde_v${{ steps.tag.outputs.tag }}.7z</sub> | <sub>${{ env.fd_win_x86_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_win_x86_v${{ steps.tag.outputs.tag }}.exe</sub> | <sub>${{ env.exe_win_x86_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_win_x86_fde_v${{ steps.tag.outputs.tag }}.exe</sub> | <sub>${{ env.exe_fd_win_x86_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> |
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.31729.503
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Native", "src\Avalonia.Native\Avalonia.Native.csproj", "{6D1B84EF-D58A-41B1-A442-249FBA9720CD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Themes.Default", "src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj", "{61A4D91B-1C05-444C-B587-353BAA582DF3}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Themes.Fluent", "src\Avalonia.Themes.Fluent\Avalonia.Themes.Fluent.csproj", "{690B15C0-F622-443E-B793-BDD6AF2DCDB2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Win32", "src\Avalonia.Win32\Avalonia.Win32.csproj", "{4A6AD260-611E-4106-8E91-16750DA76A75}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.X11", "src\Avalonia.X11\Avalonia.X11.csproj", "{7B75CDE0-3A5C-4433-A8AF-78431ED8B397}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{6D1B84EF-D58A-41B1-A442-249FBA9720CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6D1B84EF-D58A-41B1-A442-249FBA9720CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6D1B84EF-D58A-41B1-A442-249FBA9720CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6D1B84EF-D58A-41B1-A442-249FBA9720CD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{61A4D91B-1C05-444C-B587-353BAA582DF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{61A4D91B-1C05-444C-B587-353BAA582DF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{61A4D91B-1C05-444C-B587-353BAA582DF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{61A4D91B-1C05-444C-B587-353BAA582DF3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{690B15C0-F622-443E-B793-BDD6AF2DCDB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{690B15C0-F622-443E-B793-BDD6AF2DCDB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{690B15C0-F622-443E-B793-BDD6AF2DCDB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{690B15C0-F622-443E-B793-BDD6AF2DCDB2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4A6AD260-611E-4106-8E91-16750DA76A75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4A6AD260-611E-4106-8E91-16750DA76A75}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4A6AD260-611E-4106-8E91-16750DA76A75}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4A6AD260-611E-4106-8E91-16750DA76A75}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7B75CDE0-3A5C-4433-A8AF-78431ED8B397}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7B75CDE0-3A5C-4433-A8AF-78431ED8B397}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7B75CDE0-3A5C-4433-A8AF-78431ED8B397}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7B75CDE0-3A5C-4433-A8AF-78431ED8B397}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {E3C313BF-6EBC-4070-99BC-C86656B6C8CE}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,11 +1,13 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<NoWarn>NU1507</NoWarn>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<TrimMode>link</TrimMode>
|
||||
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
|
||||
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||
<CheckEolTargetFramework>false</CheckEolTargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" Exists('$(MSBuildProjectDirectory)\..\..\Unicorn.snk') ">
|
||||
|
||||
@@ -1,65 +1,48 @@
|
||||
<Project>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('net6.0')) ">
|
||||
<!-- Microsoft.Extensions.* & AspNetCore & EntityFrameworkCore(NET60) -->
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
<!--<PackageVersion Include="Microsoft.Extensions.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" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.7" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.7" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.7" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.7" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.7" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.7" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.7" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.7" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="6.0.7" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.7" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.7" />
|
||||
</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" />
|
||||
<!--<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="3.1.27" />-->
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.27" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.27" />
|
||||
</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" />
|
||||
<PackageVersion Include="Z.EntityFramework.Plus.EFCore" Version="6.14.3" />
|
||||
|
||||
<!-- 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" />
|
||||
@@ -85,88 +68,97 @@
|
||||
<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.Memory" Version="4.5.5" />
|
||||
<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.NET.Test.Sdk" Version="17.2.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" />
|
||||
|
||||
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Primitives" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
<!--<PackageVersion Include="CommunityToolkit.Mvvm" Version="7.1.2" />-->
|
||||
<PackageVersion Include="System.Text.Encoding.CodePages" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Diagnostics.PerformanceCounter" Version="6.0.1" />
|
||||
|
||||
<!-- 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="Microsoft.AppCenter" Version="4.5.1" />
|
||||
<PackageVersion Include="Microsoft.AppCenter.Analytics" Version="4.5.1" />
|
||||
<PackageVersion Include="Microsoft.AppCenter.Crashes" Version="4.5.1" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter" Version="4.5.1" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter.Analytics" Version="4.5.1" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter.Crashes" Version="4.5.1" />
|
||||
<!--<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" />
|
||||
<PackageVersion Include="System.Management" Version="6.0.0" />
|
||||
|
||||
<!-- Xamarin -->
|
||||
<PackageVersion Include="Xamarin.Essentials" Version="1.7.2" />
|
||||
<PackageVersion Include="Xamarin.Essentials" Version="1.7.3" />
|
||||
<!-- Xamarin.Forms -->
|
||||
<PackageVersion Include="Xamarin.Forms" Version="5.0.0.2401" />
|
||||
<PackageVersion Include="Xamarin.Forms.Visual.Material" Version="5.0.0.2401" />
|
||||
<PackageVersion Include="Xamarin.Forms" Version="5.0.0.2478" />
|
||||
<PackageVersion Include="Xamarin.Forms.Visual.Material" Version="5.0.0.2478" />
|
||||
<PackageVersion Include="Xam.Plugins.Forms.ImageCircle" Version="3.1.1.1-beta" />
|
||||
|
||||
|
||||
<!-- NUnit & NUnit.Xamarin & Moq -->
|
||||
<PackageVersion Include="NUnit" Version="3.13.3" />
|
||||
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
<PackageVersion Include="nunit.xamarin" Version="3.6.1" />
|
||||
<PackageVersion Include="PCLStorage" Version="1.0.2" />
|
||||
<PackageVersion Include="Moq" Version="4.17.2" />
|
||||
<PackageVersion Include="Moq" Version="4.18.1" />
|
||||
|
||||
<!-- NLog -->
|
||||
<PackageVersion Include="NLog" Version="4.7.15" />
|
||||
<PackageVersion Include="NLog.Extensions.Logging" Version="1.7.4" />
|
||||
<PackageVersion Include="NLog.Web.AspNetCore" Version="4.14.0" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.NLog.Web.AspNetCore" Version="4.14.0" />
|
||||
<PackageVersion Include="NLog" Version="5.0.1" />
|
||||
<PackageVersion Include="NLog.Extensions.Logging" Version="5.0.1" />
|
||||
<PackageVersion Include="NLog.Web.AspNetCore" Version="5.1.0" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.NLog.Web.AspNetCore" Version="5.0.0" />
|
||||
|
||||
<!-- ReactiveUI -->
|
||||
<PackageVersion Include="System.Reactive" Version="5.0.0" />
|
||||
<PackageVersion Include="Splat" Version="14.2.8" />
|
||||
<PackageVersion Include="DynamicData" Version="7.6.7" />
|
||||
<PackageVersion Include="ReactiveUI" Version="18.0.7" />
|
||||
<!--<PackageVersion Include="ReactiveUI.Fody" Version="17.1.50" /> -->
|
||||
<PackageVersion Include="ReactiveUI.XamForms" Version="18.0.7" />
|
||||
<PackageVersion Include="ReactiveUI.AndroidX" Version="18.0.7" />
|
||||
|
||||
<PackageVersion Include="Splat" Version="14.4.1" />
|
||||
<PackageVersion Include="DynamicData" Version="7.9.7" />
|
||||
<PackageVersion Include="ReactiveUI" Version="18.3.1" />
|
||||
<PackageVersion Include="ReactiveUI.Fody" Version="18.3.1" />
|
||||
<PackageVersion Include="ReactiveUI.XamForms" Version="18.3.1" />
|
||||
<PackageVersion Include="ReactiveUI.AndroidX" Version="18.3.1" />
|
||||
<PackageVersion Include="ReactiveUI.Maui" Version="18.3.1" />
|
||||
<!-- 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" />
|
||||
<!-- https://github.com/AvaloniaUI/Avalonia/blob/master/build/HarfBuzzSharp.props -->
|
||||
<PackageVersion Include="HarfBuzzSharp" Version="2.8.2.1-preview.91" />
|
||||
<PackageVersion Include="HarfBuzzSharp.NativeAssets.Linux" Version="2.8.2.1-preview.91" />
|
||||
<!-- https://github.com/AvaloniaUI/Avalonia/blob/master/build/SkiaSharp.props -->
|
||||
<PackageVersion Include="SkiaSharp" Version="2.88.1-preview.91" />
|
||||
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="2.88.1-preview.91" />
|
||||
|
||||
<!-- 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" />
|
||||
<PackageVersion Include="AutoMapper" Version="11.0.1" />
|
||||
<PackageVersion Include="AutoMapper.Collection" Version="8.0.0" />
|
||||
<PackageVersion Include="AutoMapper.Collection.EntityFrameworkCore" Version="8.0.0" />
|
||||
<PackageVersion Include="AutoMapper.Extensions.ExpressionMapping" Version="5.1.0" />
|
||||
<PackageVersion Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="11.0.0" />
|
||||
|
||||
<!-- QRCode -->
|
||||
<!--<PackageVersion Include="QRCoder" Version="1.4.2" />-->
|
||||
<PackageVersion Include="Net.Codecrete.QrCodeGenerator" Version="2.0.1" />
|
||||
<PackageVersion Include="Net.Codecrete.QrCodeGenerator" Version="2.0.3" />
|
||||
|
||||
<!-- 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" />-->
|
||||
<PackageVersion Include="NotifyIcon.Base" Version="1.1.0" />
|
||||
<!--<PackageVersion Include="NotifyIcon.Linux" Version="1.1.0" />-->
|
||||
<!--<PackageVersion Include="NotifyIcon.Mac" Version="1.1.0" />-->
|
||||
<PackageVersion Include="NotifyIcon.Windows" Version="1.1.0" />
|
||||
<!--<PackageVersion Include="GtkSharp" Version="3.24.24.38" />-->
|
||||
|
||||
<!-- Compression -->
|
||||
<PackageVersion Include="SharpZipLib" Version="1.3.3" />
|
||||
<PackageVersion Include="Squid-Box.SevenZipSharp.Lite" Version="1.5.0.366" />
|
||||
<PackageVersion Include="7-Zip.NativeAssets.Win32" Version="21.7.0-preview.1" />
|
||||
<PackageVersion Include="ZstdNet" Version="1.4.5" />
|
||||
|
||||
<!-- Algorithm -->
|
||||
@@ -174,8 +166,8 @@
|
||||
<PackageVersion Include="gfoidl.Base64" Version="1.1.1" />
|
||||
|
||||
<!--Command Line Tools-->
|
||||
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta3.22114.1" />
|
||||
<PackageVersion Include="System.CommandLine.NamingConventionBinder" Version="2.0.0-beta3.22114.1" />
|
||||
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
|
||||
<PackageVersion Include="System.CommandLine.NamingConventionBinder" Version="2.0.0-beta4.22272.1" />
|
||||
|
||||
<!-- Pinyin -->
|
||||
<PackageVersion Include="TinyPinyin.Net" Version="1.0.2" />
|
||||
@@ -185,39 +177,39 @@
|
||||
<PackageVersion Include="TaskScheduler" Version="2.10.1" />
|
||||
|
||||
<!-- Swagger -->
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.3.1" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="6.3.1" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.Newtonsoft" Version="6.3.1" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.Swashbuckle.AspNetCore" Version="6.3.0" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.Swashbuckle.AspNetCore.Annotations" Version="6.3.0" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.Swashbuckle.AspNetCore.Newtonsoft" Version="6.3.0" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.4.0" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="6.4.0" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.Newtonsoft" Version="6.4.0" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.Swashbuckle.AspNetCore" Version="6.3.1" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.Swashbuckle.AspNetCore.Annotations" Version="6.3.1" />
|
||||
<PackageVersion Include="AspNetCore2.NETStandard.Swashbuckle.AspNetCore.Newtonsoft" Version="6.3.1" />
|
||||
|
||||
<!-- Pay -->
|
||||
<!--<PackageVersion Include="AlipaySDKNet.Standard" Version="4.6.109" />-->
|
||||
|
||||
<!-- Excel -->
|
||||
<PackageVersion Include="NPOI" Version="2.5.5" />
|
||||
<PackageVersion Include="NPOI" Version="2.5.6" />
|
||||
|
||||
<!-- Github API -->
|
||||
<PackageVersion Include="Octokit" Version="0.50.0" />
|
||||
<PackageVersion Include="Octokit" Version="1.0.0" />
|
||||
|
||||
<!-- ORM -->
|
||||
<PackageVersion Include="sqlite-net-pcl" Version="1.8.116" />
|
||||
<PackageVersion Include="SQLitePCLRaw.bundle_green" Version="2.1.0-pre20220318192836" />
|
||||
<PackageVersion Include="SQLitePCLRaw.bundle_green" Version="2.1.0" />
|
||||
|
||||
<!-- MonoMac(NETSTANDARD) -->
|
||||
<PackageVersion Include="MonoMac.NetStandard" Version="0.0.4" />
|
||||
|
||||
<!-- .NET Compat -->
|
||||
<PackageVersion Include="OperatingSystem2" Version="1.4.3" />
|
||||
<PackageVersion Include="JustArchiNET.Madness" Version="3.5.2" />
|
||||
<PackageVersion Include="OperatingSystem2" Version="2.0.0" />
|
||||
<PackageVersion Include="JustArchiNET.Madness" Version="3.7.0" />
|
||||
|
||||
<!-- Serialize -->
|
||||
<PackageVersion Include="MessagePack" Version="2.3.85" />
|
||||
<PackageVersion Include="MessagePack" Version="2.4.35" />
|
||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
|
||||
<!-- Html Parser -->
|
||||
<PackageVersion Include="HtmlAgilityPack" Version="1.11.42" />
|
||||
<PackageVersion Include="HtmlAgilityPack" Version="1.11.43" />
|
||||
|
||||
<!-- Clipboard -->
|
||||
<PackageVersion Include="TextCopy" Version="6.1.0" />
|
||||
@@ -235,7 +227,8 @@
|
||||
<PackageVersion Include="Fleck" Version="1.2.0" />
|
||||
|
||||
<!-- DNS -->
|
||||
<PackageVersion Include="DnsClient" Version="1.6.0" />
|
||||
<PackageVersion Include="DnsClient" Version="1.6.1" />
|
||||
<PackageVersion Include="DNS" Version="7.0.0" />
|
||||
|
||||
<!-- Cryptographic Algorithms & Protocols -->
|
||||
<PackageVersion Include="Portable.BouncyCastle" Version="1.9.0" />
|
||||
@@ -244,24 +237,30 @@
|
||||
<PackageVersion Include="Polly" Version="7.2.3" />
|
||||
|
||||
<!--Avalonia Start-->
|
||||
<PackageVersion Include="Avalonia" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.Desktop" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.Skia" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.Diagnostics" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.ReactiveUI" Version="0.10.13" />
|
||||
<!--<PackageVersion Include="Avalonia.Direct2D1" Version="0.10.13" />-->
|
||||
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="0.10.13" />
|
||||
<PackageVersion Include="Avalonia.Xaml.Behaviors" Version="0.10.13.3" />
|
||||
<PackageVersion Include="Avalonia" Version="0.10.17" />
|
||||
<PackageVersion Include="Avalonia.Desktop" Version="0.10.17" />
|
||||
<PackageVersion Include="Avalonia.Skia" Version="0.10.17" />
|
||||
<PackageVersion Include="Avalonia.Diagnostics" Version="0.10.17" />
|
||||
<PackageVersion Include="Avalonia.ReactiveUI" Version="0.10.17" />
|
||||
<!--<PackageVersion Include="Avalonia.Direct2D1" Version="0.10.16" />-->
|
||||
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="0.10.17" />
|
||||
<PackageVersion Include="Avalonia.Xaml.Behaviors" Version="0.10.17" />
|
||||
<!--<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="FluentAvaloniaUI" Version="1.4.1" />-->
|
||||
<PackageVersion Include="LiveChartsCore.SkiaSharpView.Avalonia" Version="2.0.0-beta.330" />
|
||||
<PackageVersion Include="JumpLists.Win32.Avalonia" Version="1.0.0" />
|
||||
<PackageVersion Include="Avalonia.Native" Version="0.10.17" />
|
||||
<PackageVersion Include="Avalonia.Win32" Version="0.10.17" />
|
||||
<PackageVersion Include="Avalonia.X11" Version="0.10.17" />
|
||||
<!--<PackageVersion Include="Avalonia.HtmlRenderer" Version="0.10.0" />-->
|
||||
<PackageVersion Include="WebView2.Avalonia" Version="1.0.1264.42-preview.220713.10" />
|
||||
<!--Avalonia End-->
|
||||
|
||||
<!-- Xamarin.Android -->
|
||||
<PackageVersion Include="Xamarin.Build.Download" Version="0.11.1" />
|
||||
<PackageVersion Include="Xamarin.Google.Dagger" Version="2.39.1" />
|
||||
<PackageVersion Include="Xamarin.Build.Download" Version="0.11.2" />
|
||||
<PackageVersion Include="Xamarin.Google.Dagger" Version="2.40.5" />
|
||||
<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" />
|
||||
@@ -274,40 +273,53 @@
|
||||
<!-- 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" />
|
||||
<PackageVersion Include="Xamarin.KotlinX.Coroutines.Core" Version="1.6.2.1" />
|
||||
<PackageVersion Include="Xamarin.KotlinX.Coroutines.Android" Version="1.6.2.1" />
|
||||
<PackageVersion Include="Xamarin.Android.ReactiveX.RxJava3.RxJava" Version="3.1.5.1" />
|
||||
|
||||
<!-- 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" />-->
|
||||
<PackageVersion Include="Xamarin.AndroidX.Migration" Version="1.0.10" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.AppCompat" Version="1.4.2.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Emoji.AppCompat" Version="1.1.0.9" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Fragment" Version="1.4.1.2" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.RecyclerView" Version="1.2.1.7" />
|
||||
<PackageVersion Include="Xamarin.Google.Android.Material" Version="1.6.1.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.SwipeRefreshLayout" Version="1.1.0.9" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ConstraintLayout" Version="2.1.4.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Navigation.UI" Version="2.4.2.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Navigation.Fragment" Version="2.4.2.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ViewPager2" Version="1.0.0.16" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Activity" Version="1.4.0.4" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Biometric" Version="1.1.0.10" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ExifInterface" Version="1.3.3.6" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Legacy.Support.Core.UI" Version="1.0.0.15" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="2.4.1.2" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.Camera2" Version="1.1.0-beta02" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.Lifecycle" Version="1.1.0-beta02" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.View" Version="1.1.0-beta02" />
|
||||
<!--<PackageVersion Include="Xamarin.AndroidX.Window" Version="1.0.0.9" />-->
|
||||
<PackageVersion Include="Xamarin.AndroidX.WebKit" Version="1.4.0.8" />
|
||||
|
||||
<!-- Xamarin.iOS -->
|
||||
<PackageVersion Include="Toast.iOS" Version="1.2.0" />
|
||||
|
||||
<!-- UWP -->
|
||||
<PackageVersion Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.2" />
|
||||
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="1.1.3" />
|
||||
|
||||
<!-- Code Style -->
|
||||
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.406" />
|
||||
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.435" />
|
||||
|
||||
<!-- Quartz -->
|
||||
<PackageVersion Include="Quartz.AspNetCore" Version="3.4.0" />
|
||||
|
||||
<!-- Yet Another Reverse Proxy -->
|
||||
<PackageVersion Include="Yarp.ReverseProxy" Version="1.1.1" />
|
||||
|
||||
<!-- WinDivert -->
|
||||
<PackageVersion Include="Aigio.WinDivertSharp" Version="1.4.4.3" />
|
||||
|
||||
<!-- ArchiSteamFarm -->
|
||||
<PackageVersion Include="ArchiSteamFarm.Library" Version="5.2.6.3-preview.220608" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<h1 align="center">Steam++ Tools 🧰</h1>
|
||||
<h1 align="center">Watt Toolkit 🧰 (Former name Steam++)</h1>
|
||||
|
||||
<div align="center">
|
||||
|
||||
English | [简体中文](./README.md)
|
||||
|
||||
"Steam++" is an open source cross-platform multi-purpose game toolkit, most of its features require you to download and install Steam to use it.
|
||||
"Watt Toolkit" 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)
|
||||
@@ -24,45 +24,52 @@ English | [简体中文](./README.md)
|
||||
[](https://actions-badge.atrox.dev/BeyondDimension/SteamTools/goto?ref=develop)
|
||||
[](https://github.com/BeyondDimension/SteamTools)
|
||||
[](https://gitee.com/rmbgame/SteamTools)
|
||||
</div>
|
||||
|
||||
<div align="center"><img src="./resources/screenshots.en.jpg" /></div>
|
||||
[](https://ko-fi.com/rmbgame)
|
||||
[](https://www.patreon.com/rmbgame)
|
||||
[](https://space.bilibili.com/797215)
|
||||
|
||||
<img src="./resources/screenshot-1.en.webp" width="800" />
|
||||
<br/>
|
||||
<br/>
|
||||
<img src="./resources/screenshot-android.en.png" width="800" />
|
||||
</div>
|
||||
|
||||
## 🚀 Download channel
|
||||
- [GitHub Releases](https://github.com/BeyondDimension/SteamTools/releases)
|
||||
- [Gitee Releases](https://gitee.com/rmbgame/SteamTools/releases)
|
||||
- [Official WebSite](https://steampp.net)
|
||||
- [Arch Linux Package](https://aur.archlinux.org/packages/steam%2B%2B-bin)(By [zhanghua000](https://github.com/zhanghua000))
|
||||
- [](https://www.microsoft.com/store/apps/9MTCFHS560NG)
|
||||
- [AUR](https://aur.archlinux.org/packages/watt-toolkit-bin)(Official Release)
|
||||
- [AUR dev](https://aur.archlinux.org/packages/watt-toolkit-git)(Pull latest code and build locally, build maybe failed, also don't guarantee availability)
|
||||
|
||||
## ✨ Functions
|
||||
1. Network Acceleration (Support Windows / Linux / macOS / Android)
|
||||
- Make the Steam community, Github, Google reCAPTCHA, Pixiv, Discord, Twitch and other domestic hard-to-access pages accessible properly.
|
||||
- Functions similar to [Steamcommunity 302](https://www.dogfight360.com/blog/686/), using [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy) open source project for local anti-generation.
|
||||
2. Script Configuration (Windows / Linux / macOS Only)
|
||||
- Some JS scripts are injected into web pages through an acceleration service that intercepts web requests, providing functionality similar to that of a web plugin.
|
||||
3. Account Switch (Windows / Linux / macOS Only)
|
||||
1. Account Switch <img src="./resources/windows-brands.svg" width="16" height="16" /> <img src="./resources/linux-brands.svg" width="16" height="16" /> <img src="./resources/apple-brands.svg" width="16" height="16" />
|
||||
- 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)
|
||||
2. Inventory Management <img src="./resources/windows-brands.svg" width="16" height="16" /> <img src="./resources/linux-brands.svg" width="16" height="16" /> <img src="./resources/apple-brands.svg" width="16" height="16" />
|
||||
- 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)
|
||||
3. Local Authentication <img src="./resources/windows-brands.svg" width="16" height="16" /> <img src="./resources/linux-brands.svg" width="16" height="16" /> <img src="./resources/apple-brands.svg" width="16" height="16" /> <img src="./resources/android-brands.svg" width="16" height="16" />
|
||||
- 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)
|
||||
4. ArchiSteamFarm <img src="./resources/windows-brands.svg" width="16" height="16" /> <img src="./resources/linux-brands.svg" width="16" height="16" /> <img src="./resources/apple-brands.svg" width="16" height="16" /> <img src="./resources/android-brands.svg" width="16" height="16" />
|
||||
- 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)
|
||||
5. Game Tools <img src="./resources/windows-brands.svg" width="16" height="16" />
|
||||
- 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
|
||||
### Windows
|
||||
|
||||
OS | Version | Architectures | Lifecycle
|
||||
--------------------------------------|-------------------------|-----------------|----------
|
||||
[Windows Client][Windows-client] | 7 SP1(**\***), 8.1 | x64 | [Windows][Windows-lifecycle]
|
||||
[Windows 10 Client][Windows-client] | Version 1607+(**\***) | x64 | [Windows][Windows-lifecycle]
|
||||
[Windows Server][Windows-Server] | 2012+ | x64 | [Windows Server][Windows-Server-lifecycle]
|
||||
OS | Version | Architectures | Lifecycle
|
||||
--------------------------------------|----------------------------|-----------------|----------
|
||||
[Windows Client][Windows-client] | 7 SP1(**\***), 8.1(**\***) | x64 | [Windows][Windows-lifecycle]
|
||||
[Windows 10 Client][Windows-client] | Version 1607+(**\***) | x64 | [Windows][Windows-lifecycle]
|
||||
[Windows 11][Windows-client] | Version 22000+ | x64, | [Windows][Windows-lifecycle]
|
||||
[Windows Server][Windows-Server] | 2008 R2 SP1(**\***), 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+
|
||||
**\*** Windows 7 SP1 must have [Extended Security Update](https://docs.microsoft.com/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq) installed and will be released after November 2022 is no longer supported.
|
||||
**\*** Windows 8.1 will no longer be supported in versions released after November 2022.
|
||||
**\*** Windows Server 2008 R2 SP1 must have [Extended Security Update](https://docs.microsoft.com/en-us/lifecycle/faq/extended-security-updates) installed and will be released after November 2022 is no longer supported.
|
||||
**\*** 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
|
||||
@@ -84,7 +91,7 @@ OS | Version | Architectures
|
||||
[SUSE Enterprise Linux (SLES)][SLES] | 12 SP2+ | x64 | [SUSE][SLES-lifecycle]
|
||||
[Ubuntu][Ubuntu] | 16.04, 18.04, 20.04+ | x64, Arm64 | [Ubuntu][Ubuntu-lifecycle]
|
||||
[Deepin / UOS][Deepin] | 20+ | x64 | [Deepin][Deepin-lifecycle]
|
||||
[Arch Linux][Arch] | | x64 |
|
||||
[Arch Linux][Arch] | | x64, Arm64 |
|
||||
|
||||
[Alpine]: https://alpinelinux.org/
|
||||
[Alpine-lifecycle]: https://wiki.alpinelinux.org/wiki/Alpine_Linux:Releases
|
||||
@@ -148,8 +155,6 @@ OS | Version | Architectures |
|
||||
## ⛔ Unsupported Operating System
|
||||
- Windows 8
|
||||
- [Due to Microsoft's official support for the product has ended](https://docs.microsoft.com/lifecycle/products/windows-8), so this program cannot run on this operating system, [It is recommended to upgrade to Windows 8.1](https://support.microsoft.com/windows/update-to-windows-8-1-from-windows-8-17fc54a7-a465-6b5a-c1a0-34140afd0669)
|
||||
- Windows Server 2008 R2 SP1
|
||||
- Only version 1.x is available, 2.x is not supported at first, and it is recommended to upgrade to a higher version
|
||||
- Windows Server / Linux version without desktop GUI
|
||||
- Xbox or Windows Mobile / Phone
|
||||
|
||||
@@ -159,7 +164,7 @@ Read what we [milestones](https://github.com/BeyondDimension/SteamTools/mileston
|
||||
## ⌨️ Development Environment
|
||||
[Visual Studio 2022](https://visualstudio.microsoft.com/vs/)
|
||||
[JetBrains Rider](https://www.jetbrains.com/rider/)
|
||||
~~[Visual Studio 2022 for Mac Preview](https://visualstudio.microsoft.com/zh-hans/vs/mac/preview/)~~
|
||||
~~[Visual Studio 2022 for Mac](https://visualstudio.microsoft.com/zh-hans/vs/mac/preview/)~~
|
||||
~~[Visual Studio Code](https://code.visualstudio.com/)~~
|
||||
- Supported Operating Systems
|
||||
- [Windows 10 Version 2004 Or Higher: Home, Professional, Education, and Enterprise (LTSC and S are not supported)](https://docs.microsoft.com/en-us/visualstudio/releases/2019/system-requirements)
|
||||
@@ -168,17 +173,15 @@ Read what we [milestones](https://github.com/BeyondDimension/SteamTools/mileston
|
||||
- Web and Cloud
|
||||
- ASP.NET and Web Development
|
||||
- Desktop and Mobile Applications
|
||||
- Mobile Development using .Net
|
||||
- .NET Desktop Development
|
||||
- UWP Development
|
||||
- Mobile Development using .Net
|
||||
- Other Toolsets
|
||||
- .NET Core Cross Platform Development
|
||||
- Single Component
|
||||
- GitHub Extension for Visual Studio
|
||||
- GitHub Extension for Visual Studio(Optional)
|
||||
- Windows 10 SDK (10.0.19041.0)
|
||||
- [Visual Studio Marketplace](https://marketplace.visualstudio.com/)
|
||||
- [Avalonia for Visual Studio](https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaforVisualStudio)
|
||||
- [NUnit VS Templates](https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnitTemplatesforVisualStudio)
|
||||
- [Avalonia for Visual Studio(Optional)](https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaforVisualStudio)
|
||||
- [NUnit VS Templates(Optional)](https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnitTemplatesforVisualStudio)
|
||||
|
||||
[OpenJDK 11](https://docs.microsoft.com/java/openjdk/download#openjdk-11)
|
||||
[Android Studio 2021.1.1 Or Higher](https://developer.android.com/studio/)
|
||||
@@ -193,6 +196,8 @@ Read what we [milestones](https://github.com/BeyondDimension/SteamTools/mileston
|
||||
* [Hardcodet.NotifyIcon](https://github.com/HavenDV/Hardcodet.NotifyIcon.Wpf.NetCore)
|
||||
* [System.Reactive](https://github.com/dotnet/reactive)
|
||||
* [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy)
|
||||
* [YARP](https://github.com/microsoft/reverse-proxy)
|
||||
* [FastGithub](https://github.com/dotnetcore/FastGithub)
|
||||
* [Portable.BouncyCastle](https://github.com/novotnyllc/bc-csharp)
|
||||
* [Ninject](https://github.com/ninject/Ninject)
|
||||
* [log4net](https://github.com/apache/logging-log4net)
|
||||
@@ -265,4 +270,4 @@ Read what we [milestones](https://github.com/BeyondDimension/SteamTools/mileston
|
||||
* [command-line-api](https://github.com/dotnet/command-line-api)
|
||||
* [.NET Runtime](https://github.com/dotnet/runtime)
|
||||
* [Fluent UI System Icons](https://github.com/microsoft/fluentui-system-icons)
|
||||
* [Material design icons](https://github.com/google/material-design-icons)
|
||||
* [Material design icons](https://github.com/google/material-design-icons)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<h1 align="center">Steam++ 工具箱 🧰</h1>
|
||||
<h1 align="center">Watt Toolkit 🧰 (原名 Steam++)</h1>
|
||||
|
||||
<div align="center">
|
||||
|
||||
[English](./README.en.md) | 简体中文
|
||||
|
||||
「Steam++」是一个开源跨平台的多功能游戏工具箱,此工具的大部分功能都是需要您下载安装 Steam 才能使用。
|
||||
「Watt Toolkit」是一个开源跨平台的多功能游戏工具箱,此工具的大部分功能都是需要您下载安装 Steam 才能使用。
|
||||
|
||||

|
||||
[](https://github.com/BeyondDimension/SteamTools/releases/latest)
|
||||
@@ -22,49 +22,65 @@
|
||||
[](https://github.com/ant-design-blazor/ant-design-blazor)
|
||||
|
||||
[](https://actions-badge.atrox.dev/BeyondDimension/SteamTools/goto?ref=develop)
|
||||
[](https://github.com/BeyondDimension/SteamTools)
|
||||
[](https://github.com/BeyondDimension/SteamTools)
|
||||
[](https://gitee.com/rmbgame/SteamTools)
|
||||
[](https://jq.qq.com/?_wv=1027&k=3JKPt4xC)
|
||||
</div>
|
||||
|
||||
<div align="center"><img src="./resources/screenshots.jpg" /></div>
|
||||
[](https://afdian.net/@rmbgame)
|
||||
[](https://ko-fi.com/rmbgame)
|
||||
[](https://www.patreon.com/rmbgame)
|
||||
[](https://space.bilibili.com/797215)
|
||||
[](https://jq.qq.com/?_wv=1027&k=3JKPt4xC)
|
||||
|
||||
<img src="./resources/screenshot-1.webp" width="800" />
|
||||
<br/>
|
||||
<br/>
|
||||
<img src="./resources/screenshot-android.png" width="800" />
|
||||
</div>
|
||||
|
||||
## 🚀 下载渠道
|
||||
- [GitHub Releases](https://github.com/BeyondDimension/SteamTools/releases)
|
||||
- [Gitee Releases](https://gitee.com/rmbgame/SteamTools/releases)
|
||||
- [Official WebSite](https://steampp.net)
|
||||
- [Arch Linux Package](https://aur.archlinux.org/packages/steam%2B%2B-bin)(By [zhanghua000](https://github.com/zhanghua000))
|
||||
- [](https://www.microsoft.com/store/apps/9MTCFHS560NG)
|
||||
- [AUR](https://aur.archlinux.org/packages/watt-toolkit-bin)(官方 Release 构建)
|
||||
- [AUR dev](https://aur.archlinux.org/packages/watt-toolkit-git)(拉取最新源代码从本地构建,不保证可用性,构建也许会出现失败问题)
|
||||
|
||||
## ✨ 功能
|
||||
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)
|
||||
1. 网络加速 <img src="./resources/windows-brands.svg" width="16" height="16" /> <img src="./resources/linux-brands.svg" width="16" height="16" /> <img src="./resources/apple-brands.svg" width="16" height="16" /> <img src="./resources/android-brands.svg" width="16" height="16" />
|
||||
- ~~使用 [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy) 开源项目进行本地反代来支持更快的访问游戏网站。~~
|
||||
- 使用 [YARP.ReverseProxy](https://github.com/microsoft/reverse-proxy) 开源项目进行本地反代来支持更快的访问游戏网站。
|
||||
2. 脚本配置 <img src="./resources/windows-brands.svg" width="16" height="16" /> <img src="./resources/linux-brands.svg" width="16" height="16" /> <img src="./resources/apple-brands.svg" width="16" height="16" />
|
||||
- 通过加速服务拦截网络请求将一些 JS 脚本注入在网页中,提供类似网页插件的功能。
|
||||
3. 账号切换 (Windows / Linux / macOS Only)
|
||||
- 一键切换已在当前 PC 上登录过的 Steam 账号,与管理家庭共享库排序等功能。
|
||||
4. 库存管理 (Windows / Linux / macOS Only)
|
||||
- 让您直接管理到 Steam 游戏库存,不仅能够下载老版本的 Steam 游戏,也能够对 Steam 游戏成就进行直接管理,支持解锁成就以及反解锁成就。
|
||||
5. 本地令牌 (Support Windows / Linux / macOS / Android)
|
||||
3. 账号切换 <img src="./resources/windows-brands.svg" width="16" height="16" /> <img src="./resources/linux-brands.svg" width="16" height="16" /> <img src="./resources/apple-brands.svg" width="16" height="16" />
|
||||
- 一键切换已在当前 PC 上登录过的 Steam 账号,与管理家庭共享库排序及禁用等功能。
|
||||
4. 库存管理 <img src="./resources/windows-brands.svg" width="16" height="16" /> <img src="./resources/linux-brands.svg" width="16" height="16" /> <img src="./resources/apple-brands.svg" width="16" height="16" />
|
||||
- 让您直接管理 Steam 游戏库存,可以编辑游戏名称和[自定义封面](https://www.steamgriddb.com/),也能解锁以及反解锁 Steam 游戏成就。
|
||||
- 监控 Steam 游戏下载进度实现 Steam 游戏下载完成定时关机功能。
|
||||
- 模拟运行 Steam 游戏,让您不用安装和下载对应的游戏也能挂游玩时间和 Steam 卡片
|
||||
- 自助管理 Steam 游戏云存档,随时删除和上传自定义的存档文件至 Steam 云
|
||||
5. 本地令牌 <img src="./resources/windows-brands.svg" width="16" height="16" /> <img src="./resources/linux-brands.svg" width="16" height="16" /> <img src="./resources/apple-brands.svg" width="16" height="16" /> <img src="./resources/android-brands.svg" width="16" height="16" />
|
||||
- 让您的手机令牌统一保存在电脑中,目前仅支持 Steam 令牌,后续会开发支持更多的令牌种类与云同步令牌。
|
||||
6. 自动挂卡 (Support Windows / Linux / macOS / Android)
|
||||
6. 自动挂卡 <img src="./resources/windows-brands.svg" width="16" height="16" /> <img src="./resources/linux-brands.svg" width="16" height="16" /> <img src="./resources/apple-brands.svg" width="16" height="16" /> <img src="./resources/android-brands.svg" width="16" height="16" />
|
||||
- 集成 [ArchiSteamFarm](https://github.com/JustArchiNET/ArchiSteamFarm) 在应用内提供 挂机掉落 Steam 集换式卡牌 等功能。
|
||||
7. 游戏工具 (Windows Only)
|
||||
- 强制游戏窗口使用无边框窗口化
|
||||
7. 游戏工具 <img src="./resources/windows-brands.svg" width="16" height="16" />
|
||||
- 强制游戏窗口使用无边框窗口化、更多功能待开发。
|
||||
|
||||
<!--发布配置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)-->
|
||||
## 🖥 系统要求
|
||||
### Windows
|
||||
|
||||
OS | Version | Architectures | Lifecycle
|
||||
--------------------------------------|-------------------------|-----------------|----------
|
||||
[Windows Client][Windows-client] | 7 SP1(**\***), 8.1 | x64 | [Windows][Windows-lifecycle]
|
||||
[Windows 10 Client][Windows-client] | Version 1607+(**\***) | x64 | [Windows][Windows-lifecycle]
|
||||
[Windows Server][Windows-Server] | 2012+ | x64 | [Windows Server][Windows-Server-lifecycle]
|
||||
OS | Version | Architectures | Lifecycle
|
||||
--------------------------------------|----------------------------|-----------------|----------
|
||||
[Windows Client][Windows-client] | 7 SP1(**\***), 8.1(**\***) | x64 | [Windows][Windows-lifecycle]
|
||||
[Windows 10 Client][Windows-client] | Version 1607+(**\***) | x64 | [Windows][Windows-lifecycle]
|
||||
[Windows 11][Windows-client] | Version 22000+ | x64, | [Windows][Windows-lifecycle]
|
||||
[Windows Server][Windows-Server] | 2008 R2 SP1(**\***), 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+
|
||||
**\*** Windows 7 SP1 必须安装 [扩展安全更新 (ESU)](https://docs.microsoft.com/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq) 且将在不再支持 **2022/11** 后发布的版本。
|
||||
**\*** Windows 8.1 将在不再支持 **2022/11** 后发布的版本。
|
||||
**\*** Windows Server 2008 R2 SP1 必须安装 [扩展安全更新 (ESU)](https://docs.microsoft.com/zh-cn/lifecycle/faq/extended-security-updates) 且将在不再支持 **2022/11** 后发布的版本。
|
||||
**\*** 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
|
||||
@@ -86,7 +102,7 @@ OS | Version | Architectures
|
||||
[SUSE Enterprise Linux (SLES)][SLES] | 12 SP2+ | x64 | [SUSE][SLES-lifecycle]
|
||||
[Ubuntu][Ubuntu] | 16.04, 18.04, 20.04+ | x64, Arm64 | [Ubuntu][Ubuntu-lifecycle]
|
||||
[Deepin / UOS][Deepin] | 20+ | x64 | [Deepin][Deepin-lifecycle]
|
||||
[Arch Linux][Arch] | | x64 |
|
||||
[Arch Linux][Arch] | | x64,Arm64 |
|
||||
|
||||
[Alpine]: https://alpinelinux.org/
|
||||
[Alpine-lifecycle]: https://wiki.alpinelinux.org/wiki/Alpine_Linux:Releases
|
||||
@@ -150,8 +166,6 @@ OS | Version | Architectures |
|
||||
## ⛔ 不受支持的操作系统
|
||||
- Windows 8
|
||||
- [由于微软官方对该产品的支持已结束](https://docs.microsoft.com/zh-cn/lifecycle/products/windows-8),故本程序无法在此操作系统上运行,[建议升级到 Windows 8.1](https://support.microsoft.com/zh-cn/windows/%E4%BB%8E-windows-8-%E6%9B%B4%E6%96%B0%E5%88%B0-windows-8-1-17fc54a7-a465-6b5a-c1a0-34140afd0669)
|
||||
- Windows Server 2008 R2 SP1
|
||||
- 仅可使用 1.X 版本,2.X 开始不受支持,建议升级到更高版本
|
||||
- 无桌面 GUI 的 Windows Server / Linux 版本
|
||||
- Xbox or Windows Mobile / Phone
|
||||
|
||||
@@ -161,32 +175,31 @@ OS | Version | Architectures |
|
||||
## ⌨️ 开发环境
|
||||
[Visual Studio 2022](https://visualstudio.microsoft.com/zh-hans/vs/)
|
||||
[JetBrains Rider](https://www.jetbrains.com/rider/)
|
||||
~~[Visual Studio 2022 for Mac Preview](https://visualstudio.microsoft.com/zh-hans/vs/mac/)~~
|
||||
~~[Visual Studio 2022 for Mac](https://visualstudio.microsoft.com/zh-hans/vs/mac/)~~
|
||||
~~[Visual Studio Code](https://code.visualstudio.com/)~~
|
||||
- 系统要求
|
||||
- [Windows 10 版本 2004 或更高版本:家庭版、专业版、教育版和企业版(不支持 LTSC 和 Windows 10 S,在较早的操作系统上可能不受支持)](https://docs.microsoft.com/zh-cn/visualstudio/releases/2019/system-requirements)
|
||||
- [macOS 10.14 Mojave 或更高版本](https://docs.microsoft.com/zh-cn/visualstudio/productinfo/vs2019-system-requirements-mac)
|
||||
- 工作负载
|
||||
- 工作负荷
|
||||
- Web 和云
|
||||
- ASP.NET 和 Web 开发
|
||||
- 桌面应用和移动应用
|
||||
- 使用 .NET 的移动开发 / .NET Multi-platform App UI 开发
|
||||
- .NET 桌面开发
|
||||
- 通用 Windows 平台开发
|
||||
- 使用 .NET 的移动开发
|
||||
- 其他工具集
|
||||
- .NET Core 跨平台开发
|
||||
- 单个组件
|
||||
- GitHub Extension for Visual Studio
|
||||
- GitHub Extension for Visual Studio(可选)
|
||||
- Windows 10 SDK (10.0.19041.0)
|
||||
- [Visual Studio Marketplace](https://marketplace.visualstudio.com/)
|
||||
- [Avalonia for Visual Studio](https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaforVisualStudio)
|
||||
- [NUnit VS Templates](https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnitTemplatesforVisualStudio)
|
||||
- [Avalonia for Visual Studio(可选)](https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaforVisualStudio)
|
||||
- [NUnit VS Templates(可选)](https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnitTemplatesforVisualStudio)
|
||||
|
||||
[OpenJDK 11](https://docs.microsoft.com/zh-cn/java/openjdk/download#openjdk-11)
|
||||
[Android Studio 2021.1.1 或更高版本](https://developer.android.google.cn/studio/)
|
||||
[Xcode 13 或更高版本](https://developer.apple.com/xcode/)
|
||||
|
||||
## 🏗️ [项目结构](./src/README.md)
|
||||
详见 [./src/README.md](./src/README.md)
|
||||
|
||||
<!--
|
||||
* [LibVLCSharp](https://github.com/videolan/libvlcsharp)
|
||||
@@ -206,6 +219,8 @@ OS | Version | Architectures |
|
||||
* [Hardcodet.NotifyIcon](https://github.com/HavenDV/Hardcodet.NotifyIcon.Wpf.NetCore)
|
||||
* [System.Reactive](https://github.com/dotnet/reactive)
|
||||
* [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy)
|
||||
* [YARP](https://github.com/microsoft/reverse-proxy)
|
||||
* [FastGithub](https://github.com/dotnetcore/FastGithub)
|
||||
* [Portable.BouncyCastle](https://github.com/novotnyllc/bc-csharp)
|
||||
* [Ninject](https://github.com/ninject/Ninject)
|
||||
* [log4net](https://github.com/apache/logging-log4net)
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.31005.135
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Blazor.BackManage.Server", "src\ST.Blazor.BackManage\Server\ST.Blazor.BackManage.Server.csproj", "{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Blazor.BackManage.Client", "src\ST.Blazor.BackManage\Client\ST.Blazor.BackManage.Client.csproj", "{AB1EB396-ABBE-4CEA-A650-950A68440391}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Root", "_Root", "{3449FCD6-B7EB-40DF-A76A-6E22A8FB3A2F}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
src\ST.Blazor.BackManage\README.md = src\ST.Blazor.BackManage\README.md
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Release|x64.Build.0 = Release|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Release|x86.Build.0 = Release|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Release|x64.Build.0 = Release|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {10D95A49-D583-49CD-8224-15A402FBEE1D}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -15,6 +15,8 @@
|
||||
"src\\Avalonia.Themes.Fluent\\Avalonia.Themes.Fluent.csproj",
|
||||
"src\\Avalonia.Win32\\Avalonia.Win32.csproj",
|
||||
"src\\Avalonia.X11\\Avalonia.X11.csproj",
|
||||
"src\\Avalonia.Desktop\\Avalonia.Desktop.csproj",
|
||||
"src\\Avalonia.Skia.Internals\\Avalonia.Skia.Internals.csproj",
|
||||
"src\\Common.AreaLib\\Common.AreaLib.csproj",
|
||||
"src\\Common.ClientLib\\Common.ClientLib.csproj",
|
||||
"src\\Common.CoreLib\\Common.CoreLib.csproj",
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
"src\\Avalonia.Themes.Fluent\\Avalonia.Themes.Fluent.csproj",
|
||||
"src\\Avalonia.Win32\\Avalonia.Win32.csproj",
|
||||
"src\\Avalonia.X11\\Avalonia.X11.csproj",
|
||||
"src\\Avalonia.Desktop\\Avalonia.Desktop.csproj",
|
||||
"src\\Avalonia.Skia.Internals\\Avalonia.Skia.Internals.csproj",
|
||||
"src\\Common.AreaLib\\Common.AreaLib.csproj",
|
||||
"src\\Common.ClientLib.iOS\\Common.ClientLib.iOS.csproj",
|
||||
"src\\Common.ClientLib\\Common.ClientLib.csproj",
|
||||
|
||||
@@ -14,7 +14,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Root", "_Root", "{66839CD8
|
||||
download-guide.md = download-guide.md
|
||||
global.json = global.json
|
||||
packaging\Info.plist = packaging\Info.plist
|
||||
nuget.config = nuget.config
|
||||
packaging\package.net472.ps1 = packaging\package.net472.ps1
|
||||
README.en.md = README.en.md
|
||||
README.md = README.md
|
||||
@@ -182,11 +181,49 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Android.ResSecret
|
||||
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}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Windows.ResSecrets", "src\ST.Client.Windows.ResSecrets\ST.Client.Windows.ResSecrets.csproj", "{058F9955-8EFE-4BF3-A8F9-44C57B1F812E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Desktop", "src\Avalonia.Desktop\Avalonia.Desktop.csproj", "{FA9F0E89-E410-400A-86F3-C603E51E62A8}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Avalonia.App.MsixPackage", "src\ST.Client.Desktop.Avalonia.App.Bridge2\ST.Client.Avalonia.App.MsixPackage.csproj", "{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FDELauncher", "src\FDELauncher\FDELauncher.csproj", "{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Net.Http.Headers", "src\Microsoft.Net.Http.Headers\Microsoft.Net.Http.Headers.csproj", "{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Maui.App", "src\ST.Client.Maui.App\ST.Client.Maui.App.csproj", "{73A9AB65-AF95-4F27-98E2-B3296F9BC198}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Maui", "src\ST.Client.Maui\ST.Client.Maui.csproj", "{48417EE3-BACB-4E04-B48D-B3781862AD81}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Essentials", "src\Common.Essentials\Common.Essentials.csproj", "{41434AB5-48C3-47D4-8721-D118D87F472B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Essentials.Xamarin", "src\Common.Essentials.Xamarin\Common.Essentials.Xamarin.csproj", "{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Essentials.Maui", "src\Common.Essentials.Maui\Common.Essentials.Maui.csproj", "{5C440EC2-9251-4DB5-A14E-68FF37814F12}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.CommandLine", "src\ST.Client.CommandLine\ST.Client.CommandLine.csproj", "{1891DD14-628D-4921-8A1E-279320312E95}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.AppCenter", "src\ST.Client.AppCenter\ST.Client.AppCenter.csproj", "{3381B512-7CCB-4211-87B0-273260531BFC}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.AppCenter.Avalonia", "src\ST.Client.AppCenter.Avalonia\ST.Client.AppCenter.Avalonia.csproj", "{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.JumpList", "src\ST.Client.JumpList\ST.Client.JumpList.csproj", "{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.JumpList.Avalonia", "src\ST.Client.JumpList.Avalonia\ST.Client.JumpList.Avalonia.csproj", "{F7938AFB-0573-47A9-BB99-F1D0501466D2}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.ReverseProxy", "src\ST.Client.ReverseProxy\ST.Client.ReverseProxy.csproj", "{3F394239-07BF-4FE6-861F-240355D15E3B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.ReverseProxy.Titanium", "src\ST.Client.ReverseProxy.Titanium\ST.Client.ReverseProxy.Titanium.csproj", "{92DEBBE5-FF82-4251-ABC6-75FF285E7149}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.ReverseProxy.Yarp", "src\ST.Client.ReverseProxy.Yarp\ST.Client.ReverseProxy.Yarp.csproj", "{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Windows.ScheduledTasks", "src\ST.Client.Windows.ScheduledTasks\ST.Client.Windows.ScheduledTasks.csproj", "{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.WebView2", "src\Avalonia.WebView2\Avalonia.WebView2.csproj", "{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -1902,6 +1939,7 @@ Global
|
||||
{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|Any CPU.Deploy.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
|
||||
@@ -1916,6 +1954,7 @@ Global
|
||||
{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|Any CPU.Deploy.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
|
||||
@@ -2068,6 +2107,554 @@ Global
|
||||
{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
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|x64.Build.0 = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8}.Release|x86.Build.0 = Release|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|ARM64.ActiveCfg = Debug|arm64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|ARM64.Build.0 = Debug|arm64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|x64.Build.0 = Debug|x64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Debug|x86.Build.0 = Debug|x86
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|Any CPU.Build.0 = Release|x64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|ARM64.ActiveCfg = Release|arm64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|ARM64.Build.0 = Release|arm64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|x64.ActiveCfg = Release|x64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|x64.Build.0 = Release|x64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|x64.Deploy.0 = Release|x64
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|x86.ActiveCfg = Release|x86
|
||||
{7E7C34F0-1391-473C-8A1C-CE3EAF5D66DB}.Release|x86.Build.0 = Release|x86
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|x64.Build.0 = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7AAA8A01-A4FE-49AD-9664-AC53C4C8EAC6}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|ARM.Deploy.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|ARM64.Deploy.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|iPhone.Deploy.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|x64.Deploy.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|x86.Deploy.0 = Debug|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|Any CPU.Deploy.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|ARM.Deploy.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|ARM64.Deploy.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|iPhone.Deploy.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|x64.Build.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|x64.Deploy.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|x86.Build.0 = Release|Any CPU
|
||||
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|x86.Deploy.0 = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|x64.Build.0 = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|x86.Build.0 = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|x64.Build.0 = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}.Release|x86.Build.0 = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|x64.Build.0 = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1891DD14-628D-4921-8A1E-279320312E95}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC}.Release|x86.Build.0 = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|x64.Build.0 = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|x64.Build.0 = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198}.Release|x86.Build.0 = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|x64.Build.0 = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|x64.Build.0 = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42}.Release|x86.Build.0 = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|x64.Build.0 = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -2141,6 +2728,22 @@ Global
|
||||
{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}
|
||||
{FA9F0E89-E410-400A-86F3-C603E51E62A8} = {910D6A0F-42AB-4B65-B532-852E864EC006}
|
||||
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
|
||||
{48417EE3-BACB-4E04-B48D-B3781862AD81} = {8E38AAF2-8C7D-4B0D-AB25-AB37EECB4029}
|
||||
{41434AB5-48C3-47D4-8721-D118D87F472B} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
|
||||
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
|
||||
{5C440EC2-9251-4DB5-A14E-68FF37814F12} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
|
||||
{1891DD14-628D-4921-8A1E-279320312E95} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
{3381B512-7CCB-4211-87B0-273260531BFC} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
{59E25DF3-C8D0-484E-BFD0-637FE5CBC198} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
{F7938AFB-0573-47A9-BB99-F1D0501466D2} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
{3F394239-07BF-4FE6-861F-240355D15E3B} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
{92DEBBE5-FF82-4251-ABC6-75FF285E7149} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
{D8ED7A17-D693-45FF-B75A-D9B12DAB5A42} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
|
||||
{0EEA90D8-FAB7-48C9-8C15-1E61AEF8AB81} = {E50441E8-75F3-406E-9921-30BFC211B5CE}
|
||||
{8C996C50-B29F-4CB6-90A7-77C9CD3B0B70} = {910D6A0F-42AB-4B65-B532-852E864EC006}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
RESX_NeutralResourcesLanguage = zh-Hans
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<DefineConstants>WINDOWS;$(DefineConstants)</DefineConstants>
|
||||
<SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>
|
||||
<!-- https://www.nuget.org/packages/Microsoft.Windows.SDK.NET.Ref -->
|
||||
<WindowsSdkPackageVersion>10.0.19041.26</WindowsSdkPackageVersion>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -1,13 +1,18 @@
|
||||
# 下载指南
|
||||
- Desktop(桌面端)
|
||||
- Windows
|
||||
- 如果你使用 Intel、AMD 的 x64(x86-64) 芯片的 PC,则下载文件名中带有 **win_x64** 的文件
|
||||
- 如果你 **已安装** 了 [ASP.NET Core 运行时 6.0.4](https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0) 则下载文件名中带有 **fde(框架依赖)** 的文件
|
||||
- 注意:是 《ASP.NET Core 运行时》 而不是 《.NET 桌面运行时》
|
||||
- [在 Windows 上安装 .NET](https://docs.microsoft.com/zh-cn/dotnet/core/install/windows)
|
||||
- 本程序在 Windows 上不需要 Hosting Bundle 和 IIS support
|
||||
- [下载安装程序并手动安装(aspnetcore-runtime-6.0.4-win-x64.exe)](https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-aspnetcore-6.0.4-windows-x64-installer)
|
||||
- [使用 PowerShell 自动化安装](https://docs.microsoft.com/zh-cn/dotnet/core/install/windows?tabs=net60#install-with-powershell-automation)
|
||||
- 如果你使用 Intel、AMD 的 x64(x86-64/AMD64) 芯片的 PC,则下载文件名中带有 **win_x64** 的文件
|
||||
- **框架依赖版(framework-dependent executable / fde)**
|
||||
- 需要 **《ASP.NET Core 运行时 6.0.x》** 与 **《.NET 运行时 6.0.x》**,如果你 **已安装** 了相关运行时,则下载文件名中带有 **fde** 的文件,可减少本应用占用的磁盘空间
|
||||
- 如果你 **未安装相关运行时则应下载文件名中不包含 fde 的文件**,或在 [此下载](https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0) 最新的 6.0.x 运行时
|
||||
- 在网页上点击 安装程序 x64 的链接即可下载,通常下载的文件名如下,将其安装后即可,无安装顺序要求
|
||||
- dotnet-runtime-6.0.x-win-x64.exe (.NET 运行时 6.0.x)
|
||||
- aspnetcore-runtime-6.0.x-win-x64.exe (ASP.NET Core 运行时 6.0.x)
|
||||
- 其他也包含了所需的运行时的下载项,但不推荐仅为运行本应用而安装
|
||||
- Hosting Bundle 还包含了本应用不需要的 IIS 运行时支持 (ASP.NET Core Module v2) 与 x86 的多个运行库
|
||||
- SDK 包含了较多不需要的内容
|
||||
|
||||
|
||||
- macOS
|
||||
- 如果你使用 Intel 的 x64(x86-64) 芯片的 Mac,则下载文件名中带有 **macos_x64** 的文件
|
||||
- 如果你使用 ARM64(Apple Silicon) 芯片的 Mac,例如 **Apple M1**,则下载文件名中带有 **macos_arm64** 的文件
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
{
|
||||
"msbuild-sdks": {
|
||||
"MSBuild.Sdk.Extras": "3.0.44",
|
||||
"Xamarin.Legacy.Sdk": "0.1.2-alpha6"
|
||||
},
|
||||
"sdk": {
|
||||
"version": "6.0.202"
|
||||
"MSBuild.Sdk.Extras": "3.0.44"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<add key="dotnet-experimental" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json" />
|
||||
<add key="AvaloniaCI" value="https://nuget.avaloniaui.net/repository/avalonia-all/index.json" />
|
||||
</packageSources>
|
||||
</configuration>
|
||||
@@ -3,13 +3,13 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleName</key>
|
||||
<string>Steam++</string>
|
||||
<string>Watt Toolkit</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>net.steampp.app</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.7.0</string>
|
||||
<string>2.8.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.7.0.0</string>
|
||||
<string>2.8.0.0</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.15</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
|
||||
@@ -11,7 +11,7 @@ $proj_path = "$RootPath\src\ST.Client.Desktop.Avalonia.App\ST.Client.Avalonia.Ap
|
||||
$publishtool_dir = "$RootPath\src\ST.Tools.Publish"
|
||||
$publishtool_exe = "$publishtool_dir\bin\Release\net6.0\p.exe"
|
||||
|
||||
$build_pubxmls = "fd-win-x64","win-x64","osx-x64","linux-x64","linux-arm64","osx-arm64"
|
||||
$build_pubxmls = "fd-win-x64","win-x64","fd-win-x86","win-x86","osx-x64","linux-x64","linux-arm64","osx-arm64"
|
||||
|
||||
function Build-PublishTool
|
||||
{
|
||||
@@ -37,7 +37,7 @@ function Build-PublishTool
|
||||
Build-App $pubxml
|
||||
}
|
||||
|
||||
& $publishtool_exe full -token $('"')$env:Token$('"') $dev
|
||||
& $publishtool_exe full -token $('"')$env:Token$('"') $dev -win_sign_pfx_pwd $('"')$env:WIN_SIGN_PFX_PWD('"')
|
||||
if ($LASTEXITCODE) { exit $LASTEXITCODE }
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
# ARM64(Windows/macOS/Linux) Native Library
|
||||
|
||||
## 7z.dll
|
||||
21.07 (2021-12-26) by https://www.7-zip.org
|
||||
|
||||
## libe_sqlite3.dylib
|
||||
sqlitepclraw.lib.e_sqlite3.2.0.7.nupkg
|
||||
@@ -1,45 +0,0 @@
|
||||
// https://github.com/NLog/NLog/blob/v4.7.10/src/NLog/LogManager.cs
|
||||
using NLog;
|
||||
using NLog.Config;
|
||||
using System;
|
||||
|
||||
namespace ArchiSteamFarm
|
||||
{
|
||||
public static class LogManager
|
||||
{
|
||||
static readonly LogFactory factory = new();
|
||||
|
||||
[CLSCompliant(false)]
|
||||
public static Logger GetLogger(string name)
|
||||
{
|
||||
return factory.GetLogger(name);
|
||||
}
|
||||
|
||||
public static void Flush()
|
||||
{
|
||||
factory.Flush();
|
||||
}
|
||||
|
||||
public static void ReconfigExistingLoggers()
|
||||
{
|
||||
factory.ReconfigExistingLoggers();
|
||||
}
|
||||
|
||||
public static LoggingConfiguration Configuration
|
||||
{
|
||||
get => factory.Configuration;
|
||||
set => factory.Configuration = value;
|
||||
}
|
||||
|
||||
public static event EventHandler<LoggingConfigurationChangedEventArgs> ConfigurationChanged
|
||||
{
|
||||
add => factory.ConfigurationChanged += value;
|
||||
remove => factory.ConfigurationChanged -= value;
|
||||
}
|
||||
|
||||
public static void Shutdown()
|
||||
{
|
||||
factory.Shutdown();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO;
|
||||
|
||||
namespace ArchiSteamFarm
|
||||
{
|
||||
public static class ASFPathHelper
|
||||
{
|
||||
static readonly Lazy<string> _AppDataDirectory = new(() =>
|
||||
{
|
||||
var path = Path.Combine(IOPath.AppDataDirectory, "ASF");
|
||||
IOPath.DirCreateByNotExists(path);
|
||||
return path;
|
||||
});
|
||||
|
||||
/// <summary>
|
||||
/// <list type="bullet">
|
||||
/// <item>
|
||||
/// AppData\ASF\config
|
||||
/// </item>
|
||||
/// <item>
|
||||
/// AppData\ASF\plugins
|
||||
/// </item>
|
||||
/// </list>
|
||||
/// </summary>
|
||||
public static string AppDataDirectory => _AppDataDirectory.Value;
|
||||
|
||||
/// <summary>
|
||||
/// <list type="bullet">
|
||||
/// <item>
|
||||
/// Windows:Logs\ASF
|
||||
/// </item>
|
||||
/// <item>
|
||||
/// Windows Desktop Bridge:{CacheDirectory}\Logs\ASF
|
||||
/// </item>
|
||||
/// </list>
|
||||
/// </summary>
|
||||
/// <param name="logDirPath"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetLogDirectory([NotNull] string logDirPath)
|
||||
{
|
||||
var path = (logDirPath.EndsWith(Path.DirectorySeparatorChar) ? logDirPath : logDirPath + Path.DirectorySeparatorChar) + "ASF";
|
||||
IOPath.DirCreateByNotExists(path);
|
||||
return path;
|
||||
}
|
||||
|
||||
public static string GetNLogArchiveFileName([NotNull] string logDirectory)
|
||||
{
|
||||
var path = logDirectory + Path.DirectorySeparatorChar + SharedInfo.ArchivalLogFile;
|
||||
return path;
|
||||
}
|
||||
|
||||
public static string GetNLogFileName([NotNull] string logDirectory)
|
||||
{
|
||||
var path = logDirectory + Path.DirectorySeparatorChar + SharedInfo.LogFile;
|
||||
return path;
|
||||
}
|
||||
|
||||
static readonly Lazy<string> _WebsiteDirectory = new(() =>
|
||||
{
|
||||
var path = Path.Combine(IOPath.AppDataDirectory, "ASF", "www");
|
||||
IOPath.DirCreateByNotExists(path);
|
||||
return path;
|
||||
});
|
||||
|
||||
/// <summary>
|
||||
/// <list type="bullet">
|
||||
/// <item>
|
||||
/// AppData\ASF\www
|
||||
/// </item>
|
||||
/// </list>
|
||||
/// </summary>
|
||||
public static string WebsiteDirectory => _WebsiteDirectory.Value;
|
||||
|
||||
#if DEBUG
|
||||
[Obsolete("use AppDataDirectory")]
|
||||
public static string HomeDirectory => AppDataDirectory;
|
||||
#endif
|
||||
|
||||
public const string NLogGeneralLayout = NLog.Logging.GeneralLayout;
|
||||
}
|
||||
|
||||
public enum ASFPathFolder
|
||||
{
|
||||
ASF,
|
||||
Config,
|
||||
Plugin,
|
||||
WWW,
|
||||
Logs,
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ArchiSteamFarm
|
||||
{
|
||||
public interface IArchiSteamFarmHelperService
|
||||
{
|
||||
static IArchiSteamFarmHelperService Instance => DI.Get<IArchiSteamFarmHelperService>();
|
||||
|
||||
int IPCPortValue { get; }
|
||||
|
||||
Task Restart();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
|
||||
<supportedRuntime version="v2.0.50727" />
|
||||
</startup>
|
||||
</configuration>
|
||||
@@ -1,4 +0,0 @@
|
||||
# Windows/macOS/Linux x86(32 bit) Native Library
|
||||
|
||||
## 7z.dll
|
||||
21.07 (2021-12-26) by https://www.7-zip.org
|
||||
@@ -1,34 +1,40 @@
|
||||
### 版本亮点
|
||||
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. 非简中语言将默认隐藏加速和脚本功能,仅能通过切换语言并重启程序的方式还原被隐藏的功能
|
||||
2. 现已停止短信服务节约开销,后续会推出邮箱注册登录,对于已使用手机号的用户需要进行绑定第三方快速登录,否则注销后将无法再次登录
|
||||
3. 自动更新目前仅 Windows 端可用,且由于下载渠道限速可能导致无法更新成功,推荐在官网链接的网盘或群文件中下载压缩包解压覆盖更新(应用商店版由商店更新不受此影响)
|
||||
4. 目前的本地加速功能的实现方式,因需要信任证书,在 Android 上因系统限制,所以此功能已放弃继续开发,如仍想使用需要自行导入证书到系统目录,使用 adb 工具或 Magisk 之类的软件操作,未来会使用不需要证书的加速功能替换此功能
|
||||
5. fde 版本需要安装 [ASP.NET Core 运行时 6.0.7 (x64) 与 .NET Core 运行时 6.0.7 (x64)](https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0)
|
||||
|
||||
-->
|
||||
|
||||
### 版本亮点
|
||||
1. 新增 Steam 云存档管理功能,可自行上传或删除 Steam 云存档
|
||||
2. 库存游戏支持筛选支持 Steam 云存档的游戏
|
||||
3. ASF 升级至 V5.2.6.3
|
||||
4. .NET 运行时升级至 6.0.7,使用 fde 版本需要升级运行库
|
||||
5. 库存游戏中解锁成就与挂时长支持 macOS 与 Linux 系统
|
||||
6. 在设置中可关闭托盘,关闭托盘后关闭主窗口即退出程序
|
||||
7. 使用 Yarp.ReverseProxy 重写了反代加速和脚本功能,大幅提升稳定性和性能
|
||||
8. Windows 新增 DNS 驱动拦截模式进行本地加速
|
||||
9. 为了能继续维持开发,从此版本开始将会添加程序内广告,赞助用户将会有特殊的标识并且不会显示广告
|
||||
10. 令牌交易现在支持查看交易详情,可以确认交易方的Steam注册时间等信息
|
||||
|
||||
### 修复问题
|
||||
1. 修复 本地令牌 无令牌刷新时提示密码错误
|
||||
2. 改进 Android 端 本地令牌 列表样式第一条与最后一条的上下外边距
|
||||
3. 改进 俄语翻译,由 vanja-san 提供
|
||||
4. 改进 .NET 运行时升级至 6.0.4(仅 Desktop 端)
|
||||
5. 改进 脚本配置 未启动时的内存占用,以及减少总体内存占用率
|
||||
6. 修复 Hosts 加速模式下使用仅启用脚本功能导致死循环
|
||||
7. 改进 Linux 端 可监听 443 端口配置
|
||||
8. 修复 Windows 端,动态桌面背景窗口显示时一些可能导致闪退的潜在问题
|
||||
9. 修复 Android 端,因 CheckBox 导致在低于 6.0 Marshmallow 系统上引发的闪退
|
||||
10. 修复 Desktop 高 DPI 分辨率下菜单图标会显示模糊的问题
|
||||
11. 修复 Windows 端,切换至网络加速菜单时可能会出现 UI 错乱的问题
|
||||
12. 修复 Desktop 端,某些情况库存游戏会卡住无限加载的问题
|
||||
13. 修复 网络加速 Onedrive 加速失效问题
|
||||
14. 修复 消息框不再提醒复选框勾上可能不生效的问题
|
||||
15. 修复 Windows 端, JumpList 切换 Steam Beta 账号失效的问题
|
||||
16. 修复 ASF,当使用 IPC.config 时,程序内打开网页端口号值不正确
|
||||
1. 修复 窗口在某些情况下最大化或最小化恢复时窗口大小会变化的问题
|
||||
2. 修复 库存游戏 编辑 Steam 游戏封面时选择自定义图片失败的问题
|
||||
3. 修复 程序内在显示某些图片时会出现错乱马赛克的问题
|
||||
4. 修复 Linux 上点击关于页面可能因字体引发闪退
|
||||
5. 修复 MIUI Android 11 ~ 12 中绑定或换绑手机号页面闪退
|
||||
6. 修复 Android 本地加速中已知问题弹窗显示时不应同时跳转引导证书页
|
||||
|
||||
<!--
|
||||
|
||||
TODO:
|
||||
Android 第三方快速登录回调改为 URL Scheme
|
||||
修复 Android 检查更新检测不到最新版本的问题
|
||||
|
||||
|
||||
### 已知问题
|
||||
- 除 Windows 之外的平台此软件自动更新尚不可用
|
||||
@@ -59,9 +65,11 @@
|
||||
- 本地加速
|
||||
- 因 Android 7(Nougat API 24) 之后的版本不在信任用户证书,所以此功能已放弃继续开发,如仍想使用需要自行导入证书到系统目录,使用 adb 工具或 Magisk 之类的软件操作,未来会使用不需要证书的加速功能替换此功能
|
||||
|
||||
-->
|
||||
|
||||
[](https://steampp.net)
|
||||
[]()
|
||||
|
||||
[](https://steampp.net)
|
||||
[]()
|
||||
|
||||
|
||||
##### [不知道该下载哪个文件?](./download-guide.md)
|
||||
@@ -70,22 +78,28 @@
|
||||
### 文件校验
|
||||
| File | Checksum (SHA256) |
|
||||
| ---- | ---- |
|
||||
| Steam++_win_x64_v2.7.0.7z | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.7.0.7z | SHA256 |
|
||||
| Steam++_win_x64_v2.8.0.7z | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.8.0.7z | SHA256 |
|
||||
| | |
|
||||
| Steam++_win_x64_v2.7.0.exe | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.7.0.exe | SHA256 |
|
||||
| Steam++_win_x64_v2.8.0.exe | SHA256 |
|
||||
| Steam++_win_x64_fde_v2.8.0.exe | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.7.0.7z | SHA256 |
|
||||
| Steam++_linux_arm64_v2.7.0.7z | SHA256 |
|
||||
| Steam++_win_x86_v2.8.0.7z | SHA256 |
|
||||
| Steam++_win_x86_fde_v2.8.0.7z | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.7.0.deb | SHA256 |
|
||||
| Steam++_linux_arm64_v2.7.0.deb | SHA256 |
|
||||
| Steam++_win_x86_v2.8.0.exe | SHA256 |
|
||||
| Steam++_win_x86_fde_v2.8.0.exe | SHA256 |
|
||||
| | |
|
||||
| Steam++_linux_x64_v2.7.0.rpm | SHA256 |
|
||||
| Steam++_linux_arm64_v2.7.0.rpm | SHA256 |
|
||||
| Steam++_linux_x64_v2.8.0.7z | SHA256 |
|
||||
| Steam++_linux_arm64_v2.8.0.7z | SHA256 |
|
||||
| | |
|
||||
| Steam++_macos_x64_v2.7.0.dmg | SHA256 |
|
||||
| Steam++_macos_arm64_v2.7.0.dmg | SHA256 |
|
||||
| Steam++_linux_x64_v2.8.0.deb | SHA256 |
|
||||
| Steam++_linux_arm64_v2.8.0.deb | SHA256 |
|
||||
| | |
|
||||
| Steam++_android_v2.7.0.apk | SHA256 |
|
||||
| Steam++_linux_x64_v2.8.0.rpm | SHA256 |
|
||||
| Steam++_linux_arm64_v2.8.0.rpm | SHA256 |
|
||||
| | |
|
||||
| Steam++_macos_x64_v2.8.0.dmg | SHA256 |
|
||||
| Steam++_macos_arm64_v2.8.0.dmg | SHA256 |
|
||||
| | |
|
||||
| Steam++_android_v2.8.0.apk | SHA256 |
|
||||
|
||||
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
@@ -1,104 +1,102 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
namespace System;
|
||||
|
||||
namespace System
|
||||
public static partial class ProjectPathUtil
|
||||
{
|
||||
public static partial class ProjectPathUtil
|
||||
#pragma warning disable SA1307 // Accessible fields should begin with upper-case letter
|
||||
public static readonly string projPath;
|
||||
#pragma warning restore SA1307 // Accessible fields should begin with upper-case letter
|
||||
|
||||
public const string ProjectDir_AvaloniaAppBridge = "ST.Client.Desktop.Avalonia.App.Bridge";
|
||||
public const string ProjectDir_ConsoleAppBridge = "ST.Client.Desktop.Console.App.Bridge";
|
||||
public const string ProjectDir_ConsoleAppBridgePackage = "ST.Client.Desktop.Avalonia.App.Bridge.Package";
|
||||
public const string ProjectDir_AvaloniaApp = "ST.Client.Desktop.Avalonia.App";
|
||||
public const string ProjectDir_Win7Troubleshoot = "ST.Tools.Win7Troubleshoot";
|
||||
public const string ProjectDir_CoreLib = "Common.CoreLib";
|
||||
public const string ProjectDir_ClienDroidLib = "Common.ClientLib.Droid";
|
||||
public const string ProjectDir_ClientDesktop = "ST.Client.Desktop";
|
||||
public const string ProjectDir_ST = "ST";
|
||||
public const string ProjectDir_STClient = "ST.Client";
|
||||
|
||||
public const string release_template_md =
|
||||
@"\release-template.md";
|
||||
|
||||
[Obsolete("use MainDllPath_", true)]
|
||||
public const string MainDllPath =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Steam++.dll";
|
||||
|
||||
public const string MainDllPath_ =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\{0}\Steam++.dll";
|
||||
|
||||
[Obsolete("use DirPublishWinX86_")]
|
||||
public const string DirPublishWinX86 =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Publish\win-x86";
|
||||
|
||||
public const string DirPublishWinX86_ =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\{0}\Publish\win-x86";
|
||||
|
||||
[Obsolete("use DirPublishWinX64_", true)]
|
||||
public const string DirPublishWinX64 =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Publish\win-x64";
|
||||
|
||||
[Obsolete("use DirPublishWinX64_FDE_", true)]
|
||||
public const string DirPublishWinX64_FDE =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Publish\FrameworkDependent\win-x64";
|
||||
|
||||
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";
|
||||
|
||||
[Obsolete("use DirPublish_", true)]
|
||||
public const string DirPublish =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Publish";
|
||||
|
||||
public const string DirPublish_ =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\{0}\Publish";
|
||||
|
||||
public const string DirPublish_FDE_ =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\{0}\Publish\FrameworkDependent";
|
||||
|
||||
//public const string DirPublish_Win7Troubleshoot =
|
||||
// @"\src\" + ProjectDir_Win7Troubleshoot + @"\bin\Release\Publish\net35";
|
||||
|
||||
static ProjectPathUtil()
|
||||
{
|
||||
public static readonly string projPath;
|
||||
|
||||
public const string ProjectDir_AvaloniaAppBridge = "ST.Client.Desktop.Avalonia.App.Bridge";
|
||||
public const string ProjectDir_ConsoleAppBridge = "ST.Client.Desktop.Console.App.Bridge";
|
||||
public const string ProjectDir_ConsoleAppBridgePackage = "ST.Client.Desktop.Avalonia.App.Bridge.Package";
|
||||
public const string ProjectDir_AvaloniaApp = "ST.Client.Desktop.Avalonia.App";
|
||||
public const string ProjectDir_Win7Troubleshoot = "ST.Tools.Win7Troubleshoot";
|
||||
public const string ProjectDir_CoreLib = "Common.CoreLib";
|
||||
public const string ProjectDir_ClienDroidLib = "Common.ClientLib.Droid";
|
||||
public const string ProjectDir_ClientDesktop = "ST.Client.Desktop";
|
||||
public const string ProjectDir_ST = "ST";
|
||||
public const string ProjectDir_STClient = "ST.Client";
|
||||
|
||||
public const string release_template_md =
|
||||
@"\release-template.md";
|
||||
|
||||
[Obsolete("use MainDllPath_", true)]
|
||||
public const string MainDllPath =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Steam++.dll";
|
||||
|
||||
public const string MainDllPath_ =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\{0}\Steam++.dll";
|
||||
|
||||
[Obsolete("use DirPublishWinX86_")]
|
||||
public const string DirPublishWinX86 =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Publish\win-x86";
|
||||
|
||||
public const string DirPublishWinX86_ =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\{0}\Publish\win-x86";
|
||||
|
||||
[Obsolete("use DirPublishWinX64_", true)]
|
||||
public const string DirPublishWinX64 =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Publish\win-x64";
|
||||
|
||||
[Obsolete("use DirPublishWinX64_FDE_", true)]
|
||||
public const string DirPublishWinX64_FDE =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Publish\FrameworkDependent\win-x64";
|
||||
|
||||
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";
|
||||
|
||||
[Obsolete("use DirPublish_", true)]
|
||||
public const string DirPublish =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\Release\Publish";
|
||||
|
||||
public const string DirPublish_ =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\{0}\Publish";
|
||||
|
||||
public const string DirPublish_FDE_ =
|
||||
@"\src\" + ProjectDir_AvaloniaApp + @"\bin\{0}\Publish\FrameworkDependent";
|
||||
|
||||
//public const string DirPublish_Win7Troubleshoot =
|
||||
// @"\src\" + ProjectDir_Win7Troubleshoot + @"\bin\Release\Publish\net35";
|
||||
|
||||
static ProjectPathUtil()
|
||||
projPath = GetProjectPath();
|
||||
if (!Directory.Exists(Path.Combine(projPath, ProjectDir_AvaloniaApp)))
|
||||
{
|
||||
projPath = GetProjectPath();
|
||||
if (!Directory.Exists(Path.Combine(projPath, ProjectDir_AvaloniaApp)))
|
||||
{
|
||||
projPath = GetProjectPathByServerTool();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前项目绝对路径(.sln文件所在目录)
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
/// <returns></returns>
|
||||
static string GetProjectPath(string? path = null)
|
||||
{
|
||||
path ??= AppContext.BaseDirectory;
|
||||
if (!Directory.GetFiles(path, "*.sln").Any())
|
||||
{
|
||||
var parent = Directory.GetParent(path);
|
||||
if (parent == null) return string.Empty;
|
||||
return GetProjectPath(parent.FullName);
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取公开客户端项目绝对路径,仅供服务端工具项目中使用
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
static string GetProjectPathByServerTool()
|
||||
{
|
||||
var projPath_ = GetProjectPath();
|
||||
return Path.GetFullPath(Path.Combine(projPath_, "..", "SteamTools"));
|
||||
projPath = GetProjectPathByServerTool();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前项目绝对路径(.sln文件所在目录)
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
/// <returns></returns>
|
||||
static string GetProjectPath(string? path = null)
|
||||
{
|
||||
path ??= AppContext.BaseDirectory;
|
||||
if (!Directory.GetFiles(path, "*.sln").Any())
|
||||
{
|
||||
var parent = Directory.GetParent(path);
|
||||
if (parent == null) return string.Empty;
|
||||
return GetProjectPath(parent.FullName);
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取公开客户端项目绝对路径,仅供服务端工具项目中使用
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
static string GetProjectPathByServerTool()
|
||||
{
|
||||
var projPath_ = GetProjectPath();
|
||||
return Path.GetFullPath(Path.Combine(projPath_, "..", "SteamTools"));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc.--><g fill="#3ddc84"><path d="M420.55,301.93a24,24,0,1,1,24-24,24,24,0,0,1-24,24m-265.1,0a24,24,0,1,1,24-24,24,24,0,0,1-24,24m273.7-144.48,47.94-83a10,10,0,1,0-17.27-10h0l-48.54,84.07a301.25,301.25,0,0,0-246.56,0L116.18,64.45a10,10,0,1,0-17.27,10h0l47.94,83C64.53,202.22,8.24,285.55,0,384H576c-8.24-98.45-64.54-181.78-146.85-226.55"/></g></svg>
|
||||
|
After Width: | Height: | Size: 570 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc.--><g fill="#A2AAAD"><path d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 704 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc.--><g fill="#E95420"><path d="M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 152 KiB |
|
After Width: | Height: | Size: 152 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 829 KiB |
|
Before Width: | Height: | Size: 660 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc.--><g fill="#00adef"><path d="M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 404 B |
@@ -6,7 +6,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
<PackageReference Include="Portable.BouncyCastle" Version="1.8.10" />
|
||||
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="5.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<PackageReference Include="Gameloop.Vdf" Version="0.6.1" />
|
||||
<PackageReference Include="log4net" Version="2.0.12" />
|
||||
<PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
<PackageReference Include="Ninject" Version="3.3.4" />
|
||||
<PackageReference Include="Portable.BouncyCastle" Version="1.8.10" />
|
||||
<PackageReference Include="SharpZipLib" Version="1.3.3" />
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
<PackageReference Include="LivetCask.Mvvm" Version="3.2.3.2" />
|
||||
<PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.31" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
<PackageReference Include="System.Reactive" Version="5.0.0" />
|
||||
|
||||
<PackageReference Include="System.IO.FileSystem" Version="4.3.0" />
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform;
|
||||
|
||||
// https://github.com/AvaloniaUI/Avalonia/blob/0.10.13/src/Avalonia.Desktop/AppBuilderDesktopExtensions.cs
|
||||
|
||||
namespace Avalonia
|
||||
{
|
||||
public static class AppBuilderDesktopExtensions
|
||||
{
|
||||
public static TAppBuilder UsePlatformDetect<TAppBuilder>(this TAppBuilder builder)
|
||||
where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
|
||||
{
|
||||
#if WINDOWS
|
||||
builder.UseWin32();
|
||||
#else
|
||||
var os = builder.RuntimePlatform.GetRuntimeInfo().OperatingSystem;
|
||||
|
||||
// We don't have the ability to load every assembly right now, so we are
|
||||
// stuck with manual configuration here
|
||||
// Helpers are extracted to separate methods to take the advantage of the fact
|
||||
// that CLR doesn't try to load dependencies before referencing method is jitted
|
||||
// Additionally, by having a hard reference to each assembly,
|
||||
// we verify that the assemblies are in the final .deps.json file
|
||||
// so .NET Core knows where to load the assemblies from,.
|
||||
switch (os)
|
||||
{
|
||||
case OperatingSystemType.WinNT:
|
||||
builder.UseWin32();
|
||||
break;
|
||||
case OperatingSystemType.OSX:
|
||||
builder.UseAvaloniaNative();
|
||||
break;
|
||||
default:
|
||||
builder.UseX11();
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
builder.UseSkia();
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net6.0;net6.0-windows</TargetFrameworks>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<DelaySign>false</DelaySign>
|
||||
<AssemblyOriginatorKeyFile>$(MSBuildProjectDirectory)\..\..\avalonia.snk</AssemblyOriginatorKeyFile>
|
||||
<!--https://github.com/AvaloniaUI/Avalonia/blob/0.10.10/build/SharedVersion.props#L18-->
|
||||
<IsTrimmable>true</IsTrimmable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\AssemblyInfo.Version.Max.cs">
|
||||
<LinkBase>Properties</LinkBase>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Avalonia.Skia.Internals\Avalonia.Skia.Internals.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia.Win32" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" !$(TargetFramework.Contains('-windows')) ">
|
||||
<PackageReference Include="Avalonia.X11" />
|
||||
<PackageReference Include="Avalonia.Native" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -1,11 +1,12 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<DelaySign>false</DelaySign>
|
||||
<AssemblyOriginatorKeyFile>$(MSBuildProjectDirectory)\..\..\avalonia.snk</AssemblyOriginatorKeyFile>
|
||||
<!--https://github.com/AvaloniaUI/Avalonia/blob/0.10.10/build/SharedVersion.props#L18-->
|
||||
<IsTrimmable>true</IsTrimmable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<DelaySign>false</DelaySign>
|
||||
<AssemblyOriginatorKeyFile>$(MSBuildProjectDirectory)\..\..\avalonia.snk</AssemblyOriginatorKeyFile>
|
||||
<!--https://github.com/AvaloniaUI/Avalonia/blob/0.10.10/build/SharedVersion.props#L18-->
|
||||
<IsTrimmable>true</IsTrimmable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -14,4 +15,8 @@
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using Avalonia.Controls;
|
||||
|
||||
namespace Avalonia
|
||||
{
|
||||
public static class AvaloniaNativePlatformExtensions
|
||||
{
|
||||
public static T UseAvaloniaNative<T>(this T builder) where T : AppBuilderBase<T>, new()
|
||||
{
|
||||
throw new PlatformNotSupportedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,4 +18,8 @@
|
||||
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Common.CoreLib\Common.CoreLib.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
extern alias AvaloniaSkia;
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using Avalonia.Platform;
|
||||
using AvaloniaSkia::Avalonia.Skia.Helpers;
|
||||
using Avalonia.Visuals.Media.Imaging;
|
||||
using SkiaSharp;
|
||||
using AvaloniaSkia::Avalonia.Skia;
|
||||
using DrawingContextImpl = AvaloniaSkia::Avalonia.Skia.DrawingContextImpl;
|
||||
using IDrawableBitmapImpl = AvaloniaSkia::Avalonia.Skia.IDrawableBitmapImpl;
|
||||
|
||||
// https://github.com/AvaloniaUI/Avalonia/blob/0.10.13/src/Skia/Avalonia.Skia/ImmutableBitmap.cs
|
||||
|
||||
namespace Avalonia.Skia
|
||||
{
|
||||
/// <summary>
|
||||
/// Immutable Skia bitmap.
|
||||
/// </summary>
|
||||
internal class ImmutableBitmap : IDrawableBitmapImpl
|
||||
{
|
||||
private readonly SKImage _image;
|
||||
|
||||
public ImmutableBitmap(SKImage image)
|
||||
{
|
||||
_image = image;
|
||||
|
||||
if (_image == null)
|
||||
{
|
||||
throw new ArgumentException("Unable to load bitmap from provided data");
|
||||
}
|
||||
|
||||
PixelSize = new PixelSize(_image.Width, _image.Height);
|
||||
|
||||
// TODO: Skia doesn't have an API for DPI.
|
||||
Dpi = new Vector(96, 96);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create immutable bitmap from given stream.
|
||||
/// </summary>
|
||||
/// <param name="stream">Stream containing encoded data.</param>
|
||||
public ImmutableBitmap(Stream stream) : this(SkiaSharpHelpers.FromEncodedData(stream))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public ImmutableBitmap(ImmutableBitmap src, PixelSize destinationSize, BitmapInterpolationMode interpolationMode)
|
||||
{
|
||||
SKImageInfo info = new SKImageInfo(destinationSize.Width, destinationSize.Height, SKColorType.Bgra8888);
|
||||
SKImage output = SKImage.Create(info);
|
||||
src._image.ScalePixels(output.PeekPixels(), interpolationMode.ToSKFilterQuality());
|
||||
|
||||
_image = output;
|
||||
|
||||
PixelSize = new PixelSize(_image.Width, _image.Height);
|
||||
|
||||
// TODO: Skia doesn't have an API for DPI.
|
||||
Dpi = new Vector(96, 96);
|
||||
}
|
||||
|
||||
public ImmutableBitmap(Stream stream, int decodeSize, bool horizontal, BitmapInterpolationMode interpolationMode) : this(SkiaSharpHelpers.Create(stream), decodeSize, horizontal, interpolationMode)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public ImmutableBitmap(SKBitmap bmp, int decodeSize, bool horizontal, BitmapInterpolationMode interpolationMode)
|
||||
{
|
||||
var info = bmp.Info;
|
||||
|
||||
// now scale that to the size that we want
|
||||
var realScale = horizontal ? ((double)info.Height / info.Width) : ((double)info.Width / info.Height);
|
||||
|
||||
SKImageInfo desired;
|
||||
|
||||
if (horizontal)
|
||||
{
|
||||
desired = new SKImageInfo(decodeSize, (int)(realScale * decodeSize));
|
||||
}
|
||||
else
|
||||
{
|
||||
desired = new SKImageInfo((int)(realScale * decodeSize), decodeSize);
|
||||
}
|
||||
|
||||
if (bmp.Width != desired.Width || bmp.Height != desired.Height)
|
||||
{
|
||||
var scaledBmp = bmp.Resize(desired, interpolationMode.ToSKFilterQuality());
|
||||
bmp.Dispose();
|
||||
bmp = scaledBmp;
|
||||
}
|
||||
|
||||
_image = SKImage.FromBitmap(bmp);
|
||||
bmp.Dispose();
|
||||
|
||||
if (_image == null)
|
||||
{
|
||||
throw new ArgumentException("Unable to load bitmap from provided data");
|
||||
}
|
||||
|
||||
PixelSize = new PixelSize(_image.Width, _image.Height);
|
||||
|
||||
// TODO: Skia doesn't have an API for DPI.
|
||||
Dpi = new Vector(96, 96);
|
||||
}
|
||||
|
||||
static SKBitmap Decode(SKCodec codec, int decodeSize, bool horizontal, bool leaveOpen)
|
||||
{
|
||||
try
|
||||
{
|
||||
var info = codec.Info;
|
||||
|
||||
// get the scale that is nearest to what we want (eg: jpg returned 512)
|
||||
var supportedScale = codec.GetScaledDimensions(horizontal ? ((float)decodeSize / info.Width) : ((float)decodeSize / info.Height));
|
||||
|
||||
// decode the bitmap at the nearest size
|
||||
var nearest = new SKImageInfo(supportedScale.Width, supportedScale.Height);
|
||||
var bmp = SKBitmap.Decode(codec, nearest);
|
||||
|
||||
return bmp;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (!leaveOpen) codec.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public ImmutableBitmap(SKCodec codec, int decodeSize, bool horizontal, BitmapInterpolationMode interpolationMode, bool leaveOpen = false)
|
||||
: this(Decode(codec, decodeSize, horizontal, leaveOpen), decodeSize, horizontal, interpolationMode)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create immutable bitmap from given pixel data copy.
|
||||
/// </summary>
|
||||
/// <param name="size">Size of the bitmap.</param>
|
||||
/// <param name="dpi">DPI of the bitmap.</param>
|
||||
/// <param name="stride">Stride of data pixels.</param>
|
||||
/// <param name="format">Format of data pixels.</param>
|
||||
/// <param name="alphaFormat">Alpha format of data pixels.</param>
|
||||
/// <param name="data">Data pixels.</param>
|
||||
public ImmutableBitmap(PixelSize size, Vector dpi, int stride, PixelFormat format, AlphaFormat alphaFormat, IntPtr data)
|
||||
{
|
||||
var imageInfo = new SKImageInfo(size.Width, size.Height, format.ToSkColorType(), alphaFormat.ToSkAlphaType());
|
||||
|
||||
_image = SKImage.FromPixelCopy(imageInfo, data, stride);
|
||||
|
||||
if (_image == null)
|
||||
{
|
||||
throw new ArgumentException("Unable to create bitmap from provided data");
|
||||
}
|
||||
|
||||
PixelSize = size;
|
||||
Dpi = dpi;
|
||||
}
|
||||
|
||||
public Vector Dpi { get; }
|
||||
|
||||
public PixelSize PixelSize { get; }
|
||||
|
||||
public int Version { get; } = 1;
|
||||
|
||||
/// <inheritdoc />
|
||||
public void Dispose()
|
||||
{
|
||||
_image.Dispose();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void Save(string fileName)
|
||||
{
|
||||
ImageSavingHelper.SaveImage(_image, fileName);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void Save(Stream stream)
|
||||
{
|
||||
ImageSavingHelper.SaveImage(_image, stream);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void Draw(DrawingContextImpl context, SKRect sourceRect, SKRect destRect, SKPaint paint)
|
||||
{
|
||||
context.Canvas.DrawImage(_image, sourceRect, destRect, paint);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
extern alias AvaloniaSkia;
|
||||
|
||||
using Avalonia.Platform;
|
||||
using Avalonia.Visuals.Media.Imaging;
|
||||
using System;
|
||||
using System.IO;
|
||||
using ISkiaGpu = AvaloniaSkia::Avalonia.Skia.ISkiaGpu;
|
||||
using @this = AvaloniaSkia::Avalonia.Skia.PlatformRenderInterface;
|
||||
|
||||
// https://github.com/AvaloniaUI/Avalonia/blob/0.10.13/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs
|
||||
|
||||
namespace Avalonia.Skia
|
||||
{
|
||||
sealed class PlatformRenderInterface : @this, IPlatformRenderInterface
|
||||
{
|
||||
public PlatformRenderInterface(ISkiaGpu? skiaGpu, long? maxResourceBytes = null) : base(skiaGpu, maxResourceBytes)
|
||||
{
|
||||
}
|
||||
|
||||
IBitmapImpl IPlatformRenderInterface.LoadBitmap(Stream stream)
|
||||
{
|
||||
return new ImmutableBitmap(stream);
|
||||
}
|
||||
|
||||
IBitmapImpl IPlatformRenderInterface.LoadBitmap(PixelFormat format, AlphaFormat alphaFormat, IntPtr data, PixelSize size, Vector dpi, int stride)
|
||||
{
|
||||
return new ImmutableBitmap(size, dpi, stride, format, alphaFormat, data);
|
||||
}
|
||||
|
||||
IBitmapImpl IPlatformRenderInterface.LoadBitmapToWidth(Stream stream, int width, BitmapInterpolationMode interpolationMode)
|
||||
{
|
||||
return new ImmutableBitmap(stream, width, true, interpolationMode);
|
||||
}
|
||||
|
||||
IBitmapImpl IPlatformRenderInterface.LoadBitmapToHeight(Stream stream, int height, BitmapInterpolationMode interpolationMode)
|
||||
{
|
||||
return new ImmutableBitmap(stream, height, false, interpolationMode);
|
||||
}
|
||||
|
||||
IBitmapImpl IPlatformRenderInterface.ResizeBitmap(IBitmapImpl bitmapImpl, PixelSize destinationSize, BitmapInterpolationMode interpolationMode)
|
||||
{
|
||||
if (bitmapImpl is ImmutableBitmap ibmp)
|
||||
{
|
||||
return new ImmutableBitmap(ibmp, destinationSize, interpolationMode);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Invalid source bitmap type.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
extern alias AvaloniaSkia;
|
||||
|
||||
using Avalonia.Platform;
|
||||
using SkiaOptions = AvaloniaSkia::Avalonia.SkiaOptions;
|
||||
|
||||
// https://github.com/AvaloniaUI/Avalonia/blob/0.10.13/src/Skia/Avalonia.Skia/SkiaPlatform.cs#L18-L27
|
||||
|
||||
namespace Avalonia.Skia
|
||||
{
|
||||
public static class SkiaPlatform2
|
||||
{
|
||||
public static readonly IPlatformRenderInterface PlatformRenderInterface = GetPlatformRenderInterface();
|
||||
|
||||
static IPlatformRenderInterface GetPlatformRenderInterface()
|
||||
{
|
||||
var options = AvaloniaLocator.Current.GetService<SkiaOptions>() ?? new();
|
||||
var customGpu = options.CustomGpuFactory?.Invoke();
|
||||
var renderInterface = new PlatformRenderInterface(customGpu, options.MaxGpuResourceSizeBytes);
|
||||
return renderInterface;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
extern alias AvaloniaSkia;
|
||||
|
||||
using System.IO;
|
||||
using SkiaSharp;
|
||||
using Avalonia.Media.Imaging;
|
||||
using Avalonia.Utilities;
|
||||
using Avalonia.Visuals.Media.Imaging;
|
||||
|
||||
namespace Avalonia.Skia
|
||||
{
|
||||
public static class SkiaSharpHelpers
|
||||
{
|
||||
static SKCodec CreateCore(IFileStreamWrapper fileStreamWrapper)
|
||||
{
|
||||
return SKCodec.Create(fileStreamWrapper.Name);
|
||||
}
|
||||
|
||||
static SKCodec CreateCore(FileStream fileStream, bool disposeManagedStream = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
var filename = fileStream.Name;
|
||||
return SKCodec.Create(filename);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (disposeManagedStream) fileStream.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
static SKCodec CreateCore(Stream stream, bool disposeManagedStream = false)
|
||||
{
|
||||
using var skStream = new SKManagedStream(stream, disposeManagedStream);
|
||||
return SKCodec.Create(skStream);
|
||||
}
|
||||
|
||||
public static SKCodec Create(Stream stream)
|
||||
{
|
||||
if (stream is IFileStreamWrapper fileStreamWrapper)
|
||||
{
|
||||
return CreateCore(fileStreamWrapper);
|
||||
}
|
||||
else if (stream is FileStream fileStream)
|
||||
{
|
||||
return CreateCore(fileStream);
|
||||
}
|
||||
else
|
||||
{
|
||||
return CreateCore(stream);
|
||||
}
|
||||
}
|
||||
|
||||
public static SKImage FromEncodedDataCore(IFileStreamWrapper fileStreamWrapper)
|
||||
{
|
||||
return SKImage.FromEncodedData(fileStreamWrapper.Name);
|
||||
}
|
||||
|
||||
public static SKImage FromEncodedDataCore(FileStream fileStream, bool disposeManagedStream = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
var filename = fileStream.Name;
|
||||
return SKImage.FromEncodedData(filename);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (disposeManagedStream) fileStream.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public static SKImage FromEncodedDataCore(MemoryStream memoryStream, bool disposeManagedStream = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
using var data = SKData.CreateCopy(memoryStream.ToArray());
|
||||
return SKImage.FromEncodedData(data);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (disposeManagedStream) memoryStream.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public static SKImage FromEncodedDataCore(Stream stream, bool disposeManagedStream = false)
|
||||
{
|
||||
using var skStream = new SKManagedStream(stream, disposeManagedStream);
|
||||
using var data = SKData.Create(skStream);
|
||||
if (data != null) return SKImage.FromEncodedData(data);
|
||||
|
||||
if (stream.CanSeek) stream.Position = 0;
|
||||
using var ms = new MemoryStream();
|
||||
stream.CopyTo(ms);
|
||||
ms.Seek(0, SeekOrigin.Begin);
|
||||
// https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/basics/bitmaps#loading-a-bitmap-from-the-web
|
||||
return FromEncodedDataCore(ms, disposeManagedStream: true);
|
||||
}
|
||||
|
||||
public static SKImage FromEncodedData(Stream stream)
|
||||
{
|
||||
if (stream is IFileStreamWrapper fileStreamWrapper)
|
||||
{
|
||||
return FromEncodedDataCore(fileStreamWrapper);
|
||||
}
|
||||
else if (stream is FileStream fileStream)
|
||||
{
|
||||
return FromEncodedDataCore(fileStream);
|
||||
}
|
||||
else if (stream is MemoryStream memoryStream)
|
||||
{
|
||||
try
|
||||
{
|
||||
return FromEncodedDataCore(memoryStream);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
return FromEncodedDataCore(stream);
|
||||
}
|
||||
|
||||
static Bitmap GetBitmap(this ImmutableBitmap bitmap) => new(RefCountable.Create(bitmap));
|
||||
|
||||
public static Bitmap GetBitmap(SKImage image) => new ImmutableBitmap(image).GetBitmap();
|
||||
|
||||
public static Bitmap GetBitmap(SKBitmap bitmap)
|
||||
{
|
||||
var image = SKImage.FromBitmap(bitmap);
|
||||
return GetBitmap(image);
|
||||
}
|
||||
|
||||
public static Bitmap DecodeToWidth(SKBitmap bitmap, int width, BitmapInterpolationMode interpolationMode = BitmapInterpolationMode.HighQuality) => new ImmutableBitmap(bitmap, width, true, interpolationMode).GetBitmap();
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<DelaySign>false</DelaySign>
|
||||
<AssemblyOriginatorKeyFile>$(MSBuildProjectDirectory)\..\..\avalonia.snk</AssemblyOriginatorKeyFile>
|
||||
<!--https://github.com/AvaloniaUI/Avalonia/blob/0.10.10/build/SharedVersion.props#L18-->
|
||||
<IsTrimmable>true</IsTrimmable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<DelaySign>false</DelaySign>
|
||||
<AssemblyOriginatorKeyFile>$(MSBuildProjectDirectory)\..\..\avalonia.snk</AssemblyOriginatorKeyFile>
|
||||
<!--https://github.com/AvaloniaUI/Avalonia/blob/0.10.10/build/SharedVersion.props#L18-->
|
||||
<IsTrimmable>true</IsTrimmable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<DelaySign>false</DelaySign>
|
||||
<AssemblyOriginatorKeyFile>$(MSBuildProjectDirectory)\..\..\avalonia.snk</AssemblyOriginatorKeyFile>
|
||||
<!--https://github.com/AvaloniaUI/Avalonia/blob/0.10.10/build/SharedVersion.props#L18-->
|
||||
<IsTrimmable>true</IsTrimmable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\AssemblyInfo.Version.Max.cs">
|
||||
<LinkBase>Properties</LinkBase>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using WebView2BaseType = Avalonia.Controls.Shapes.Rectangle;
|
||||
|
||||
namespace Avalonia.Controls;
|
||||
|
||||
public partial class WebView2 : WebView2BaseType
|
||||
{
|
||||
public static bool IsSupported { get; }
|
||||
|
||||
public static readonly DirectProperty<WebView2, Uri?> SourceProperty =
|
||||
AvaloniaProperty.RegisterDirect<WebView2, Uri?>(
|
||||
nameof(Uri),
|
||||
x => x.source,
|
||||
(x, y) => x.Source = y);
|
||||
|
||||
Uri? source;
|
||||
|
||||
public Uri? Source
|
||||
{
|
||||
get => source;
|
||||
set => SetAndRaise(SourceProperty, ref source, value);
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<DelaySign>false</DelaySign>
|
||||
<AssemblyOriginatorKeyFile>$(MSBuildProjectDirectory)\..\..\avalonia.snk</AssemblyOriginatorKeyFile>
|
||||
<!--https://github.com/AvaloniaUI/Avalonia/blob/0.10.10/build/SharedVersion.props#L18-->
|
||||
<IsTrimmable>true</IsTrimmable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -14,4 +15,8 @@
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using Avalonia.Controls;
|
||||
|
||||
namespace Avalonia
|
||||
{
|
||||
public static class Win32ApplicationExtensions
|
||||
{
|
||||
public static T UseWin32<T>(this T builder) where T : AppBuilderBase<T>, new()
|
||||
{
|
||||
throw new PlatformNotSupportedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<DelaySign>false</DelaySign>
|
||||
<AssemblyOriginatorKeyFile>$(MSBuildProjectDirectory)\..\..\avalonia.snk</AssemblyOriginatorKeyFile>
|
||||
<!--https://github.com/AvaloniaUI/Avalonia/blob/0.10.10/build/SharedVersion.props#L18-->
|
||||
<IsTrimmable>true</IsTrimmable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -14,4 +15,8 @@
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using Avalonia.Controls;
|
||||
|
||||
namespace Avalonia
|
||||
{
|
||||
public static class AvaloniaX11PlatformExtensions
|
||||
{
|
||||
public static T UseX11<T>(this T builder) where T : AppBuilderBase<T>, new()
|
||||
{
|
||||
throw new PlatformNotSupportedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,13 @@
|
||||
namespace System.Application
|
||||
namespace System.Application;
|
||||
|
||||
/// <summary>
|
||||
/// 地区等级
|
||||
/// </summary>
|
||||
public enum AreaLevel : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// 地区等级
|
||||
/// </summary>
|
||||
public enum AreaLevel : byte
|
||||
{
|
||||
省或直辖市或特别行政区 = 2,
|
||||
省或直辖市或特别行政区 = 2,
|
||||
|
||||
市_不包括直辖市 = 3,
|
||||
市_不包括直辖市 = 3,
|
||||
|
||||
区县_县级市 = 4,
|
||||
}
|
||||
区县_县级市 = 4,
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
#if !AREA_LIB
|
||||
#if !AREA_LIB
|
||||
using System.Diagnostics;
|
||||
using MPKey = MessagePack.KeyAttribute;
|
||||
using MPObj = MessagePack.MessagePackObjectAttribute;
|
||||
@@ -19,96 +19,95 @@ using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
#endif
|
||||
|
||||
namespace System.Application.Entities
|
||||
namespace System.Application.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 地区表、模型
|
||||
/// </summary>
|
||||
[MPObj]
|
||||
[DebuggerDisplay("{DebuggerDisplay(),nq}")]
|
||||
#if ORM_SQLITE_PCL
|
||||
[SQLiteTable("T99719D58")]
|
||||
#endif
|
||||
public sealed class Area : IArea
|
||||
{
|
||||
string DebuggerDisplay() => $"{Name}, {Id}";
|
||||
|
||||
/// <summary>
|
||||
/// 地区表、模型
|
||||
/// 地区Id
|
||||
/// </summary>
|
||||
[MPObj]
|
||||
[DebuggerDisplay("{DebuggerDisplay(),nq}")]
|
||||
#if ORM_SQLITE_PCL
|
||||
[SQLiteTable("T99719D58")]
|
||||
#endif
|
||||
public sealed class Area : IArea
|
||||
{
|
||||
string DebuggerDisplay() => $"{Name}, {Id}";
|
||||
|
||||
/// <summary>
|
||||
/// 地区Id
|
||||
/// </summary>
|
||||
#if ORM_SQLITE_PCL
|
||||
[SQLiteColumn("C27B42999")]
|
||||
[SQLitePrimaryKey] // SQLitePCL 主键
|
||||
[SQLiteColumn("C27B42999")]
|
||||
[SQLitePrimaryKey] // SQLitePCL 主键
|
||||
#endif
|
||||
#if ORM_EF_CORE
|
||||
[Key] // EF 主键
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)] // EF 不自增
|
||||
[Key] // EF 主键
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)] // EF 不自增
|
||||
#endif
|
||||
[MPKey(0)]
|
||||
[N_JsonProperty("0")]
|
||||
[S_JsonProperty("0")]
|
||||
public int Id { get; set; }
|
||||
[MPKey(0)]
|
||||
[N_JsonProperty("0")]
|
||||
[S_JsonProperty("0")]
|
||||
public int Id { get; set; }
|
||||
|
||||
#if ORM_SQLITE_PCL
|
||||
[SQLiteColumn("CD57FE61B")]
|
||||
[SQLiteRequired] // SQLitePCL not null
|
||||
[SQLiteMaxLength(IArea.Length_AreaName)] // SQLitePCL MaxLength
|
||||
[SQLiteColumn("CD57FE61B")]
|
||||
[SQLiteRequired] // SQLitePCL not null
|
||||
[SQLiteMaxLength(IArea.Length_AreaName)] // SQLitePCL MaxLength
|
||||
#endif
|
||||
#if ORM_EF_CORE
|
||||
[Required] // EF not null
|
||||
[MaxLength(IArea.Length_AreaName)] // EF MaxLength
|
||||
[Required] // EF not null
|
||||
[MaxLength(IArea.Length_AreaName)] // EF MaxLength
|
||||
#endif
|
||||
[MPKey(1)]
|
||||
[N_JsonProperty("1")]
|
||||
[S_JsonProperty("1")]
|
||||
public string? Name { get; set; }
|
||||
[MPKey(1)]
|
||||
[N_JsonProperty("1")]
|
||||
[S_JsonProperty("1")]
|
||||
public string? Name { get; set; }
|
||||
|
||||
#if ORM_SQLITE_PCL
|
||||
[SQLiteColumn("CF967FC52")]
|
||||
[SQLiteRequired] // SQLitePCL not null
|
||||
[SQLiteIndexed] // SQLitePCL 索引
|
||||
[SQLiteColumn("CF967FC52")]
|
||||
[SQLiteRequired] // SQLitePCL not null
|
||||
[SQLiteIndexed] // SQLitePCL 索引
|
||||
#endif
|
||||
#if ORM_EF_CORE
|
||||
[Required] // EF not null
|
||||
[Required] // EF not null
|
||||
#endif
|
||||
[MPKey(2)]
|
||||
[N_JsonProperty("2")]
|
||||
[S_JsonProperty("2")]
|
||||
public AreaLevel Level { get; set; }
|
||||
[MPKey(2)]
|
||||
[N_JsonProperty("2")]
|
||||
[S_JsonProperty("2")]
|
||||
public AreaLevel Level { get; set; }
|
||||
|
||||
#if ORM_SQLITE_PCL
|
||||
[SQLiteColumn("CDB19A0B9")]
|
||||
[SQLiteIndexed] // SQLitePCL 索引
|
||||
[SQLiteColumn("CDB19A0B9")]
|
||||
[SQLiteIndexed] // SQLitePCL 索引
|
||||
#endif
|
||||
#if ORM_EF_CORE
|
||||
#endif
|
||||
[MPKey(3)]
|
||||
[N_JsonProperty("3")]
|
||||
[S_JsonProperty("3")]
|
||||
public int? Up { get; set; }
|
||||
[MPKey(3)]
|
||||
[N_JsonProperty("3")]
|
||||
[S_JsonProperty("3")]
|
||||
public int? Up { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 短名称
|
||||
/// </summary>
|
||||
/// <summary>
|
||||
/// 短名称
|
||||
/// </summary>
|
||||
#if ORM_SQLITE_PCL
|
||||
[SQLiteColumn("C996F8471")]
|
||||
[SQLiteColumn("C996F8471")]
|
||||
#endif
|
||||
[MPKey(4)]
|
||||
[N_JsonProperty("4")]
|
||||
[S_JsonProperty("4")]
|
||||
public string? ShortName { get; set; }
|
||||
[MPKey(4)]
|
||||
[N_JsonProperty("4")]
|
||||
[S_JsonProperty("4")]
|
||||
public string? ShortName { get; set; }
|
||||
|
||||
#if ORM_EF_CORE
|
||||
|
||||
/// <summary>
|
||||
/// 设置索引
|
||||
/// </summary>
|
||||
/// <param name="b"></param>
|
||||
public static void Indexed(ModelBuilder b) => b.Entity<Area>().HasIndex(x => new { x.Level, x.Up });
|
||||
/// <summary>
|
||||
/// 设置索引
|
||||
/// </summary>
|
||||
/// <param name="b"></param>
|
||||
public static void Indexed(ModelBuilder b) => b.Entity<Area>().HasIndex(x => new { x.Level, x.Up });
|
||||
|
||||
#endif
|
||||
|
||||
public override string ToString() => IArea.ToString(this);
|
||||
}
|
||||
public override string ToString() => IArea.ToString(this);
|
||||
}
|
||||
#endif
|
||||
@@ -1,34 +1,33 @@
|
||||
namespace System.Application.Entities
|
||||
namespace System.Application.Entities;
|
||||
|
||||
public partial interface IArea : IEntity<int>
|
||||
{
|
||||
public partial interface IArea : IEntity<int>
|
||||
public const int Length_AreaName = 90;
|
||||
|
||||
/// <summary>
|
||||
/// 地区名
|
||||
/// </summary>
|
||||
string? Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 地区等级
|
||||
/// </summary>
|
||||
AreaLevel Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 上一级地区Id
|
||||
/// </summary>
|
||||
int? Up { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 短名称
|
||||
/// </summary>
|
||||
string? ShortName { get; set; }
|
||||
|
||||
protected static string ToString(IArea area)
|
||||
{
|
||||
public const int Length_AreaName = 90;
|
||||
|
||||
/// <summary>
|
||||
/// 地区名
|
||||
/// </summary>
|
||||
string? Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 地区等级
|
||||
/// </summary>
|
||||
AreaLevel Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 上一级地区Id
|
||||
/// </summary>
|
||||
int? Up { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 短名称
|
||||
/// </summary>
|
||||
string? ShortName { get; set; }
|
||||
|
||||
protected static string ToString(IArea area)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(area.ShortName)) return area.ShortName;
|
||||
if (!string.IsNullOrWhiteSpace(area.Name)) return area.Name;
|
||||
return area.Id.ToString();
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(area.ShortName)) return area.ShortName;
|
||||
if (!string.IsNullOrWhiteSpace(area.Name)) return area.Name;
|
||||
return area.Id.ToString();
|
||||
}
|
||||
}
|
||||
@@ -1,18 +1,17 @@
|
||||
using System.Application.Entities;
|
||||
|
||||
namespace System.Application.Services
|
||||
{
|
||||
public interface IAreaResource<out TArea> where TArea : class, IArea
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取所有地区数据
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
TArea[] GetAll();
|
||||
namespace System.Application.Services;
|
||||
|
||||
/// <summary>
|
||||
/// 获取地区默认选择项
|
||||
/// </summary>
|
||||
TArea DefaultSelection { get; }
|
||||
}
|
||||
public interface IAreaResource<out TArea> where TArea : class, IArea
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取所有地区数据
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
TArea[] GetAll();
|
||||
|
||||
/// <summary>
|
||||
/// 获取地区默认选择项
|
||||
/// </summary>
|
||||
TArea DefaultSelection { get; }
|
||||
}
|
||||
@@ -1,58 +1,56 @@
|
||||
using System.Application.Entities;
|
||||
using System.Linq;
|
||||
|
||||
namespace System.Application.Services
|
||||
namespace System.Application.Services;
|
||||
|
||||
internal interface IAreaResourceHelper<TArea> : IAreaResource<TArea> where TArea : class, IArea
|
||||
{
|
||||
internal interface IAreaResourceHelper<TArea> : IAreaResource<TArea> where TArea : class, IArea
|
||||
/// <summary>
|
||||
/// 获取二级地区,如果获取不到则返回自身
|
||||
/// </summary>
|
||||
/// <param name="area"></param>
|
||||
/// <returns></returns>
|
||||
TArea GetSecondaryOrThis(TArea area)
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取二级地区,如果获取不到则返回自身
|
||||
/// </summary>
|
||||
/// <param name="area"></param>
|
||||
/// <returns></returns>
|
||||
TArea GetSecondaryOrThis(TArea area)
|
||||
if (area.Level == AreaLevel.区县_县级市 && area.Up.HasValue)
|
||||
{
|
||||
if (area.Level == AreaLevel.区县_县级市 && area.Up.HasValue)
|
||||
var all = GetAll();
|
||||
var area_up_lever = all.FirstOrDefault(x => x.Id == area.Up.Value);
|
||||
if (area_up_lever == null)
|
||||
{
|
||||
var all = GetAll();
|
||||
var area_up_lever = all.FirstOrDefault(x => x.Id == area.Up.Value);
|
||||
if (area_up_lever == null)
|
||||
var up_lever_string = area.Up.Value.ToString();
|
||||
if (up_lever_string.Length > 2)
|
||||
{
|
||||
var up_lever_string = area.Up.Value.ToString();
|
||||
if (up_lever_string.Length > 2)
|
||||
var up_lever_int32 = (up_lever_string.Substring(0, 2) + "0000").TryParseInt32();
|
||||
if (up_lever_int32.HasValue)
|
||||
{
|
||||
var up_lever_int32 = (up_lever_string.Substring(0, 2) + "0000").TryParseInt32();
|
||||
if (up_lever_int32.HasValue)
|
||||
{
|
||||
area_up_lever = all.FirstOrDefault(x => x.Id == up_lever_int32.Value);
|
||||
}
|
||||
area_up_lever = all.FirstOrDefault(x => x.Id == up_lever_int32.Value);
|
||||
}
|
||||
}
|
||||
|
||||
if (area_up_lever != null)
|
||||
{
|
||||
return area_up_lever;
|
||||
}
|
||||
}
|
||||
return area;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取完整名称,例如[湖南 长沙]
|
||||
/// </summary>
|
||||
/// <param name="area"></param>
|
||||
/// <returns></returns>
|
||||
string GetFullName(TArea area)
|
||||
{
|
||||
if (area.Up.HasValue)
|
||||
if (area_up_lever != null)
|
||||
{
|
||||
var entity = GetAll().FirstOrDefault(x => x.Id == area.Up.Value);
|
||||
if (entity != default)
|
||||
{
|
||||
return $"{entity} {area}";
|
||||
}
|
||||
return area_up_lever;
|
||||
}
|
||||
return area.ToString();
|
||||
}
|
||||
return area;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取完整名称,例如[湖南 长沙]
|
||||
/// </summary>
|
||||
/// <param name="area"></param>
|
||||
/// <returns></returns>
|
||||
string GetFullName(TArea area)
|
||||
{
|
||||
if (area.Up.HasValue)
|
||||
{
|
||||
var entity = GetAll().FirstOrDefault(x => x.Id == area.Up.Value);
|
||||
if (entity != default)
|
||||
{
|
||||
return $"{entity} {area}";
|
||||
}
|
||||
}
|
||||
return area.ToString();
|
||||
}
|
||||
}
|
||||
@@ -1,35 +1,33 @@
|
||||
using MessagePack;
|
||||
using System.Application.Entities;
|
||||
using System.Linq;
|
||||
using System.Properties;
|
||||
|
||||
namespace System.Application.Services.Implementation
|
||||
namespace System.Application.Services.Implementation;
|
||||
|
||||
internal sealed class AreaResourceImpl<TArea> : IAreaResource<TArea>, IAreaResourceHelper<TArea> where TArea : class, IArea
|
||||
{
|
||||
internal sealed class AreaResourceImpl<TArea> : IAreaResource<TArea>, IAreaResourceHelper<TArea> where TArea : class, IArea
|
||||
static readonly Lazy<TArea[]> areas = new(() =>
|
||||
{
|
||||
static readonly Lazy<TArea[]> areas = new(() =>
|
||||
var lz4Options = MessagePackSerializerOptions.Standard.WithCompression(MessagePackCompression.Lz4BlockArray);
|
||||
var areas = MessagePackSerializer.Deserialize<TArea[]>(SR.AMap_adcode_citycode_20210406_xlsx, lz4Options);
|
||||
return areas;
|
||||
});
|
||||
|
||||
public TArea[] GetAll() => areas.Value;
|
||||
|
||||
const int DefaultSelectionId = 110000;
|
||||
|
||||
TArea? mDefaultSelection;
|
||||
|
||||
public TArea DefaultSelection
|
||||
{
|
||||
get
|
||||
{
|
||||
var lz4Options = MessagePackSerializerOptions.Standard.WithCompression(MessagePackCompression.Lz4BlockArray);
|
||||
var areas = MessagePackSerializer.Deserialize<TArea[]>(SR.AMap_adcode_citycode_20210406_xlsx, lz4Options);
|
||||
return areas;
|
||||
});
|
||||
|
||||
public TArea[] GetAll() => areas.Value;
|
||||
|
||||
const int DefaultSelectionId = 110000;
|
||||
|
||||
TArea? mDefaultSelection;
|
||||
|
||||
public TArea DefaultSelection
|
||||
{
|
||||
get
|
||||
if (mDefaultSelection == null)
|
||||
{
|
||||
if (mDefaultSelection == null)
|
||||
{
|
||||
mDefaultSelection = GetAll().FirstOrDefault(x => x.Id == DefaultSelectionId);
|
||||
}
|
||||
return mDefaultSelection;
|
||||
mDefaultSelection = GetAll().FirstOrDefault(x => x.Id == DefaultSelectionId);
|
||||
}
|
||||
return mDefaultSelection;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,211 +1,208 @@
|
||||
//using System;
|
||||
//using System.Collections.Generic;
|
||||
//using System.Linq;
|
||||
|
||||
//namespace System.Application
|
||||
//namespace System.Application;
|
||||
|
||||
///// <summary>
|
||||
///// 高德地图天气现象表
|
||||
///// <para>web api: https://lbs.amap.com/api/webservice/guide/tools/weather-code </para>
|
||||
///// <para>android sdk: https://lbs.amap.com/api/android-sdk/guide/map-tools/weather-code </para>
|
||||
///// </summary>
|
||||
//public static class WeatherCoding
|
||||
//{
|
||||
// /// <summary>
|
||||
// /// 高德地图天气现象表
|
||||
// /// <para>web api: https://lbs.amap.com/api/webservice/guide/tools/weather-code </para>
|
||||
// /// <para>android sdk: https://lbs.amap.com/api/android-sdk/guide/map-tools/weather-code </para>
|
||||
// /// </summary>
|
||||
// public static class WeatherCoding
|
||||
// const string TAG = "WeatherCoding";
|
||||
|
||||
// public const string 未知 = "未知";
|
||||
|
||||
// /// <inheritdoc cref="WeatherCoding"/>
|
||||
// public enum Value
|
||||
// {
|
||||
// const string TAG = "WeatherCoding";
|
||||
// 未知 = 0,
|
||||
// 晴,
|
||||
// 多云,
|
||||
// 阴,
|
||||
// 阵雨,
|
||||
// 雷阵雨,
|
||||
// 雷阵雨并伴有冰雹,
|
||||
// 雨夹雪,
|
||||
// 小雨,
|
||||
// 中雨,
|
||||
// 大雨,
|
||||
// 暴雨,
|
||||
// 大暴雨,
|
||||
// 特大暴雨,
|
||||
// 阵雪,
|
||||
// 小雪,
|
||||
// 中雪,
|
||||
// 大雪,
|
||||
// 暴雪,
|
||||
// 雾,
|
||||
// 冻雨,
|
||||
// 沙尘暴,
|
||||
// 小雨转中雨,
|
||||
// 中雨转大雨,
|
||||
// 大雨转暴雨,
|
||||
// 暴雨转大暴雨,
|
||||
// 大暴雨转特大暴雨,
|
||||
// 小雪转中雪,
|
||||
// 中雪转大雪,
|
||||
// 大雪转暴雪,
|
||||
// 浮尘,
|
||||
// 扬沙,
|
||||
// 强沙尘暴,
|
||||
// 飑,
|
||||
// 龙卷风,
|
||||
// 弱高吹雪,
|
||||
// 轻雾,
|
||||
// 霾,
|
||||
|
||||
// public const string 未知 = "未知";
|
||||
// 少云,
|
||||
// 晴间多云,
|
||||
// 有风,
|
||||
// 平静,
|
||||
// 微风,
|
||||
// 和风,
|
||||
// 清风,
|
||||
// 强风,
|
||||
// 疾风,
|
||||
// 大风,
|
||||
// 烈风,
|
||||
// 风暴,
|
||||
// 狂爆风,
|
||||
// 飓风,
|
||||
// 热带风暴,
|
||||
// 强阵雨,
|
||||
// 强雷阵雨,
|
||||
// 极端降雨,
|
||||
// 细雨,
|
||||
// 雨,
|
||||
// 雨雪天气,
|
||||
// 阵雨夹雪,
|
||||
// 雪,
|
||||
// 浓雾,
|
||||
// 强浓雾,
|
||||
// 大雾,
|
||||
// 特强浓雾,
|
||||
// 中度霾,
|
||||
// 重度霾,
|
||||
// 严重霾,
|
||||
// 热,
|
||||
// 冷,
|
||||
// }
|
||||
|
||||
// /// <inheritdoc cref="WeatherCoding"/>
|
||||
// public enum Value
|
||||
// /// <summary>
|
||||
// /// 某些值文字太长,需要使用对应一个短文字值的
|
||||
// /// </summary>
|
||||
// static readonly IReadOnlyDictionary<Value, Value> short_mapping = new Dictionary<Value, Value>
|
||||
// {
|
||||
// { Value.雷阵雨并伴有冰雹 , Value.雷阵雨 },
|
||||
// { Value.特大暴雨 , Value.大暴雨 },
|
||||
// { Value.小雨转中雨 , Value.小雨 },
|
||||
// { Value.中雨转大雨 , Value.中雨 },
|
||||
// { Value.大雨转暴雨 , Value.大雨 },
|
||||
// { Value.暴雨转大暴雨 , Value.暴雨 },
|
||||
// { Value.大暴雨转特大暴雨 , Value.大暴雨 },
|
||||
// { Value.小雪转中雪 , Value.小雪 },
|
||||
// { Value.中雪转大雪 , Value.中雪 },
|
||||
// { Value.大雪转暴雪 , Value.暴雪 },
|
||||
// { Value.强沙尘暴 , Value.沙尘暴 },
|
||||
// { Value.弱高吹雪 , Value.小雪 },
|
||||
// { Value.晴间多云 , Value.多云 },
|
||||
// };
|
||||
|
||||
// static readonly IReadOnlyDictionary<string, Value> str_parse_mapping = new Dictionary<string, Value>(StringComparer.Ordinal)
|
||||
// {
|
||||
// { "强风/劲风", Value.强风 },
|
||||
// { "劲风", Value.强风 },
|
||||
// { "毛毛雨/细雨", Value.细雨 },
|
||||
// { "毛毛雨", Value.细雨 },
|
||||
// { "小雨-中雨", Value.小雨转中雨 },
|
||||
// { "中雨-大雨", Value.中雨转大雨 },
|
||||
// { "大雨-暴雨", Value.大雨转暴雨 },
|
||||
// { "暴雨-大暴雨", Value.暴雨转大暴雨 },
|
||||
// { "大暴雨-特大暴雨", Value.大暴雨转特大暴雨 },
|
||||
// { "小雪-中雪", Value.小雪转中雪 },
|
||||
// { "中雪-大雪", Value.中雪转大雪 },
|
||||
// { "大雪-暴雪", Value.大雪转暴雪 },
|
||||
// };
|
||||
|
||||
// /// <summary>
|
||||
// /// 短文字值组排除项
|
||||
// /// </summary>
|
||||
// static readonly Value[] short_values_excluded = new[] {
|
||||
// Value.未知,
|
||||
// Value.热,
|
||||
// Value.冷,
|
||||
// };
|
||||
|
||||
// /// <summary>
|
||||
// /// 获取短文字值
|
||||
// /// </summary>
|
||||
// /// <param name="value"></param>
|
||||
// /// <returns></returns>
|
||||
// public static Value ToShort(this Value value)
|
||||
// {
|
||||
// if (short_mapping.ContainsKey(value)) return short_mapping[value];
|
||||
// return value;
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 获取短文字值字符串
|
||||
// /// </summary>
|
||||
// /// <param name="value"></param>
|
||||
// /// <returns></returns>
|
||||
// public static string ToStringShort(this Value value) => value.ToShort().ToString();
|
||||
|
||||
// /// <summary>
|
||||
// /// 获取所有的短文字值
|
||||
// /// </summary>
|
||||
// /// <returns></returns>
|
||||
// public static IEnumerable<Value> GetValuesShort()
|
||||
// {
|
||||
// var values = (Value[])Enum.GetValues(typeof(WeatherCoding));
|
||||
// foreach (var value in values)
|
||||
// {
|
||||
// 未知 = 0,
|
||||
// 晴,
|
||||
// 多云,
|
||||
// 阴,
|
||||
// 阵雨,
|
||||
// 雷阵雨,
|
||||
// 雷阵雨并伴有冰雹,
|
||||
// 雨夹雪,
|
||||
// 小雨,
|
||||
// 中雨,
|
||||
// 大雨,
|
||||
// 暴雨,
|
||||
// 大暴雨,
|
||||
// 特大暴雨,
|
||||
// 阵雪,
|
||||
// 小雪,
|
||||
// 中雪,
|
||||
// 大雪,
|
||||
// 暴雪,
|
||||
// 雾,
|
||||
// 冻雨,
|
||||
// 沙尘暴,
|
||||
// 小雨转中雨,
|
||||
// 中雨转大雨,
|
||||
// 大雨转暴雨,
|
||||
// 暴雨转大暴雨,
|
||||
// 大暴雨转特大暴雨,
|
||||
// 小雪转中雪,
|
||||
// 中雪转大雪,
|
||||
// 大雪转暴雪,
|
||||
// 浮尘,
|
||||
// 扬沙,
|
||||
// 强沙尘暴,
|
||||
// 飑,
|
||||
// 龙卷风,
|
||||
// 弱高吹雪,
|
||||
// 轻雾,
|
||||
// 霾,
|
||||
|
||||
// 少云,
|
||||
// 晴间多云,
|
||||
// 有风,
|
||||
// 平静,
|
||||
// 微风,
|
||||
// 和风,
|
||||
// 清风,
|
||||
// 强风,
|
||||
// 疾风,
|
||||
// 大风,
|
||||
// 烈风,
|
||||
// 风暴,
|
||||
// 狂爆风,
|
||||
// 飓风,
|
||||
// 热带风暴,
|
||||
// 强阵雨,
|
||||
// 强雷阵雨,
|
||||
// 极端降雨,
|
||||
// 细雨,
|
||||
// 雨,
|
||||
// 雨雪天气,
|
||||
// 阵雨夹雪,
|
||||
// 雪,
|
||||
// 浓雾,
|
||||
// 强浓雾,
|
||||
// 大雾,
|
||||
// 特强浓雾,
|
||||
// 中度霾,
|
||||
// 重度霾,
|
||||
// 严重霾,
|
||||
// 热,
|
||||
// 冷,
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 某些值文字太长,需要使用对应一个短文字值的
|
||||
// /// </summary>
|
||||
// static readonly IReadOnlyDictionary<Value, Value> short_mapping = new Dictionary<Value, Value>
|
||||
// {
|
||||
// { Value.雷阵雨并伴有冰雹 , Value.雷阵雨 },
|
||||
// { Value.特大暴雨 , Value.大暴雨 },
|
||||
// { Value.小雨转中雨 , Value.小雨 },
|
||||
// { Value.中雨转大雨 , Value.中雨 },
|
||||
// { Value.大雨转暴雨 , Value.大雨 },
|
||||
// { Value.暴雨转大暴雨 , Value.暴雨 },
|
||||
// { Value.大暴雨转特大暴雨 , Value.大暴雨 },
|
||||
// { Value.小雪转中雪 , Value.小雪 },
|
||||
// { Value.中雪转大雪 , Value.中雪 },
|
||||
// { Value.大雪转暴雪 , Value.暴雪 },
|
||||
// { Value.强沙尘暴 , Value.沙尘暴 },
|
||||
// { Value.弱高吹雪 , Value.小雪 },
|
||||
// { Value.晴间多云 , Value.多云 },
|
||||
// };
|
||||
|
||||
// static readonly IReadOnlyDictionary<string, Value> str_parse_mapping = new Dictionary<string, Value>(StringComparer.Ordinal)
|
||||
// {
|
||||
// { "强风/劲风", Value.强风 },
|
||||
// { "劲风", Value.强风 },
|
||||
// { "毛毛雨/细雨", Value.细雨 },
|
||||
// { "毛毛雨", Value.细雨 },
|
||||
// { "小雨-中雨", Value.小雨转中雨 },
|
||||
// { "中雨-大雨", Value.中雨转大雨 },
|
||||
// { "大雨-暴雨", Value.大雨转暴雨 },
|
||||
// { "暴雨-大暴雨", Value.暴雨转大暴雨 },
|
||||
// { "大暴雨-特大暴雨", Value.大暴雨转特大暴雨 },
|
||||
// { "小雪-中雪", Value.小雪转中雪 },
|
||||
// { "中雪-大雪", Value.中雪转大雪 },
|
||||
// { "大雪-暴雪", Value.大雪转暴雪 },
|
||||
// };
|
||||
|
||||
// /// <summary>
|
||||
// /// 短文字值组排除项
|
||||
// /// </summary>
|
||||
// static readonly Value[] short_values_excluded = new[] {
|
||||
// Value.未知,
|
||||
// Value.热,
|
||||
// Value.冷,
|
||||
// };
|
||||
|
||||
// /// <summary>
|
||||
// /// 获取短文字值
|
||||
// /// </summary>
|
||||
// /// <param name="value"></param>
|
||||
// /// <returns></returns>
|
||||
// public static Value ToShort(this Value value)
|
||||
// {
|
||||
// if (short_mapping.ContainsKey(value)) return short_mapping[value];
|
||||
// return value;
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 获取短文字值字符串
|
||||
// /// </summary>
|
||||
// /// <param name="value"></param>
|
||||
// /// <returns></returns>
|
||||
// public static string ToStringShort(this Value value) => value.ToShort().ToString();
|
||||
|
||||
// /// <summary>
|
||||
// /// 获取所有的短文字值
|
||||
// /// </summary>
|
||||
// /// <returns></returns>
|
||||
// public static IEnumerable<Value> GetValuesShort()
|
||||
// {
|
||||
// var values = (Value[])Enum.GetValues(typeof(WeatherCoding));
|
||||
// foreach (var value in values)
|
||||
// {
|
||||
// // 忽略排除项
|
||||
// if (short_values_excluded.Contains(value)) continue;
|
||||
// // 忽略值文字过长的
|
||||
// if (short_mapping.ContainsKey(value)) continue;
|
||||
// yield return value;
|
||||
// }
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 获取所有的短文字值与传入的当前天气
|
||||
// /// </summary>
|
||||
// /// <param name="currentWeather"></param>
|
||||
// /// <returns></returns>
|
||||
// public static List<Value?> GetValues(Value? currentWeather)
|
||||
// {
|
||||
// var result = new List<Value?> { currentWeather };
|
||||
// var values = GetValuesShort().ToArray();
|
||||
// Value? continueValue = null;
|
||||
// if (currentWeather.HasValue)
|
||||
// {
|
||||
// var shortValue = currentWeather.Value.ToShort();
|
||||
// if (values.Contains(shortValue))
|
||||
// {
|
||||
// continueValue = shortValue;
|
||||
// }
|
||||
// }
|
||||
// foreach (var value in values)
|
||||
// {
|
||||
// if (continueValue.HasValue && continueValue.Value == value) continue;
|
||||
// result.Add(value);
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
|
||||
// public static Value Parse(string value)
|
||||
// {
|
||||
// if (str_parse_mapping.ContainsKey(value)) return str_parse_mapping[value];
|
||||
// if (!Enum.TryParse(value, out Value result))
|
||||
// {
|
||||
// Log.Error(TAG, "WeatherCoding Enum.TryParse Fail value: {0}", value);
|
||||
// return Value.未知;
|
||||
// }
|
||||
// return result;
|
||||
// // 忽略排除项
|
||||
// if (short_values_excluded.Contains(value)) continue;
|
||||
// // 忽略值文字过长的
|
||||
// if (short_mapping.ContainsKey(value)) continue;
|
||||
// yield return value;
|
||||
// }
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 获取所有的短文字值与传入的当前天气
|
||||
// /// </summary>
|
||||
// /// <param name="currentWeather"></param>
|
||||
// /// <returns></returns>
|
||||
// public static List<Value?> GetValues(Value? currentWeather)
|
||||
// {
|
||||
// var result = new List<Value?> { currentWeather };
|
||||
// var values = GetValuesShort().ToArray();
|
||||
// Value? continueValue = null;
|
||||
// if (currentWeather.HasValue)
|
||||
// {
|
||||
// var shortValue = currentWeather.Value.ToShort();
|
||||
// if (values.Contains(shortValue))
|
||||
// {
|
||||
// continueValue = shortValue;
|
||||
// }
|
||||
// }
|
||||
// foreach (var value in values)
|
||||
// {
|
||||
// if (continueValue.HasValue && continueValue.Value == value) continue;
|
||||
// result.Add(value);
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
|
||||
// public static Value Parse(string value)
|
||||
// {
|
||||
// if (str_parse_mapping.ContainsKey(value)) return str_parse_mapping[value];
|
||||
// if (!Enum.TryParse(value, out Value result))
|
||||
// {
|
||||
// Log.Error(TAG, "WeatherCoding Enum.TryParse Fail value: {0}", value);
|
||||
// return Value.未知;
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
//}
|
||||
@@ -5,6 +5,7 @@
|
||||
<AssemblyName>System.Common.AreaLib</AssemblyName>
|
||||
<RootNamespace>System</RootNamespace>
|
||||
<DefineConstants>AREA_LIB;$(DefineConstants)</DefineConstants>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,22 +2,21 @@ using System.Application.Entities;
|
||||
using System.Application.Services;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace System
|
||||
{
|
||||
public static class AreaExtensions
|
||||
{
|
||||
/// <inheritdoc cref="IAreaResourceHelper{TArea}.GetSecondaryOrThis(TArea)"/>
|
||||
public static TArea GetSecondaryOrThis<TArea>(this TArea area) where TArea : class, IArea
|
||||
{
|
||||
var s = DI.Get<IAreaResourceHelper<TArea>>();
|
||||
return s.GetSecondaryOrThis(area);
|
||||
}
|
||||
namespace System;
|
||||
|
||||
/// <inheritdoc cref="IAreaResourceHelper{TArea}.GetFullName(TArea)"/>
|
||||
public static string GetFullName<TArea>(this TArea area) where TArea : class, IArea
|
||||
{
|
||||
var s = DI.Get<IAreaResourceHelper<TArea>>();
|
||||
return s.GetFullName(area);
|
||||
}
|
||||
public static class AreaExtensions
|
||||
{
|
||||
/// <inheritdoc cref="IAreaResourceHelper{TArea}.GetSecondaryOrThis(TArea)"/>
|
||||
public static TArea GetSecondaryOrThis<TArea>(this TArea area) where TArea : class, IArea
|
||||
{
|
||||
var s = DI.Get<IAreaResourceHelper<TArea>>();
|
||||
return s.GetSecondaryOrThis(area);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="IAreaResourceHelper{TArea}.GetFullName(TArea)"/>
|
||||
public static string GetFullName<TArea>(this TArea area) where TArea : class, IArea
|
||||
{
|
||||
var s = DI.Get<IAreaResourceHelper<TArea>>();
|
||||
return s.GetFullName(area);
|
||||
}
|
||||
}
|
||||
@@ -1,21 +1,20 @@
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
using System.Application.Entities;
|
||||
using System.Application.Services;
|
||||
using System.Application.Services.Implementation;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace Microsoft.Extensions.DependencyInjection
|
||||
namespace Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
public static class ServiceCollectionExtensions
|
||||
{
|
||||
public static class ServiceCollectionExtensions
|
||||
public static IServiceCollection TryAddAreaResource<TArea>(this IServiceCollection services)
|
||||
where TArea : class, IArea
|
||||
{
|
||||
public static IServiceCollection TryAddAreaResource<TArea>(this IServiceCollection services)
|
||||
where TArea : class, IArea
|
||||
{
|
||||
services.TryAddSingleton<AreaResourceImpl<TArea>>();
|
||||
services.TryAddSingleton<IAreaResourceHelper<TArea>>(s => s.GetRequiredService<AreaResourceImpl<TArea>>());
|
||||
services.TryAddSingleton<IAreaResource<TArea>>(s => s.GetRequiredService<AreaResourceImpl<TArea>>());
|
||||
services.TryAddSingleton<IAreaResource<IArea>>(s => s.GetRequiredService<AreaResourceImpl<TArea>>());
|
||||
return services;
|
||||
}
|
||||
services.TryAddSingleton<AreaResourceImpl<TArea>>();
|
||||
services.TryAddSingleton<IAreaResourceHelper<TArea>>(s => s.GetRequiredService<AreaResourceImpl<TArea>>());
|
||||
services.TryAddSingleton<IAreaResource<TArea>>(s => s.GetRequiredService<AreaResourceImpl<TArea>>());
|
||||
services.TryAddSingleton<IAreaResource<IArea>>(s => s.GetRequiredService<AreaResourceImpl<TArea>>());
|
||||
return services;
|
||||
}
|
||||
}
|
||||
@@ -1,30 +1,26 @@
|
||||
using Android;
|
||||
using Android.OS;
|
||||
using XEPermissions = Xamarin.Essentials.Permissions;
|
||||
|
||||
namespace System.Application.Services.Implementation.Permissions
|
||||
namespace System.Application.Services.Implementation.Permissions;
|
||||
|
||||
internal sealed class GetPhoneNumberPermission : BasePlatformPermission, Permissions2.IGetPhoneNumber
|
||||
{
|
||||
internal sealed class GetPhoneNumberPermission : XEPermissions.BasePlatformPermission, IPermissions.IGetPhoneNumber
|
||||
public const string Description = "自动填充输入框中的手机号码";
|
||||
|
||||
public override (string androidPermission, bool isRuntime)[] RequiredPermissions
|
||||
{
|
||||
XEPermissions.BasePermission IPermissions.IPermission.Permission => this;
|
||||
|
||||
public const string Description = "自动填充输入框中的手机号码";
|
||||
|
||||
public override (string androidPermission, bool isRuntime)[] RequiredPermissions
|
||||
get
|
||||
{
|
||||
get
|
||||
string androidPermission;
|
||||
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
|
||||
{
|
||||
string androidPermission;
|
||||
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
|
||||
{
|
||||
androidPermission = Manifest.Permission.ReadPhoneNumbers;
|
||||
}
|
||||
else
|
||||
{
|
||||
androidPermission = Manifest.Permission.ReadPhoneState;
|
||||
}
|
||||
return new[] { (androidPermission, true) };
|
||||
androidPermission = Manifest.Permission.ReadPhoneNumbers;
|
||||
}
|
||||
else
|
||||
{
|
||||
androidPermission = Manifest.Permission.ReadPhoneState;
|
||||
}
|
||||
return new[] { (androidPermission, true) };
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
using Android.Content;
|
||||
using Android.Telephony;
|
||||
using XEPlatform = Xamarin.Essentials.Platform;
|
||||
|
||||
namespace System.Application.Services.Implementation
|
||||
{
|
||||
/// <inheritdoc cref="ITelephonyService"/>
|
||||
internal sealed class PlatformTelephonyServiceImpl : TelephonyServiceImpl
|
||||
{
|
||||
public PlatformTelephonyServiceImpl(IPermissions p) : base(p)
|
||||
{
|
||||
}
|
||||
|
||||
protected override string? PlatformGetPhoneNumber()
|
||||
{
|
||||
var telephony = XEPlatform.AppContext.GetSystemService<TelephonyManager>(Context.TelephonyService);
|
||||
var value = telephony.Line1Number;
|
||||
return PhoneNumberHelper.GetChineseMainlandPhoneNumber(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -24,16 +24,6 @@ namespace System
|
||||
return service;
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="Context.GetSystemService(string)"/>
|
||||
public static TService GetSystemService<TService>(this Context context, string name) where TService : class, IJavaObject
|
||||
{
|
||||
var service = context.GetSystemService(name)?.JavaCast<TService>();
|
||||
if (service == null)
|
||||
throw new NullReferenceException(
|
||||
$"Context.GetSystemService return null, name: {name}");
|
||||
return service;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return the context of the single, global Application object of the current process.
|
||||
/// </summary>
|
||||
|
||||
@@ -2,62 +2,35 @@ using Android.Runtime;
|
||||
using Java.Security.Cert;
|
||||
using System.IO;
|
||||
using Xamarin.Android.Net;
|
||||
using X509Certificate2 = System.Security.Cryptography.X509Certificates.X509Certificate2;
|
||||
using static Java.Security.Cert.X509CertificateHelpers;
|
||||
|
||||
// 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 抓包
|
||||
/// </summary>
|
||||
/// <param name="handler"></param>
|
||||
/// <param name="certificateFileData">证书文件数据(文件流,内嵌资源流)</param>
|
||||
public static void AddTrustedCert(
|
||||
this AndroidClientHandler handler,
|
||||
Stream certificateFileData)
|
||||
/// <param name="x509CertificateStream">证书(文件流,内嵌资源流)</param>
|
||||
/// <param name="leaveOpen">是否不释放流</param>
|
||||
public static void AddTrustedCert(this AndroidClientHandler handler, Stream x509CertificateStream, bool leaveOpen = false)
|
||||
{
|
||||
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>();
|
||||
try
|
||||
{
|
||||
using var factory = GetX509CertificateFactory();
|
||||
var x509Certificate = factory.GenerateCertificate(x509CertificateStream);
|
||||
if (x509Certificate == null)
|
||||
throw new ArgumentNullException(nameof(x509Certificate));
|
||||
if (handler.TrustedCerts == null)
|
||||
handler.TrustedCerts = new JavaList<Certificate>();
|
||||
handler.TrustedCerts.Add(x509Certificate);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (!leaveOpen) x509CertificateStream.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,55 +1,54 @@
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace System.Logging
|
||||
{
|
||||
internal static class LogHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Android 的 Log Tag 名称最大长度
|
||||
/// <para>如果超出此长度,会引发异常:</para>
|
||||
/// <para>Java.Lang.IllegalArgumentException: Log tag "Microsoft.EntityFrameworkCore.Infrastructure" exceeds limit of 23 characters</para>
|
||||
/// </summary>
|
||||
public const int droid_tag_max_len = 23;
|
||||
public const string Droid = "Droid";
|
||||
namespace System.Logging;
|
||||
|
||||
public static string CutDroidTag(string name)
|
||||
internal static class LogHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Android 的 Log Tag 名称最大长度
|
||||
/// <para>如果超出此长度,会引发异常:</para>
|
||||
/// <para>Java.Lang.IllegalArgumentException: Log tag "Microsoft.EntityFrameworkCore.Infrastructure" exceeds limit of 23 characters</para>
|
||||
/// </summary>
|
||||
public const int droid_tag_max_len = 23;
|
||||
public const string Droid = "Droid";
|
||||
|
||||
public static string CutDroidTag(string name)
|
||||
{
|
||||
var array = name.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
var lastItem = array.LastOrDefault(x => !string.IsNullOrWhiteSpace(x));
|
||||
if (lastItem != null)
|
||||
{
|
||||
var array = name.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
var lastItem = array.LastOrDefault(x => !string.IsNullOrWhiteSpace(x));
|
||||
if (lastItem != null)
|
||||
if (lastItem.StartsWith(Droid, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
if (lastItem.StartsWith(Droid, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
lastItem = lastItem[Droid.Length..];
|
||||
}
|
||||
if (lastItem.Length > droid_tag_max_len)
|
||||
{
|
||||
return lastItem.Substring(0, droid_tag_max_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
return lastItem;
|
||||
}
|
||||
lastItem = lastItem[Droid.Length..];
|
||||
}
|
||||
if (lastItem.Length > droid_tag_max_len)
|
||||
{
|
||||
return lastItem.Substring(0, droid_tag_max_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
return "Unknown";
|
||||
return lastItem;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据 Name 获取 Android Log Tag
|
||||
/// </summary>
|
||||
/// <param name="categoryName"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetDroidTag(string name)
|
||||
else
|
||||
{
|
||||
if (name.Length > droid_tag_max_len)
|
||||
{
|
||||
return CutDroidTag(name);
|
||||
}
|
||||
return name;
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据 Name 获取 Android Log Tag
|
||||
/// </summary>
|
||||
/// <param name="categoryName"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetDroidTag(string name)
|
||||
{
|
||||
if (name.Length > droid_tag_max_len)
|
||||
{
|
||||
return CutDroidTag(name);
|
||||
}
|
||||
return name;
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,9 @@
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System.Application;
|
||||
using System.Application.Services;
|
||||
using System.Application.Services.Implementation;
|
||||
using System.Application.Services.Implementation.Permissions;
|
||||
using System.Diagnostics;
|
||||
using System.Logging;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace Microsoft.Extensions.DependencyInjection
|
||||
@@ -23,24 +22,13 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加电话服务
|
||||
/// </summary>
|
||||
/// <param name="services"></param>
|
||||
/// <returns></returns>
|
||||
public static IServiceCollection AddTelephonyService(this IServiceCollection services)
|
||||
{
|
||||
services.AddSingleton<ITelephonyService, PlatformTelephonyServiceImpl>();
|
||||
return services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加平台权限
|
||||
/// 添加平台运行时权限
|
||||
/// </summary>
|
||||
/// <param name="services"></param>
|
||||
/// <returns></returns>
|
||||
public static IServiceCollection AddPlatformPermissions(this IServiceCollection services)
|
||||
{
|
||||
services.AddTransient<IPermissions.IGetPhoneNumber, GetPhoneNumberPermission>();
|
||||
services.AddTransient<Permissions2.IGetPhoneNumber, GetPhoneNumberPermission>();
|
||||
return services;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
namespace System.Application.Services
|
||||
namespace System.Application.Services;
|
||||
|
||||
/// <inheritdoc cref="INavigationService"/>
|
||||
public interface IPlatformNavigationService : INavigationService
|
||||
{
|
||||
/// <inheritdoc cref="INavigationService"/>
|
||||
public interface IPlatformNavigationService : INavigationService
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,14 @@
|
||||
namespace System.Application.Services.Implementation
|
||||
{
|
||||
public abstract class PlatformNavigationServiceImpl : IPlatformNavigationService
|
||||
{
|
||||
public void Pop()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
namespace System.Application.Services.Implementation;
|
||||
|
||||
public void Push(Type type, PushFlags flags = PushFlags.Empty)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
public abstract class PlatformNavigationServiceImpl : IPlatformNavigationService
|
||||
{
|
||||
public void Pop()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void Push(Type type, PushFlags flags = PushFlags.Empty)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
<TargetFramework>Xamarin.iOS10</TargetFramework>
|
||||
<RootNamespace>System</RootNamespace>
|
||||
<AssemblyName>System.Common.ClientLib.iOS</AssemblyName>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,126 +1,122 @@
|
||||
//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
|
||||
//namespace System.Application;
|
||||
|
||||
//[Obsolete]
|
||||
//[DebuggerDisplay("{DebuggerDisplay(),nq}")]
|
||||
//[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
|
||||
//public sealed class AppClientAttribute : Attribute
|
||||
//{
|
||||
// [Obsolete]
|
||||
// [DebuggerDisplay("{DebuggerDisplay(),nq}")]
|
||||
// [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
|
||||
// public sealed class AppClientAttribute : Attribute
|
||||
// string DebuggerDisplay() => $"type: {type}";
|
||||
|
||||
// readonly Type? type;
|
||||
// string? str;
|
||||
|
||||
// [NotNull, DisallowNull] // C# 8 not null
|
||||
// public object? Value { get; private set; }
|
||||
|
||||
// public AppClientAttribute(Type type, string str)
|
||||
// {
|
||||
// string DebuggerDisplay() => $"type: {type}";
|
||||
|
||||
// readonly Type? type;
|
||||
// string? str;
|
||||
|
||||
// [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));
|
||||
// }
|
||||
// this.type = type;
|
||||
// this.str = str;
|
||||
// init();
|
||||
// if (Value == null) throw new ArgumentNullException(nameof(Value));
|
||||
// }
|
||||
|
||||
//#pragma warning disable IDE1006 // 命名样式
|
||||
|
||||
// void init()
|
||||
// void init()
|
||||
//#pragma warning restore IDE1006 // 命名样式
|
||||
// {
|
||||
// ctor();
|
||||
// {
|
||||
// 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
|
||||
// }
|
||||
// }
|
||||
|
||||
// [return: MaybeNull]
|
||||
// public static T Get<T>(Assembly? assembly = null)
|
||||
// void ctor()
|
||||
// {
|
||||
//#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;
|
||||
// Value = Serializable.DMPB64U(type.ThrowIsNull(nameof(type)), str)
|
||||
// .ThrowIsNull(nameof(Value));
|
||||
// str = null;
|
||||
//#if DEBUG
|
||||
// stopwatch.Stop();
|
||||
// Debug.WriteLine($"AppClientAttr Get<{type.Name}> 耗时:{stopwatch.ElapsedMilliseconds}ms");
|
||||
// Debug.WriteLine($"AppClientAttr init 耗时:{stopwatch.ElapsedMilliseconds}ms");
|
||||
//#endif
|
||||
// return t;
|
||||
// }
|
||||
|
||||
// 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;
|
||||
// }
|
||||
// }
|
||||
|
||||
// [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 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;
|
||||
// }
|
||||
//}
|
||||
@@ -0,0 +1,17 @@
|
||||
namespace System.Application.Converters.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// 提供对绑定定义的高级访问,该绑定连接绑定目标对象(通常为 WPF 元素)的属性和任何数据源(例如数据库、XML 文件,或包含数据的任何对象)。
|
||||
/// </summary>
|
||||
public interface IBinding
|
||||
{
|
||||
/// <summary>
|
||||
/// 用作返回值以指示绑定引擎不执行任何操作。
|
||||
/// </summary>
|
||||
object DoNothing { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 指定 WPF 属性系统使用的静态值,而不是 null 指示属性存在,但不具有由属性系统设置的值。
|
||||
/// </summary>
|
||||
object UnsetValue { get; }
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using System.Globalization;
|
||||
|
||||
// https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.data.imultivalueconverter?view=windowsdesktop-6.0
|
||||
// https://docs.microsoft.com/zh-cn/dotnet/api/xamarin.forms.imultivalueconverter.convertback?view=xamarin-forms
|
||||
|
||||
namespace System.Application.Converters.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// 提供在 MultiBinding 中应用自定义逻辑的方法。
|
||||
/// </summary>
|
||||
public interface IMultiValueConverter : IBinding
|
||||
{
|
||||
/// <summary>
|
||||
/// 将源值转换为绑定目标的值。 数据绑定引擎在将该值从源绑定传播到绑定目标时会调用此方法。
|
||||
/// </summary>
|
||||
/// <param name="values">MultiBinding 中的源绑定生成的值的数组。 值 UnsetValue 指示源绑定没有可供转换的值。</param>
|
||||
/// <param name="targetType">绑定目标属性的类型。</param>
|
||||
/// <param name="parameter">要使用的转换器参数。</param>
|
||||
/// <param name="culture">要用在转换器中的区域性。</param>
|
||||
/// <returns>转换后的值。</returns>
|
||||
object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture);
|
||||
|
||||
/// <summary>
|
||||
/// 将绑定目标值转换为源绑定值。
|
||||
/// </summary>
|
||||
/// <param name="value">绑定目标生成的值。</param>
|
||||
/// <param name="targetTypes">要转换为的类型数组。 数组长度指示为要返回的方法所建议的值的数量与类型。</param>
|
||||
/// <param name="parameter">要使用的转换器参数。</param>
|
||||
/// <param name="culture">要用在转换器中的区域性。</param>
|
||||
/// <returns>已从目标值转换回源值的值的数组。</returns>
|
||||
object[]? ConvertBack(object? value, Type[] targetTypes, object? parameter, CultureInfo culture) => null;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using System.Globalization;
|
||||
|
||||
// https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.data.ivalueconverter?view=windowsdesktop-6.0
|
||||
// https://docs.microsoft.com/zh-cn/dotnet/api/Xamarin.Forms.IValueConverter?view=xamarin-forms
|
||||
// https://docs.microsoft.com/zh-cn/uwp/api/Windows.UI.Xaml.Data.IValueConverter?view=winrt-22000
|
||||
|
||||
namespace System.Application.Converters.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// 提供将自定义逻辑应用于绑定的方法。
|
||||
/// </summary>
|
||||
public interface IValueConverter : IBinding
|
||||
{
|
||||
/// <summary>
|
||||
/// 转换值。
|
||||
/// </summary>
|
||||
/// <param name="value">绑定源生成的值。</param>
|
||||
/// <param name="targetType">绑定目标属性的类型。</param>
|
||||
/// <param name="parameter">要使用的转换器参数。</param>
|
||||
/// <param name="culture">要用在转换器中的区域性。</param>
|
||||
/// <returns>转换后的值。 如果该方法返回 null,则使用有效的 null 值。</returns>
|
||||
object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture);
|
||||
|
||||
/// <summary>
|
||||
/// 转换值。
|
||||
/// </summary>
|
||||
/// <param name="value">绑定目标生成的值。</param>
|
||||
/// <param name="targetType">要转换为的类型。</param>
|
||||
/// <param name="parameter">要使用的转换器参数。</param>
|
||||
/// <param name="culture">要用在转换器中的区域性。</param>
|
||||
/// <returns>转换后的值。 如果该方法返回 null,则使用有效的 null 值。</returns>
|
||||
object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => DoNothing;
|
||||
}
|
||||