@react-native-windows/cli 0.0.0-canary.98 → 0.0.1-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/lib-commonjs/{runWindows/utils/autolink.d.ts → commands/autolinkWindows/autolinkWindows.d.ts} +87 -86
- package/lib-commonjs/{runWindows/utils/autolink.js → commands/autolinkWindows/autolinkWindows.js} +655 -625
- package/lib-commonjs/commands/autolinkWindows/autolinkWindows.js.map +1 -0
- package/lib-commonjs/commands/autolinkWindows/autolinkWindowsOptions.d.ts +14 -0
- package/lib-commonjs/commands/autolinkWindows/autolinkWindowsOptions.js +33 -0
- package/lib-commonjs/commands/autolinkWindows/autolinkWindowsOptions.js.map +1 -0
- package/lib-commonjs/commands/codegenWindows/codegenWindows.d.ts +27 -0
- package/lib-commonjs/commands/codegenWindows/codegenWindows.js +206 -0
- package/lib-commonjs/commands/codegenWindows/codegenWindows.js.map +1 -0
- package/lib-commonjs/commands/codegenWindows/codegenWindowsOptions.d.ts +12 -0
- package/lib-commonjs/commands/codegenWindows/codegenWindowsOptions.js +23 -0
- package/lib-commonjs/commands/codegenWindows/codegenWindowsOptions.js.map +1 -0
- package/lib-commonjs/{config → commands/config}/configUtils.d.ts +123 -116
- package/lib-commonjs/{config → commands/config}/configUtils.js +380 -341
- package/lib-commonjs/commands/config/configUtils.js.map +1 -0
- package/lib-commonjs/{config → commands/config}/dependencyConfig.d.ts +37 -37
- package/lib-commonjs/{config → commands/config}/dependencyConfig.js +227 -221
- package/lib-commonjs/commands/config/dependencyConfig.js.map +1 -0
- package/lib-commonjs/{config → commands/config}/projectConfig.d.ts +27 -27
- package/lib-commonjs/{config → commands/config}/projectConfig.js +180 -176
- package/lib-commonjs/commands/config/projectConfig.js.map +1 -0
- package/lib-commonjs/commands/healthCheck/healthCheckList.d.ts +6 -0
- package/lib-commonjs/commands/healthCheck/healthCheckList.js +21 -0
- package/lib-commonjs/commands/healthCheck/healthCheckList.js.map +1 -0
- package/lib-commonjs/{healthChecks.d.ts → commands/healthCheck/healthChecks.d.ts} +7 -2
- package/lib-commonjs/commands/healthCheck/healthChecks.js +124 -0
- package/lib-commonjs/commands/healthCheck/healthChecks.js.map +1 -0
- package/lib-commonjs/commands/initWindows/initWindows.d.ts +46 -0
- package/lib-commonjs/commands/initWindows/initWindows.js +244 -0
- package/lib-commonjs/commands/initWindows/initWindows.js.map +1 -0
- package/lib-commonjs/commands/initWindows/initWindowsOptions.d.ts +15 -0
- package/lib-commonjs/commands/initWindows/initWindowsOptions.js +38 -0
- package/lib-commonjs/commands/initWindows/initWindowsOptions.js.map +1 -0
- package/lib-commonjs/{runWindows → commands/runWindows}/runWindows.d.ts +10 -11
- package/lib-commonjs/{runWindows → commands/runWindows}/runWindows.js +321 -318
- package/lib-commonjs/commands/runWindows/runWindows.js.map +1 -0
- package/lib-commonjs/{runWindows → commands/runWindows}/runWindowsOptions.d.ts +56 -56
- package/lib-commonjs/{runWindows → commands/runWindows}/runWindowsOptions.js +132 -135
- package/lib-commonjs/commands/runWindows/runWindowsOptions.js.map +1 -0
- package/lib-commonjs/e2etest/autolink.test.d.ts +6 -6
- package/lib-commonjs/e2etest/autolink.test.js +366 -418
- package/lib-commonjs/e2etest/autolink.test.js.map +1 -1
- package/lib-commonjs/e2etest/dependencyConfig.test.d.ts +6 -6
- package/lib-commonjs/e2etest/dependencyConfig.test.js +129 -161
- package/lib-commonjs/e2etest/dependencyConfig.test.js.map +1 -1
- package/lib-commonjs/e2etest/healthChecks.test.d.ts +6 -0
- package/lib-commonjs/e2etest/healthChecks.test.js +31 -0
- package/lib-commonjs/e2etest/healthChecks.test.js.map +1 -0
- package/lib-commonjs/e2etest/initWindows.test.d.ts +6 -0
- package/lib-commonjs/e2etest/initWindows.test.js +43 -0
- package/lib-commonjs/e2etest/initWindows.test.js.map +1 -0
- package/lib-commonjs/e2etest/projectConfig.test.d.ts +6 -6
- package/lib-commonjs/e2etest/projectConfig.test.js +110 -124
- package/lib-commonjs/e2etest/projectConfig.test.js.map +1 -1
- package/lib-commonjs/e2etest/projectConfig.utils.d.ts +8 -4
- package/lib-commonjs/e2etest/projectConfig.utils.js +76 -62
- package/lib-commonjs/e2etest/projectConfig.utils.js.map +1 -1
- package/lib-commonjs/e2etest/runWindows.test.d.ts +6 -6
- package/lib-commonjs/e2etest/runWindows.test.js +60 -39
- package/lib-commonjs/e2etest/runWindows.test.js.map +1 -1
- package/lib-commonjs/e2etest/typesUpToDate.test.d.ts +6 -0
- package/lib-commonjs/e2etest/typesUpToDate.test.js +21 -0
- package/lib-commonjs/e2etest/typesUpToDate.test.js.map +1 -0
- package/lib-commonjs/generator-common/index.d.ts +39 -39
- package/lib-commonjs/generator-common/index.js +242 -242
- package/lib-commonjs/generator-common/index.js.map +1 -1
- package/lib-commonjs/generator-windows/index.d.ts +10 -10
- package/lib-commonjs/generator-windows/index.js +316 -369
- package/lib-commonjs/generator-windows/index.js.map +1 -1
- package/lib-commonjs/index.d.ts +50 -50
- package/lib-commonjs/index.js +77 -106
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/{runWindows/utils → utils}/build.d.ts +12 -12
- package/lib-commonjs/{runWindows/utils → utils}/build.js +84 -84
- package/lib-commonjs/utils/build.js.map +1 -0
- package/lib-commonjs/{runWindows/utils → utils}/checkRequirements.d.ts +6 -6
- package/lib-commonjs/{runWindows/utils → utils}/checkRequirements.js +69 -69
- package/lib-commonjs/utils/checkRequirements.js.map +1 -0
- package/lib-commonjs/{runWindows/utils → utils}/commandWithProgress.d.ts +21 -15
- package/lib-commonjs/{runWindows/utils → utils}/commandWithProgress.js +149 -127
- package/lib-commonjs/utils/commandWithProgress.js.map +1 -0
- package/lib-commonjs/{runWindows/utils → utils}/deploy.d.ts +12 -12
- package/lib-commonjs/{runWindows/utils → utils}/deploy.js +353 -328
- package/lib-commonjs/utils/deploy.js.map +1 -0
- package/lib-commonjs/{runWindows/utils → utils}/info.d.ts +6 -6
- package/lib-commonjs/{runWindows/utils → utils}/info.js +28 -28
- package/lib-commonjs/utils/info.js.map +1 -0
- package/lib-commonjs/{runWindows/utils → utils}/msbuildtools.d.ts +28 -26
- package/lib-commonjs/{runWindows/utils → utils}/msbuildtools.js +273 -219
- package/lib-commonjs/utils/msbuildtools.js.map +1 -0
- package/lib-commonjs/utils/pathHelpers.d.ts +9 -0
- package/lib-commonjs/utils/pathHelpers.js +37 -0
- package/lib-commonjs/utils/pathHelpers.js.map +1 -0
- package/lib-commonjs/utils/telemetryHelpers.d.ts +29 -0
- package/lib-commonjs/utils/telemetryHelpers.js +121 -0
- package/lib-commonjs/utils/telemetryHelpers.js.map +1 -0
- package/lib-commonjs/{runWindows/utils → utils}/version.d.ts +19 -19
- package/lib-commonjs/{runWindows/utils → utils}/version.js +109 -109
- package/lib-commonjs/utils/version.js.map +1 -0
- package/lib-commonjs/{runWindows/utils → utils}/vsInstalls.d.ts +34 -34
- package/lib-commonjs/{runWindows/utils → utils}/vsInstalls.js +99 -73
- package/lib-commonjs/utils/vsInstalls.js.map +1 -0
- package/lib-commonjs/{runWindows/utils → utils}/vstools.d.ts +16 -16
- package/lib-commonjs/{runWindows/utils → utils}/vstools.js +189 -162
- package/lib-commonjs/utils/vstools.js.map +1 -0
- package/lib-commonjs/{runWindows/utils → utils}/winappdeploytool.d.ts +24 -24
- package/lib-commonjs/{runWindows/utils → utils}/winappdeploytool.js +108 -108
- package/lib-commonjs/utils/winappdeploytool.js.map +1 -0
- package/package.json +27 -20
- package/src/powershell/Eval-MsBuildProperties.ps1 +156 -0
- package/CHANGELOG.json +0 -1779
- package/CHANGELOG.md +0 -795
- package/lib-commonjs/config/configUtils.js.map +0 -1
- package/lib-commonjs/config/dependencyConfig.js.map +0 -1
- package/lib-commonjs/config/projectConfig.js.map +0 -1
- package/lib-commonjs/healthChecks.js +0 -88
- package/lib-commonjs/healthChecks.js.map +0 -1
- package/lib-commonjs/runWindows/runWindows.js.map +0 -1
- package/lib-commonjs/runWindows/runWindowsOptions.js.map +0 -1
- package/lib-commonjs/runWindows/utils/autolink.js.map +0 -1
- package/lib-commonjs/runWindows/utils/build.js.map +0 -1
- package/lib-commonjs/runWindows/utils/checkRequirements.js.map +0 -1
- package/lib-commonjs/runWindows/utils/commandWithProgress.js.map +0 -1
- package/lib-commonjs/runWindows/utils/deploy.js.map +0 -1
- package/lib-commonjs/runWindows/utils/info.js.map +0 -1
- package/lib-commonjs/runWindows/utils/msbuildtools.js.map +0 -1
- package/lib-commonjs/runWindows/utils/version.js.map +0 -1
- package/lib-commonjs/runWindows/utils/vsInstalls.js.map +0 -1
- package/lib-commonjs/runWindows/utils/vstools.js.map +0 -1
- package/lib-commonjs/runWindows/utils/winappdeploytool.js.map +0 -1
- /package/{powershell → src/powershell}/Add-AppDevPackage.ps1 +0 -0
- /package/{powershell → src/powershell}/WindowsStoreAppUtils.ps1 +0 -0
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Microsoft Corporation.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
* @format
|
|
5
|
-
*/
|
|
6
|
-
declare class DeviceInfo {
|
|
7
|
-
readonly name: string;
|
|
8
|
-
readonly guid: string;
|
|
9
|
-
readonly ip: string;
|
|
10
|
-
private readonly index;
|
|
11
|
-
private readonly type;
|
|
12
|
-
constructor(name: string, guid: string, ip: string, index: number, type: string);
|
|
13
|
-
toString(): string;
|
|
14
|
-
}
|
|
15
|
-
export default class WinAppDeployTool {
|
|
16
|
-
private readonly path;
|
|
17
|
-
constructor();
|
|
18
|
-
get isAvailable(): boolean;
|
|
19
|
-
findDevice(target: string): DeviceInfo;
|
|
20
|
-
enumerateDevices(): DeviceInfo[];
|
|
21
|
-
installAppPackage(pathToAppxPackage: string, targetDevice: DeviceInfo, shouldLaunch: boolean, shouldUpdate: boolean, pin: boolean, verbose?: boolean): Promise<void>;
|
|
22
|
-
uninstallAppPackage(appName: string, targetDevice: DeviceInfo, verbose: boolean): Promise<void>;
|
|
23
|
-
}
|
|
24
|
-
export {};
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
* @format
|
|
5
|
+
*/
|
|
6
|
+
declare class DeviceInfo {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly guid: string;
|
|
9
|
+
readonly ip: string;
|
|
10
|
+
private readonly index;
|
|
11
|
+
private readonly type;
|
|
12
|
+
constructor(name: string, guid: string, ip: string, index: number, type: string);
|
|
13
|
+
toString(): string;
|
|
14
|
+
}
|
|
15
|
+
export default class WinAppDeployTool {
|
|
16
|
+
private readonly path;
|
|
17
|
+
constructor();
|
|
18
|
+
get isAvailable(): boolean;
|
|
19
|
+
findDevice(target: string): DeviceInfo;
|
|
20
|
+
enumerateDevices(): DeviceInfo[];
|
|
21
|
+
installAppPackage(pathToAppxPackage: string, targetDevice: DeviceInfo, shouldLaunch: boolean, shouldUpdate: boolean, pin: boolean, verbose?: boolean): Promise<void>;
|
|
22
|
+
uninstallAppPackage(appName: string, targetDevice: DeviceInfo, verbose: boolean): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Copyright (c) Microsoft Corporation.
|
|
4
|
-
* Licensed under the MIT License.
|
|
5
|
-
* @format
|
|
6
|
-
*/
|
|
7
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
-
};
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
const fs_1 = __importDefault(require("fs"));
|
|
12
|
-
const path_1 = __importDefault(require("path"));
|
|
13
|
-
const child_process_1 = require("child_process");
|
|
14
|
-
const commandWithProgress_1 = require("./commandWithProgress");
|
|
15
|
-
const telemetry_1 = require("@react-native-windows/telemetry");
|
|
16
|
-
function sortDevices(l, r) {
|
|
17
|
-
return l.toString().length - r.toString().length;
|
|
18
|
-
}
|
|
19
|
-
class DeviceInfo {
|
|
20
|
-
constructor(name, guid, ip, index, type) {
|
|
21
|
-
this.name = name;
|
|
22
|
-
this.guid = guid;
|
|
23
|
-
this.ip = ip;
|
|
24
|
-
this.index = index;
|
|
25
|
-
this.type = type;
|
|
26
|
-
}
|
|
27
|
-
toString() {
|
|
28
|
-
return `${this.index}. ${this.name} (${this.type})`;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
class WinAppDeployTool {
|
|
32
|
-
constructor() {
|
|
33
|
-
const programFilesPath = process.env['ProgramFiles(x86)'] || process.env.ProgramFiles;
|
|
34
|
-
this.path = path_1.default.join(programFilesPath, 'Windows Kits', '10', 'bin', 'x86', 'WinAppDeployCmd.exe');
|
|
35
|
-
}
|
|
36
|
-
get isAvailable() {
|
|
37
|
-
return fs_1.default.existsSync(this.path);
|
|
38
|
-
}
|
|
39
|
-
findDevice(target) {
|
|
40
|
-
const devices = this.enumerateDevices();
|
|
41
|
-
if (devices.length === 0) {
|
|
42
|
-
throw new telemetry_1.CodedError('NoDevice', 'No devices found');
|
|
43
|
-
}
|
|
44
|
-
if (target === 'emulator') {
|
|
45
|
-
const sortedList = devices.sort(sortDevices);
|
|
46
|
-
for (const sortedItem of sortedList) {
|
|
47
|
-
if (sortedItem.toString().includes(target)) {
|
|
48
|
-
return sortedItem;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
if (target === 'device') {
|
|
53
|
-
return devices[0];
|
|
54
|
-
}
|
|
55
|
-
const candidateList = devices.filter(device => device.guid === target);
|
|
56
|
-
if (candidateList.length > 0) {
|
|
57
|
-
return candidateList[0];
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
throw new telemetry_1.CodedError('NoDevice', 'No devices found');
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
enumerateDevices() {
|
|
64
|
-
// 127.0.0.1 00000015-b21e-0da9-0000-000000000000 Lumia 1520 (RM-940)\r
|
|
65
|
-
// maps to
|
|
66
|
-
// [(line), '127.0.0.1', '00000015-b21e-0da9-0000-000000000000', 'Lumia 1520 (RM-940)']
|
|
67
|
-
// The expansion is: IP address, spaces, GUID, spaces, text name
|
|
68
|
-
const LINE_TEST = /^([\d\.]+?)\s+([\da-fA-F\-]+?)\s+(.+)$/m; // eslint-disable-line no-useless-escape
|
|
69
|
-
const result = (0, child_process_1.execSync)(`"${this.path}" devices`).toString();
|
|
70
|
-
const lines = result.split('\r\n');
|
|
71
|
-
const matchedLines = lines.filter(line => LINE_TEST.test(line));
|
|
72
|
-
const devices = matchedLines.map((line, arrayIndex) => {
|
|
73
|
-
const match = line.match(LINE_TEST);
|
|
74
|
-
if (!match) {
|
|
75
|
-
throw new telemetry_1.CodedError('InvalidDevicesOutput', 'Unexpected format of "devices" output');
|
|
76
|
-
}
|
|
77
|
-
const ip = match[1];
|
|
78
|
-
const guid = match[2];
|
|
79
|
-
const name = match[3];
|
|
80
|
-
const type = 'device';
|
|
81
|
-
const deviceInfo = new DeviceInfo(name, guid, ip, arrayIndex, type);
|
|
82
|
-
return deviceInfo;
|
|
83
|
-
});
|
|
84
|
-
return devices;
|
|
85
|
-
}
|
|
86
|
-
async installAppPackage(pathToAppxPackage, targetDevice, shouldLaunch, shouldUpdate, pin, verbose = false) {
|
|
87
|
-
const text = `Installing app to ${targetDevice.name}`;
|
|
88
|
-
if (shouldLaunch) {
|
|
89
|
-
(0, commandWithProgress_1.newWarn)('Cannot launch app with current version of Windows 10 SDK tools. You will have to launch the app after installation is completed.');
|
|
90
|
-
}
|
|
91
|
-
const args = [
|
|
92
|
-
shouldUpdate ? 'update' : 'install',
|
|
93
|
-
'-file',
|
|
94
|
-
pathToAppxPackage,
|
|
95
|
-
'-ip',
|
|
96
|
-
targetDevice.ip,
|
|
97
|
-
];
|
|
98
|
-
if (pin) {
|
|
99
|
-
args.push('-pin', pin.toString());
|
|
100
|
-
}
|
|
101
|
-
await (0, commandWithProgress_1.commandWithProgress)((0, commandWithProgress_1.newSpinner)(text), text, this.path, args, verbose, 'InstallAppToDeviceFailure');
|
|
102
|
-
}
|
|
103
|
-
async uninstallAppPackage(appName, targetDevice, verbose) {
|
|
104
|
-
const text = `Uninstalling app from ${targetDevice.name}`;
|
|
105
|
-
await (0, commandWithProgress_1.commandWithProgress)((0, commandWithProgress_1.newSpinner)(text), text, this.path, `uninstall -package ${appName} -ip {$targetDevice.ip}`.split(' '), verbose, 'UninstallAppOnDeviceFailure');
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
exports.default = WinAppDeployTool;
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) Microsoft Corporation.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
* @format
|
|
6
|
+
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
const fs_1 = __importDefault(require("@react-native-windows/fs"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const child_process_1 = require("child_process");
|
|
14
|
+
const commandWithProgress_1 = require("./commandWithProgress");
|
|
15
|
+
const telemetry_1 = require("@react-native-windows/telemetry");
|
|
16
|
+
function sortDevices(l, r) {
|
|
17
|
+
return l.toString().length - r.toString().length;
|
|
18
|
+
}
|
|
19
|
+
class DeviceInfo {
|
|
20
|
+
constructor(name, guid, ip, index, type) {
|
|
21
|
+
this.name = name;
|
|
22
|
+
this.guid = guid;
|
|
23
|
+
this.ip = ip;
|
|
24
|
+
this.index = index;
|
|
25
|
+
this.type = type;
|
|
26
|
+
}
|
|
27
|
+
toString() {
|
|
28
|
+
return `${this.index}. ${this.name} (${this.type})`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
class WinAppDeployTool {
|
|
32
|
+
constructor() {
|
|
33
|
+
const programFilesPath = process.env['ProgramFiles(x86)'] || process.env.ProgramFiles;
|
|
34
|
+
this.path = path_1.default.join(programFilesPath, 'Windows Kits', '10', 'bin', 'x86', 'WinAppDeployCmd.exe');
|
|
35
|
+
}
|
|
36
|
+
get isAvailable() {
|
|
37
|
+
return fs_1.default.existsSync(this.path);
|
|
38
|
+
}
|
|
39
|
+
findDevice(target) {
|
|
40
|
+
const devices = this.enumerateDevices();
|
|
41
|
+
if (devices.length === 0) {
|
|
42
|
+
throw new telemetry_1.CodedError('NoDevice', 'No devices found');
|
|
43
|
+
}
|
|
44
|
+
if (target === 'emulator') {
|
|
45
|
+
const sortedList = devices.sort(sortDevices);
|
|
46
|
+
for (const sortedItem of sortedList) {
|
|
47
|
+
if (sortedItem.toString().includes(target)) {
|
|
48
|
+
return sortedItem;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (target === 'device') {
|
|
53
|
+
return devices[0];
|
|
54
|
+
}
|
|
55
|
+
const candidateList = devices.filter(device => device.guid === target);
|
|
56
|
+
if (candidateList.length > 0) {
|
|
57
|
+
return candidateList[0];
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
throw new telemetry_1.CodedError('NoDevice', 'No devices found');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
enumerateDevices() {
|
|
64
|
+
// 127.0.0.1 00000015-b21e-0da9-0000-000000000000 Lumia 1520 (RM-940)\r
|
|
65
|
+
// maps to
|
|
66
|
+
// [(line), '127.0.0.1', '00000015-b21e-0da9-0000-000000000000', 'Lumia 1520 (RM-940)']
|
|
67
|
+
// The expansion is: IP address, spaces, GUID, spaces, text name
|
|
68
|
+
const LINE_TEST = /^([\d\.]+?)\s+([\da-fA-F\-]+?)\s+(.+)$/m; // eslint-disable-line no-useless-escape
|
|
69
|
+
const result = (0, child_process_1.execSync)(`"${this.path}" devices`).toString();
|
|
70
|
+
const lines = result.split('\r\n');
|
|
71
|
+
const matchedLines = lines.filter(line => LINE_TEST.test(line));
|
|
72
|
+
const devices = matchedLines.map((line, arrayIndex) => {
|
|
73
|
+
const match = line.match(LINE_TEST);
|
|
74
|
+
if (!match) {
|
|
75
|
+
throw new telemetry_1.CodedError('InvalidDevicesOutput', 'Unexpected format of "devices" output');
|
|
76
|
+
}
|
|
77
|
+
const ip = match[1];
|
|
78
|
+
const guid = match[2];
|
|
79
|
+
const name = match[3];
|
|
80
|
+
const type = 'device';
|
|
81
|
+
const deviceInfo = new DeviceInfo(name, guid, ip, arrayIndex, type);
|
|
82
|
+
return deviceInfo;
|
|
83
|
+
});
|
|
84
|
+
return devices;
|
|
85
|
+
}
|
|
86
|
+
async installAppPackage(pathToAppxPackage, targetDevice, shouldLaunch, shouldUpdate, pin, verbose = false) {
|
|
87
|
+
const text = `Installing app to ${targetDevice.name}`;
|
|
88
|
+
if (shouldLaunch) {
|
|
89
|
+
(0, commandWithProgress_1.newWarn)('Cannot launch app with current version of Windows 10 SDK tools. You will have to launch the app after installation is completed.');
|
|
90
|
+
}
|
|
91
|
+
const args = [
|
|
92
|
+
shouldUpdate ? 'update' : 'install',
|
|
93
|
+
'-file',
|
|
94
|
+
pathToAppxPackage,
|
|
95
|
+
'-ip',
|
|
96
|
+
targetDevice.ip,
|
|
97
|
+
];
|
|
98
|
+
if (pin) {
|
|
99
|
+
args.push('-pin', pin.toString());
|
|
100
|
+
}
|
|
101
|
+
await (0, commandWithProgress_1.commandWithProgress)((0, commandWithProgress_1.newSpinner)(text), text, this.path, args, verbose, 'InstallAppToDeviceFailure');
|
|
102
|
+
}
|
|
103
|
+
async uninstallAppPackage(appName, targetDevice, verbose) {
|
|
104
|
+
const text = `Uninstalling app from ${targetDevice.name}`;
|
|
105
|
+
await (0, commandWithProgress_1.commandWithProgress)((0, commandWithProgress_1.newSpinner)(text), text, this.path, `uninstall -package ${appName} -ip {$targetDevice.ip}`.split(' '), verbose, 'UninstallAppOnDeviceFailure');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.default = WinAppDeployTool;
|
|
109
109
|
//# sourceMappingURL=winappdeploytool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"winappdeploytool.js","sourceRoot":"","sources":["../../src/utils/winappdeploytool.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;AAEH,kEAA0C;AAC1C,gDAAwB;AACxB,iDAAuC;AACvC,+DAA+E;AAC/E,+DAA2D;AAE3D,SAAS,WAAW,CAAC,CAAa,EAAE,CAAa;IAC/C,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;AACnD,CAAC;AAED,MAAM,UAAU;IACd,YACkB,IAAY,EACZ,IAAY,EACZ,EAAU,EAET,KAAa,EACb,IAAY;QALb,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAQ;QACZ,OAAE,GAAF,EAAE,CAAQ;QAET,UAAK,GAAL,KAAK,CAAQ;QACb,SAAI,GAAJ,IAAI,CAAQ;IAC5B,CAAC;IAEJ,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC;IACtD,CAAC;CACF;AAED,MAAqB,gBAAgB;IAGnC;QACE,MAAM,gBAAgB,GACpB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAC/D,IAAI,CAAC,IAAI,GAAG,cAAI,CAAC,IAAI,CACnB,gBAAiB,EACjB,cAAc,EACd,IAAI,EACJ,KAAK,EACL,KAAK,EACL,qBAAqB,CACtB,CAAC;IACJ,CAAC;IAED,IAAI,WAAW;QACb,OAAO,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,UAAU,CAAC,MAAc;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,sBAAU,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;SACtD;QAED,IAAI,MAAM,KAAK,UAAU,EAAE;YACzB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,KAAK,MAAM,UAAU,IAAI,UAAU,EAAE;gBACnC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBAC1C,OAAO,UAAU,CAAC;iBACnB;aACF;SACF;QAED,IAAI,MAAM,KAAK,QAAQ,EAAE;YACvB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;SACnB;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAEvE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM;YACL,MAAM,IAAI,sBAAU,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;SACtD;IACH,CAAC;IAED,gBAAgB;QACd,4EAA4E;QAC5E,WAAW;QACX,uFAAuF;QACvF,gEAAgE;QAChE,MAAM,SAAS,GAAG,yCAAyC,CAAC,CAAC,wCAAwC;QAErG,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,IAAI,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhE,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,IAAI,sBAAU,CAClB,sBAAsB,EACtB,uCAAuC,CACxC,CAAC;aACH;YAED,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,IAAI,GAAG,QAAQ,CAAC;YAEtB,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YACpE,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,iBAAyB,EACzB,YAAwB,EACxB,YAAqB,EACrB,YAAqB,EACrB,GAAY,EACZ,UAAmB,KAAK;QAExB,MAAM,IAAI,GAAG,qBAAqB,YAAY,CAAC,IAAI,EAAE,CAAC;QAEtD,IAAI,YAAY,EAAE;YAChB,IAAA,6BAAO,EACL,mIAAmI,CACpI,CAAC;SACH;QAED,MAAM,IAAI,GAAG;YACX,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACnC,OAAO;YACP,iBAAiB;YACjB,KAAK;YACL,YAAY,CAAC,EAAE;SAChB,CAAC;QAEF,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;SACnC;QACD,MAAM,IAAA,yCAAmB,EACvB,IAAA,gCAAU,EAAC,IAAI,CAAC,EAChB,IAAI,EACJ,IAAI,CAAC,IAAI,EACT,IAAI,EACJ,OAAO,EACP,2BAA2B,CAC5B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,OAAe,EACf,YAAwB,EACxB,OAAgB;QAEhB,MAAM,IAAI,GAAG,yBAAyB,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAA,yCAAmB,EACvB,IAAA,gCAAU,EAAC,IAAI,CAAC,EAChB,IAAI,EACJ,IAAI,CAAC,IAAI,EACT,sBAAsB,OAAO,yBAAyB,CAAC,KAAK,CAAC,GAAG,CAAC,EACjE,OAAO,EACP,6BAA6B,CAC9B,CAAC;IACJ,CAAC;CACF;AArID,mCAqIC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\nimport {execSync} from 'child_process';\nimport {newSpinner, commandWithProgress, newWarn} from './commandWithProgress';\nimport {CodedError} from '@react-native-windows/telemetry';\n\nfunction sortDevices(l: DeviceInfo, r: DeviceInfo): number {\n return l.toString().length - r.toString().length;\n}\n\nclass DeviceInfo {\n constructor(\n public readonly name: string,\n public readonly guid: string,\n public readonly ip: string,\n\n private readonly index: number,\n private readonly type: string,\n ) {}\n\n toString() {\n return `${this.index}. ${this.name} (${this.type})`;\n }\n}\n\nexport default class WinAppDeployTool {\n private readonly path: string;\n\n constructor() {\n const programFilesPath =\n process.env['ProgramFiles(x86)'] || process.env.ProgramFiles;\n this.path = path.join(\n programFilesPath!,\n 'Windows Kits',\n '10',\n 'bin',\n 'x86',\n 'WinAppDeployCmd.exe',\n );\n }\n\n get isAvailable() {\n return fs.existsSync(this.path);\n }\n\n findDevice(target: string): DeviceInfo {\n const devices = this.enumerateDevices();\n\n if (devices.length === 0) {\n throw new CodedError('NoDevice', 'No devices found');\n }\n\n if (target === 'emulator') {\n const sortedList = devices.sort(sortDevices);\n for (const sortedItem of sortedList) {\n if (sortedItem.toString().includes(target)) {\n return sortedItem;\n }\n }\n }\n\n if (target === 'device') {\n return devices[0];\n }\n\n const candidateList = devices.filter(device => device.guid === target);\n\n if (candidateList.length > 0) {\n return candidateList[0];\n } else {\n throw new CodedError('NoDevice', 'No devices found');\n }\n }\n\n enumerateDevices(): DeviceInfo[] {\n // 127.0.0.1 00000015-b21e-0da9-0000-000000000000 Lumia 1520 (RM-940)\\r\n // maps to\n // [(line), '127.0.0.1', '00000015-b21e-0da9-0000-000000000000', 'Lumia 1520 (RM-940)']\n // The expansion is: IP address, spaces, GUID, spaces, text name\n const LINE_TEST = /^([\\d\\.]+?)\\s+([\\da-fA-F\\-]+?)\\s+(.+)$/m; // eslint-disable-line no-useless-escape\n\n const result = execSync(`\"${this.path}\" devices`).toString();\n const lines = result.split('\\r\\n');\n const matchedLines = lines.filter(line => LINE_TEST.test(line));\n\n const devices = matchedLines.map((line, arrayIndex) => {\n const match = line.match(LINE_TEST);\n if (!match) {\n throw new CodedError(\n 'InvalidDevicesOutput',\n 'Unexpected format of \"devices\" output',\n );\n }\n\n const ip = match[1];\n const guid = match[2];\n const name = match[3];\n const type = 'device';\n\n const deviceInfo = new DeviceInfo(name, guid, ip, arrayIndex, type);\n return deviceInfo;\n });\n\n return devices;\n }\n\n async installAppPackage(\n pathToAppxPackage: string,\n targetDevice: DeviceInfo,\n shouldLaunch: boolean,\n shouldUpdate: boolean,\n pin: boolean,\n verbose: boolean = false,\n ) {\n const text = `Installing app to ${targetDevice.name}`;\n\n if (shouldLaunch) {\n newWarn(\n 'Cannot launch app with current version of Windows 10 SDK tools. You will have to launch the app after installation is completed.',\n );\n }\n\n const args = [\n shouldUpdate ? 'update' : 'install',\n '-file',\n pathToAppxPackage,\n '-ip',\n targetDevice.ip,\n ];\n\n if (pin) {\n args.push('-pin', pin.toString());\n }\n await commandWithProgress(\n newSpinner(text),\n text,\n this.path,\n args,\n verbose,\n 'InstallAppToDeviceFailure',\n );\n }\n\n async uninstallAppPackage(\n appName: string,\n targetDevice: DeviceInfo,\n verbose: boolean,\n ) {\n const text = `Uninstalling app from ${targetDevice.name}`;\n await commandWithProgress(\n newSpinner(text),\n text,\n this.path,\n `uninstall -package ${appName} -ip {$targetDevice.ip}`.split(' '),\n verbose,\n 'UninstallAppOnDeviceFailure',\n );\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-windows/cli",
|
|
3
|
-
"version": "0.0.0
|
|
3
|
+
"version": "0.0.1-0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "lib-commonjs/index.js",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "
|
|
8
|
+
"url": "https://github.com/microsoft/react-native-windows",
|
|
9
9
|
"directory": "packages/@react-native-windows/cli"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
@@ -17,9 +17,11 @@
|
|
|
17
17
|
"watch": "rnw-scripts watch"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@react-native-windows/
|
|
21
|
-
"@react-native-windows/
|
|
22
|
-
"@
|
|
20
|
+
"@react-native-windows/codegen": "0.0.1-0",
|
|
21
|
+
"@react-native-windows/fs": "^0.0.1-0",
|
|
22
|
+
"@react-native-windows/package-utils": "^0.0.1-0",
|
|
23
|
+
"@react-native-windows/telemetry": "^0.0.1-0",
|
|
24
|
+
"@xmldom/xmldom": "^0.7.7",
|
|
23
25
|
"chalk": "^4.1.0",
|
|
24
26
|
"cli-spinners": "^2.2.0",
|
|
25
27
|
"envinfo": "^7.5.0",
|
|
@@ -38,16 +40,17 @@
|
|
|
38
40
|
"xpath": "^0.0.27"
|
|
39
41
|
},
|
|
40
42
|
"devDependencies": {
|
|
41
|
-
"@react-native-community/cli-
|
|
42
|
-
"@
|
|
43
|
-
"@rnw-scripts/
|
|
44
|
-
"@rnw-scripts/
|
|
45
|
-
"@rnw-scripts/
|
|
43
|
+
"@react-native-community/cli-doctor": "13.6.1",
|
|
44
|
+
"@react-native-community/cli-types": "13.6.1",
|
|
45
|
+
"@rnw-scripts/eslint-config": "1.2.12",
|
|
46
|
+
"@rnw-scripts/jest-unittest-config": "1.5.8",
|
|
47
|
+
"@rnw-scripts/just-task": "2.3.28",
|
|
48
|
+
"@rnw-scripts/ts-config": "2.0.5",
|
|
46
49
|
"@types/chalk": "^2.2.0",
|
|
47
|
-
"@types/jest": "^
|
|
50
|
+
"@types/jest": "^29.2.2",
|
|
48
51
|
"@types/lodash": "^4.14.168",
|
|
49
52
|
"@types/mustache": "^4.1.1",
|
|
50
|
-
"@types/node": "^
|
|
53
|
+
"@types/node": "^18.0.0",
|
|
51
54
|
"@types/ora": "^3.2.0",
|
|
52
55
|
"@types/prompts": "2.0.10",
|
|
53
56
|
"@types/semver": "^7.3.3",
|
|
@@ -55,16 +58,20 @@
|
|
|
55
58
|
"@types/uuid": "^8.3.0",
|
|
56
59
|
"@types/xml-parser": "^1.2.29",
|
|
57
60
|
"@types/xmldom": "^0.1.30",
|
|
58
|
-
"
|
|
59
|
-
"eslint": "
|
|
60
|
-
"jest": "^
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
61
|
+
"@typescript-eslint/eslint-plugin": "^5.30.5",
|
|
62
|
+
"@typescript-eslint/parser": "^5.57.1",
|
|
63
|
+
"babel-jest": "^29.6.3",
|
|
64
|
+
"eslint": "^8.19.0",
|
|
65
|
+
"jest": "^29.6.3",
|
|
66
|
+
"prettier": "2.8.8",
|
|
67
|
+
"typescript": "5.0.4"
|
|
68
|
+
},
|
|
69
|
+
"peerDependencies": {
|
|
70
|
+
"react-native": "*"
|
|
64
71
|
},
|
|
65
72
|
"files": [
|
|
66
73
|
"lib-commonjs",
|
|
67
|
-
"powershell"
|
|
74
|
+
"src/powershell"
|
|
68
75
|
],
|
|
69
76
|
"beachball": {
|
|
70
77
|
"defaultNpmTag": "canary",
|
|
@@ -77,6 +84,6 @@
|
|
|
77
84
|
"promoteRelease": true,
|
|
78
85
|
"windowsOnly": true,
|
|
79
86
|
"engines": {
|
|
80
|
-
"node": ">=
|
|
87
|
+
"node": ">= 18"
|
|
81
88
|
}
|
|
82
89
|
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
#
|
|
4
|
+
# Eval-MsBuildProperties.ps1
|
|
5
|
+
#
|
|
6
|
+
# This script lets you determine the final values of MSBUILD properties for a
|
|
7
|
+
# given solution and project file. Simply pass in a comma delimited list of
|
|
8
|
+
# property names and you'll get a JSON blob of evaluated values.
|
|
9
|
+
#
|
|
10
|
+
# For example, from the root of the repo:
|
|
11
|
+
#
|
|
12
|
+
# .\packages\@react-native-windows\cli\powershell\Eval-MsBuildProperties.ps1 -SolutionFile 'vnext\Microsoft.ReactNative.sln' -ProjectFile 'vnext\Microsoft.ReactNative\Microsoft.ReactNative.vcxproj' -PropertyNames 'ProjectGUID,ProjectName'
|
|
13
|
+
#
|
|
14
|
+
# will output:
|
|
15
|
+
#
|
|
16
|
+
# {
|
|
17
|
+
# "ProjectGuid": "{f7d32bd0-2749-483e-9a0d-1635ef7e3136}",
|
|
18
|
+
# "ProjectName": "Microsoft.ReactNative"
|
|
19
|
+
# }
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
param(
|
|
23
|
+
[Parameter(Mandatory = $true)]
|
|
24
|
+
[String]$SolutionFile,
|
|
25
|
+
[Parameter(Mandatory = $true)]
|
|
26
|
+
[String]$ProjectFile,
|
|
27
|
+
[Parameter()]
|
|
28
|
+
[String]$PropertyNames = "",
|
|
29
|
+
[Parameter()]
|
|
30
|
+
[String]$MSBuildPath,
|
|
31
|
+
[Parameter()]
|
|
32
|
+
[String]$ExtraMSBuildProps
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
function Get-MSBuildPath {
|
|
36
|
+
$vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
|
|
37
|
+
if (!(Test-Path $vsWhere)) {
|
|
38
|
+
throw "Unable to find vswhere.exe."
|
|
39
|
+
}
|
|
40
|
+
$vsPath = & $vsWhere -version 16.5 -property installationPath;
|
|
41
|
+
return "$vsPath\MSBuild\Current\Bin";
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function Get-MSBuildProperties {
|
|
45
|
+
param (
|
|
46
|
+
[Parameter(Mandatory = $true)]
|
|
47
|
+
[String]$MSBuildPath,
|
|
48
|
+
[Parameter(Mandatory = $true)]
|
|
49
|
+
[String]$SolutionPath,
|
|
50
|
+
[Parameter(Mandatory = $true)]
|
|
51
|
+
[String]$ProjectPath,
|
|
52
|
+
[Parameter()]
|
|
53
|
+
[String[]]$PropertyNames = @(),
|
|
54
|
+
[Parameter()]
|
|
55
|
+
[String]$ExtraMSBuildProps
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
if (!(Test-Path (Join-Path $MSBuildPath "MSBuild.exe"))) {
|
|
59
|
+
throw "Unable to find MSBuild.exe in $MSBuildPath"
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (!(Test-Path (Join-Path $MSBuildPath "MSBuild.exe"))) {
|
|
63
|
+
throw "Unable to find Microsoft.Build.dll in $MSBuildPath"
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
# Method to intercept resolution of assemblies to add MSBuild's path
|
|
67
|
+
$onAssemblyResolveEventHandler = [System.ResolveEventHandler] {
|
|
68
|
+
param($s, $e)
|
|
69
|
+
|
|
70
|
+
# Figure out which assembly to look for
|
|
71
|
+
$assemblyName = $e.Name.Substring(0, $e.Name.IndexOf(", "));
|
|
72
|
+
$assemblyPath = "$MSBuildPath\$assemblyName.dll"
|
|
73
|
+
|
|
74
|
+
# Search for the assembly in the MSBuild directory
|
|
75
|
+
if (Test-Path $assemblyPath) {
|
|
76
|
+
# Found the assembly!
|
|
77
|
+
return [System.Reflection.Assembly]::LoadFrom("$MSBuildPath\$assemblyName.dll");
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
# Unable to find the assembly
|
|
81
|
+
return $null
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
# Wire-up assembly resolution event handler
|
|
85
|
+
[System.AppDomain]::CurrentDomain.add_AssemblyResolve($onAssemblyResolveEventHandler)
|
|
86
|
+
|
|
87
|
+
# Load Microsoft.Build.dll into script
|
|
88
|
+
Add-Type -Path "$MSBuildPath\Microsoft.Build.dll" | Out-Null
|
|
89
|
+
|
|
90
|
+
# Build a local project collection
|
|
91
|
+
$projectCollection = [Microsoft.Build.Evaluation.ProjectCollection]::new()
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
# Build a temporary "metaproj" of the solution file so it can be processed
|
|
95
|
+
${env:MSBUILDEMITSOLUTION} = 1
|
|
96
|
+
& $MSBuildPath\MSBuild.exe $SolutionPath | Out-Null
|
|
97
|
+
|
|
98
|
+
# Process solution
|
|
99
|
+
$solution = [Microsoft.Build.Evaluation.Project]::new("$SolutionPath.metaproj", $null, "Current", $projectCollection)
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
# Clean up "metaproj" files
|
|
103
|
+
${env:MSBUILDEMITSOLUTION} = 0
|
|
104
|
+
Remove-Item -Path @("$SolutionPath.metaproj", "$SolutionPath.metaproj.tmp") | Out-Null
|
|
105
|
+
Get-ChildItem * -Include *.metaproj -Recurse | Remove-Item | Out-Null
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
# Evaluate all of the Solution* properties and save into a collection
|
|
109
|
+
$globalProps = New-Object 'System.Collections.Generic.Dictionary[String,String]'
|
|
110
|
+
$solution.Properties | ForEach-Object -Process {
|
|
111
|
+
if ($_.Name.StartsWith("Solution")) {
|
|
112
|
+
$globalProps.Add($_.Name, $_.EvaluatedValue)
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
# Evaluate all extra build props and save into the collection
|
|
117
|
+
$extraPropsTable = ConvertFrom-StringData -StringData $ExtraMSBuildProps.Replace(',', "`n")
|
|
118
|
+
$extraPropsTable.Keys | ForEach-Object -Process {
|
|
119
|
+
$globalProps[$_] = $extraPropsTable[$_]
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
# Process the project file (with the Solution* properties we calculated before)
|
|
123
|
+
$project = [Microsoft.Build.Evaluation.Project]::new("$ProjectPath", $globalProps, "Current", $projectCollection)
|
|
124
|
+
|
|
125
|
+
# Create object to hold evaluated property key value pairs
|
|
126
|
+
$evaluatedProps = @{}
|
|
127
|
+
|
|
128
|
+
# Look for the specified PropertyNames and evaluate them
|
|
129
|
+
$project.Properties | ForEach-Object -Process {
|
|
130
|
+
if (($PropertyNames.Length -eq 0) -or ($PropertyNames -contains $_.Name)) {
|
|
131
|
+
$evaluatedProps[$_.Name] = $_.EvaluatedValue;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
# Output as JSON
|
|
136
|
+
Write-Output (ConvertTo-Json $evaluatedProps)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
# Main
|
|
140
|
+
|
|
141
|
+
if ($MSBuildPath -and (Test-Path $MSBuildPath)) {
|
|
142
|
+
if (Test-Path $MSBuildPath -PathType Leaf) {
|
|
143
|
+
# It's a file (probably msbuild.exe), just get the folder path
|
|
144
|
+
$MSBuildPath = [System.IO.Path]::GetDirectoryName($MSBuildPath)
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
# Use simple fallback logic in this script to find MSBuild path
|
|
149
|
+
$MSBuildPath = Get-MSBuildPath
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
# Get the full absolute paths to the solution and projects
|
|
153
|
+
$SolutionPath = Convert-Path $SolutionFile
|
|
154
|
+
$ProjectPath = Convert-Path $ProjectFile
|
|
155
|
+
|
|
156
|
+
Get-MSBuildProperties -MSBuildPath $MSBuildPath -SolutionPath $SolutionPath -ProjectPath $ProjectPath -PropertyNames $PropertyNames.Split(',', [System.StringSplitOptions]::RemoveEmptyEntries) -ExtraMSBuildProps $ExtraMSBuildProps
|