-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathCompileConfiguration.cs
More file actions
402 lines (365 loc) · 11.8 KB
/
CompileConfiguration.cs
File metadata and controls
402 lines (365 loc) · 11.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
using System;
using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using dotnetCampus.Configurations;
namespace dotnetCampus.DotNETBuild.Context
{
/// <summary>
/// 编译配置
/// </summary>
public class CompileConfiguration : Configuration
{
/// <inheritdoc />
public CompileConfiguration() : base("")
{
}
/// <summary>
/// 获取或设置 sln 文件路径
/// </summary>
public string SlnPath
{
set
{
SetFullPath(value);
}
get { return GetString(); }
}
/// <summary>
/// 获取或设置 MSBuild 文件路径,可自动寻找本机的 MSBuild 路径
/// </summary>
public string MSBuildFile
{
#pragma warning disable CS0618
get => MsBuildFile;
set => MsBuildFile = value;
#pragma warning restore CS0618
}
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("大小写命名错误,请使用 MSBuildFile 代替")]
public string MsBuildFile
{
set
{
SetFullPath(value);
}
get
{
// 如果有定义过采用哪个 MSBuild 文件,那就优先使用定义的
// 否则使用本机安装的最高版本的 VS 作为返回值
var msbuild = GetString();
return GetMSBuildPath
(
msbuild,
VS2026EnterpriseMSBuild,
VS2026ProfessionalMSBuild,
VS2026CommunityMSBuild,
VS2022EnterpriseMSBuild,
VS2022ProfessionalMSBuild,
VS2022CommunityMSBuild,
Vs2019EnterpriseMsBuild,
Vs2019ProfessionalMsBuild,
Vs2019CommunityMsBuild
);
static string GetMSBuildPath(params string[] paths)
{
return paths.FirstOrDefault(path => !string.IsNullOrEmpty(path));
}
}
}
/// <summary>
/// VisualStudio 2019 专业版的 MSBuild.exe 文件所在路径
/// </summary>
public string VS2019ProfessionalMSBuild
{
#pragma warning disable CS0618
get => Vs2019ProfessionalMsBuild;
set => Vs2019ProfessionalMsBuild = value;
#pragma warning restore CS0618
}
/// <summary>
/// VisualStudio 2019 专业版的 MSBuild.exe 文件所在路径
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("大小写命名错误,请使用 VS2019ProfessionalMSBuild 代替")]
public string Vs2019ProfessionalMsBuild
{
set => SetFullPath(value);
get => GetString();
}
/// <summary>
/// VisualStudio 2019 企业版的 MSBuild.exe 文件所在路径
/// </summary>
public string VS2019EnterpriseMSBuild
{
#pragma warning disable CS0618
get => Vs2019EnterpriseMsBuild;
set => Vs2019EnterpriseMsBuild = value;
#pragma warning restore CS0618
}
/// <summary>
/// VisualStudio 2019 企业版的 MSBuild.exe 文件所在路径
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("大小写命名错误,请使用 VS2019EnterpriseMSBuild 代替")]
public string Vs2019EnterpriseMsBuild
{
set => SetFullPath(value);
get => GetString();
}
/// <summary>
/// VisualStudio 2019 社区版的 MSBuild.exe 文件所在路径
/// </summary>
public string VS2019CommunityMSBuild
{
set
{
#pragma warning disable CS0618
Vs2019CommunityMsBuild = value;
#pragma warning restore CS0618
}
get
{
#pragma warning disable CS0618
return Vs2019CommunityMsBuild;
#pragma warning restore CS0618
}
}
/// <summary>
/// VisualStudio 2019 社区版的 MSBuild.exe 文件所在路径
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("大小写命名错误,请使用 VS2019CommunityMSBuild 代替")]
public string Vs2019CommunityMsBuild
{
set
{
SetFullPath(value);
}
get
{
return GetString();
}
}
/// <summary>
/// VisualStudio 2022 企业版的 MSBuild.exe 文件所在路径
/// </summary>
public string VS2022EnterpriseMSBuild
{
set => SetFullPath(value);
get => GetString();
}
/// <summary>
/// VisualStudio 2022 专业版的 MSBuild.exe 文件所在路径
/// </summary>
public string VS2022ProfessionalMSBuild
{
set => SetFullPath(value);
get => GetString();
}
/// <summary>
/// VisualStudio 2022 社区版的 MSBuild.exe 文件所在路径
/// </summary>
public string VS2022CommunityMSBuild
{
set => SetFullPath(value);
get => GetString();
}
/// <summary>
/// VisualStudio 2026 企业版的 MSBuild.exe 文件所在路径
/// </summary>
public string VS2026EnterpriseMSBuild
{
set => SetFullPath(value);
get => GetString();
}
/// <summary>
/// VisualStudio 2026 社区版的 MSBuild.exe 文件所在路径
/// </summary>
public string VS2026ProfessionalMSBuild
{
set => SetFullPath(value);
get => GetString();
}
/// <summary>
/// VisualStudio 2026 社区版的 MSBuild.exe 文件所在路径
/// </summary>
public string VS2026CommunityMSBuild
{
set => SetFullPath(value);
get => GetString();
}
/// <summary>
/// 获取 vstest.console.exe 文件路径
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("大小写命名错误,请使用 VSTestFile 代替")]
public string VsTestFile
{
set => SetFullPath(value);
get => GetString();
}
/// <summary>
/// 获取 vstest.console.exe 文件路径
/// </summary>
public string VSTestFile
{
#pragma warning disable CS0618
get => VsTestFile;
set => VsTestFile = value;
#pragma warning restore CS0618
}
/// <inheritdoc cref="GitConfiguration.CurrentCommit"/>
public string CurrentCommit
{
set => SetValue(value);
get => GetString();
}
/// <summary>
/// 输出文件夹
/// </summary>
public string OutputDirectory
{
set => SetFullPath(value);
get => GetString();
}
/// <summary>
/// 打包输出文件夹
/// </summary>
public string NupkgDirectory
{
set => SetValue(value);
get => GetString();
}
/// <summary>
/// 程序集记录的版本号
/// </summary>
public string AssemblyVersion
{
set => SetValue(value);
get => GetString();
}
/// <summary>
/// 应用的版本号
/// </summary>
public string AppVersion
{
set => SetValue(value);
get => GetString() ?? GetString("Version");
}
/// <summary>
/// 对应 dotnet 的 RuntimeIdentifier 属性。需手动赋值
/// </summary>
/// <remarks>
/// 值如 linux-x64 或 win-x64 或 linux-loongarch64 等
/// </remarks>
public ConfigurationString? RuntimeIdentifier
{
set => SetValue(value);
get => GetString();
}
/// <summary>
/// 设置或获取开始构建的时间
/// </summary>
public DateTime BuildStartTime
{
set => SetValue(value.ToString(CultureInfo.InvariantCulture));
get
{
var time = GetString();
if (time is null)
{
var dateTime = DateTime.Now;
SetValue(dateTime.ToString(CultureInfo.InvariantCulture));
return dateTime;
}
else
{
if (!DateTime.TryParse(time, out var dateTime))
{
dateTime = DateTime.Now;
SetValue(dateTime.ToString(CultureInfo.InvariantCulture));
}
return dateTime;
}
}
}
/// <summary>
/// 构建次数
/// </summary>
public string BuildVersion
{
set => SetValue(value);
get => GetString();
}
/// <summary>
/// 代码文件夹
/// </summary>
public string CodeDirectory
{
set => SetFullPath(value);
get => GetString();
}
/// <summary>
/// 项目的 Build 配置文件夹,默认是当前工作路径下的 Build 文件夹
/// </summary>
/// \Build
public string BuildConfigurationDirectory
{
set => SetFullPath(value);
// 这里特意不相对于 CodeDirectory 路径,解决在仓库里面打包某个项目找错路径
get => GetString() ?? Path.GetFullPath("Build");
}
/// <summary>
/// 混淆配置文件夹,包含 saproj 文件,默认是 <value>build\obfuscation</value> 文件夹
/// </summary>
/// \Build\obfuscation
public string ObfuscationConfigurationSaprojDirectory
{
set => SetFullPath(value);
get => GetString() ?? Path.Combine(BuildConfigurationDirectory, "obfuscation");
}
/// <summary>
/// 安装包配置文件夹,默认是 <value>\Build\Setup</value> 文件夹
/// </summary>
public string SetupConfigurationDirectory
{
set => SetFullPath(value);
get => GetString() ?? Path.Combine(BuildConfigurationDirectory, "Setup");
}
/// <summary>
/// 安装包工作文件夹 默认是 <value>build\working</value> 文件夹
/// </summary>
/// \Build\working
public string InstallerWorkingDirectory
{
set => SetFullPath(value);
get => GetString() ?? Path.Combine(BuildConfigurationDirectory, "working");
}
/// <summary>
/// 安装包构建文件夹
/// </summary>
/// \Build\working\compiling
public string InstallerCompilingDirectory
{
set => SetFullPath(value);
get => GetString() ?? Path.Combine(InstallerWorkingDirectory, "compiling");
}
/// <summary>
/// 安装包打包文件夹,这个文件夹内容是实际被安装包打包内容
/// </summary>
/// \Build\working\packing
public string InstallerPackingDirectory
{
set => SetFullPath(value);
get => GetString() ?? Path.Combine(InstallerWorkingDirectory, "packing");
}
private void SetFullPath(string path, [CallerMemberName] string key = "")
{
var value = string.IsNullOrEmpty(path) ? path : Path.GetFullPath(path);
SetValue(value, key);
}
}
}