diff --git a/.gitignore b/.gitignore index 6960374..d065c66 100644 --- a/.gitignore +++ b/.gitignore @@ -81,6 +81,10 @@ src/plugins/*/dist/ # Plugins copied to Host wwwroot during build src/dotnet/Host/wwwroot/plugins/ +# Shell UI build outputs +src/dotnet/Host/wwwroot/assets/ +src/dotnet/Host/wwwroot/index.html + # ------------------------- # Environment & Config # ------------------------- diff --git a/IMPLEMENTATION_SUMMARY.md b/IMPLEMENTATION_SUMMARY.md new file mode 100644 index 0000000..f436199 --- /dev/null +++ b/IMPLEMENTATION_SUMMARY.md @@ -0,0 +1,314 @@ +# Enterprise Reporting and CLI Implementation Summary + +## Overview + +This implementation adds comprehensive enterprise-ready reporting and monitoring capabilities to the DataverseDevKit Solution Layer Analyzer, including a command-line interface (CLI) for automation and CI/CD integration. + +## What Was Implemented + +### 1. Backend Models and Database Schema + +#### New Models +- **Report**: Represents a saved report configuration with query, severity, recommended actions +- **ReportGroup**: Organizes reports into logical groups +- **AnalyzerConfig**: Global configuration for analyzer including source/target solutions and reports +- **ReportSeverity**: Enum for severity levels (Information, Warning, Critical) +- **ReportVerbosity**: Enum for output detail levels (Basic, Medium, Verbose) +- **ReportOutputFormat**: Enum for output formats (YAML, JSON, CSV) + +#### Database Changes +- Added `Reports` table with columns for name, description, group, severity, action, query, display order +- Added `ReportGroups` table for organizing reports +- Configured Entity Framework relationships and indexes +- Support for automatic schema migration via EF Core + +### 2. Report Management Service + +Created `ReportService` with comprehensive CRUD operations: +- **Save/Update/Delete Reports**: Full lifecycle management +- **Duplicate Reports**: Clone existing reports with modifications +- **Reorder Reports**: Change display order and grouping +- **Execute Reports**: Run saved queries and return results +- **Group Management**: Create, update, delete, and reorder report groups +- **Export/Import Configuration**: YAML-based config persistence + +#### Serialization Support +- **YAML**: Using YamlDotNet for human-readable configs +- **JSON**: For machine-readable integration +- **CSV**: Custom CSV helper for Excel processing + +The CSV output is optimized for different verbosity levels: +- Basic: One row per component +- Medium: One row per layer with changed attributes list +- Verbose: One row per attribute change with old/new values + +### 3. Plugin Command Extensions + +Added 14 new commands to the Solution Layer Analyzer plugin: + +#### Report Commands +- `saveReport`: Save a query/filter as a report +- `updateReport`: Modify an existing report +- `deleteReport`: Remove a report +- `duplicateReport`: Clone a report +- `listReports`: Get all reports organized by groups +- `executeReport`: Run a saved report +- `reorderReports`: Change report ordering and grouping + +#### Group Commands +- `createReportGroup`: Create a new group +- `updateReportGroup`: Modify a group +- `deleteReportGroup`: Remove a group +- `reorderReportGroups`: Change group ordering + +#### Config Commands +- `exportConfig`: Export configuration to YAML +- `importConfig`: Import configuration from YAML +- `generateReportOutput`: Generate detailed reports in YAML/JSON/CSV + +### 4. CLI Application + +Created a complete .NET Console application (`DataverseDevKit.SolutionAnalyzer.CLI`) with: + +#### Features +- **System.CommandLine**: Modern command-line parsing +- **File Logging**: Dedicated log files per execution +- **Console Logging**: Real-time feedback with success/error indicators +- **YAML Configuration**: Human-readable config files +- **Multiple Output Formats**: YAML, JSON, CSV +- **Flexible Verbosity**: Control detail level for both CLI and reports + +#### Commands +- `index`: Build solution component index +- `run`: Execute all configured reports +- `export`: Export current configuration +- `import`: Import configuration from file + +#### Authentication Support (Structure Ready) +- Connection string +- Interactive OAuth (placeholder) +- Service principal with client credentials (placeholder) + +## Configuration File Structure + +The YAML configuration file structure: + +```yaml +sourceSolutions: + - CoreSolution +targetSolutions: + - Project1 + - Project2 +componentTypes: # Optional + - 1 # Entity + - 24 # SystemForm +reportGroups: + - name: Group Name + displayOrder: 1 + reports: + - name: Report Name + description: Description + severity: Information|Warning|Critical + recommendedAction: Action to take + displayOrder: 1 + queryJson: '{ filter query JSON }' +ungroupedReports: + - name: Standalone Report + # same structure as above +``` + +## Example Report Scenarios + +The implementation supports the scenarios described in the requirements: + +### 1. Empty Layers Detection +```yaml +name: Empty Layers that can be removed +severity: Information +action: Remove empty layer +``` +Identifies layers with no actual changes that can be safely removed. + +### 2. Consolidation Opportunities +```yaml +name: Form or View layers that may need consolidation +severity: Warning +action: Consider moving to Core solution +``` +Finds customizations that should potentially move to the core solution. + +### 3. Critical Conflicts +```yaml +name: Form or View conflicts between projects +severity: Critical +action: Immediate action required +``` +Detects conflicting customizations across multiple projects. + +### 4. Shared Concerns +```yaml +name: Non-UI component conflicts +severity: Critical +action: Review potential layer on shared concerns +``` +Identifies conflicts in entities, attributes, and other shared components. + +## Output Examples + +### YAML Output (Medium Verbosity) +```yaml +generatedAt: 2026-02-01T00:00:00Z +connectionId: env-12345 +verbosity: Medium +reports: + - name: Empty Layers + group: Project 1 + severity: Information + totalMatches: 5 + components: + - componentId: guid + componentType: 24 + logicalName: contact_form + layers: + - solutionName: Project1 + ordinal: 1 + changedAttributes: + - formXml + - displayName +``` + +### CSV Output (Basic Verbosity) +``` +Report Name,Group,Severity,Recommended Action,Component ID,Component Type,Logical Name,Display Name,Solutions,Make Portal URL +Empty Layers,Project 1,Information,Remove empty layer,guid,24,contact_form,Contact Form,CoreSolution; Project1,https://make.powerapps.com/... +``` + +## File Structure + +``` +src/ +├── cli/ +│ └── solution-analyzer/ +│ ├── DataverseDevKit.SolutionAnalyzer.CLI/ +│ │ ├── Program.cs +│ │ ├── SolutionAnalyzerCli.cs +│ │ ├── FileLogger.cs +│ │ └── DataverseDevKit.SolutionAnalyzer.CLI.csproj +│ ├── README.md +│ └── example-config.yaml +└── plugins/ + └── solution-layer-analyzer/ + └── src/ + ├── Models/ + │ ├── Report.cs + │ ├── ReportGroup.cs + │ ├── ReportSeverity.cs + │ └── AnalyzerConfig.cs + ├── Services/ + │ ├── ReportService.cs + │ └── CsvHelper.cs + ├── DTOs/ + │ └── ReportDtos.cs + ├── Data/ + │ └── AnalyzerDbContext.cs (updated) + └── SolutionLayerAnalyzerPlugin.cs (updated) +``` + +## Usage Examples + +### Index Solutions +```bash +ddk-solution-analyzer index \ + --config analyzer-config.yaml \ + --environment-url https://yourorg.crm.dynamics.com \ + --output ./reports +``` + +### Run All Reports +```bash +ddk-solution-analyzer run \ + --config analyzer-config.yaml \ + --environment-url https://yourorg.crm.dynamics.com \ + --format csv \ + --report-verbosity medium \ + --output ./reports +``` + +### CI/CD Integration +```bash +#!/bin/bash +ddk-solution-analyzer run \ + --config solution-analysis.yaml \ + --client-id $AZURE_CLIENT_ID \ + --client-secret $AZURE_CLIENT_SECRET \ + --tenant-id $AZURE_TENANT_ID \ + --environment-url $DATAVERSE_URL \ + --format json \ + --verbosity minimal \ + --output ./build/reports +``` + +## Next Steps + +To complete the implementation, the following items remain: + +### Authentication Integration +- Implement interactive OAuth flow in CLI +- Implement service principal authentication +- Integrate with Dataverse service client factory + +### Plugin Host Integration +- Wire up CLI to directly call plugin methods +- Setup plugin context and service providers +- Handle plugin lifecycle (initialize, execute, dispose) + +### Frontend UI (Phase 5) +- Create Reports tab in web UI +- Implement "Save as Report" from analysis view +- Add report editor and management UI +- Drag-and-drop reordering +- Import/export UI + +### Testing (Phase 6) +- Unit tests for report models +- Unit tests for ReportService +- Integration tests for CLI +- End-to-end tests + +## Benefits + +### For Development Teams +- **Early Detection**: Catch layer conflicts and issues early in development +- **Automated Monitoring**: Run reports in CI/CD pipelines +- **Clear Guidelines**: Severity levels and recommended actions guide developers + +### For Enterprise Organizations +- **Standardization**: Enforce organizational layering standards +- **Audit Trail**: File logs and report history +- **Excel Integration**: CSV export for analysis and reporting +- **Flexibility**: YAML configs easy to version control and share + +### For DevOps +- **Automation**: CLI tool integrates into existing pipelines +- **Multiple Formats**: JSON for tools, CSV for humans, YAML for config +- **Configurable**: Adjust verbosity and formats per use case +- **Scalable**: Process multiple environments with same config + +## Technical Highlights + +1. **Clean Architecture**: Separation of concerns between models, services, and presentation +2. **Entity Framework Core**: Modern ORM with SQLite for local persistence +3. **YAML Configuration**: Human-readable, version-control friendly +4. **Multiple Serializers**: YamlDotNet, System.Text.Json, custom CSV +5. **Extensible**: Easy to add new commands, output formats, or report types +6. **Type-Safe**: Strong typing throughout with nullable reference types +7. **Async/Await**: Modern async patterns for better performance +8. **Logging**: Structured logging with Microsoft.Extensions.Logging + +## Conclusion + +This implementation provides a solid foundation for enterprise-grade solution layer analysis and monitoring. The combination of a powerful plugin backend with a flexible CLI tool enables both interactive usage and automation scenarios. + +The YAML-based configuration makes it easy to define, share, and version control reporting rules, while the multiple output formats ensure compatibility with various tools and workflows. + +The modular design allows for easy extension and customization to meet specific organizational needs. diff --git a/msbuild.binlog b/msbuild.binlog new file mode 100644 index 0000000..616b385 Binary files /dev/null and b/msbuild.binlog differ diff --git a/package.json b/package.json index ce65ef4..8775e15 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "dev:sdk": "pnpm --filter @ddk/host-sdk dev", "build": "pnpm -r build", "build:shell": "pnpm --filter @ddk/shell build", + "build:shell:pre": "pnpm --filter @ddk/sdk build", "build:plugins": "pnpm --filter \"@ddk/plugin-*\" build", "type-check": "pnpm -r type-check", "lint": "pnpm -r lint", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 458da0b..0ff31db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,43 +39,6 @@ importers: specifier: ~5.7.3 version: 5.7.3 - src/plugins/sample-plugin/ui: - dependencies: - '@ddk/host-sdk': - specifier: workspace:* - version: link:../../../web/packages/host-sdk - '@fluentui/react-components': - specifier: ^9.56.4 - version: 9.72.10(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2) - '@fluentui/react-icons': - specifier: ^2.0.272 - version: 2.0.317(react@18.3.1) - react: - specifier: ^18.3.1 - version: 18.3.1 - react-dom: - specifier: ^18.3.1 - version: 18.3.1(react@18.3.1) - devDependencies: - '@originjs/vite-plugin-federation': - specifier: ^1.3.6 - version: 1.4.1 - '@types/react': - specifier: ^18.3.18 - version: 18.3.27 - '@types/react-dom': - specifier: ^18.3.5 - version: 18.3.7(@types/react@18.3.27) - '@vitejs/plugin-react': - specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.7)) - typescript: - specifier: ~5.7.3 - version: 5.7.3 - vite: - specifier: ^6.0.7 - version: 6.4.1(@types/node@22.19.7) - src/plugins/solution-layer-analyzer/ui: dependencies: '@ddk/host-sdk': @@ -109,9 +72,9 @@ importers: specifier: ^5.0.2 version: 5.0.10(@types/react@18.3.27)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)) devDependencies: - '@originjs/vite-plugin-federation': - specifier: ^1.3.6 - version: 1.4.1 + '@module-federation/vite': + specifier: ^1.11.0 + version: 1.11.0(rollup@4.57.0)(typescript@5.7.3)(vite@7.1.7(@types/node@22.19.7)(jiti@2.4.2)) '@types/react': specifier: ^18.3.18 version: 18.3.27 @@ -122,23 +85,20 @@ importers: specifier: ^1.8.8 version: 1.8.8 '@vitejs/plugin-react': - specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.7)) + specifier: ^5.1.3 + version: 5.1.3(vite@7.1.7(@types/node@22.19.7)(jiti@2.4.2)) typescript: specifier: ~5.7.3 version: 5.7.3 vite: - specifier: ^6.0.7 - version: 6.4.1(@types/node@22.19.7) + specifier: 7.1.7 + version: 7.1.7(@types/node@22.19.7)(jiti@2.4.2) src/web/apps/shell: dependencies: '@ddk/host-sdk': specifier: workspace:* version: link:../../packages/host-sdk - '@ddk/ui-components': - specifier: workspace:* - version: link:../../packages/ui-components '@dnd-kit/react': specifier: 0.2.3 version: 0.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -151,15 +111,21 @@ importers: '@fluentui/react-icons': specifier: ^2.0.272 version: 2.0.317(react@18.3.1) - '@originjs/vite-plugin-federation': - specifier: ^1.3.6 - version: 1.4.1 + '@module-federation/enhanced': + specifier: ^2.0.0 + version: 2.0.0(@rspack/core@1.7.5(@swc/helpers@0.5.18))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + '@module-federation/vite': + specifier: ^1.11.0 + version: 1.11.0(rollup@4.57.0)(typescript@5.7.3)(vite@7.1.7(@types/node@22.19.7)(jiti@2.4.2)) react: specifier: ^18.3.1 version: 18.3.1 react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) + react-is: + specifier: ^18.3.0 + version: 18.3.1 zustand: specifier: ^5.0.2 version: 5.0.10(@types/react@18.3.27)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)) @@ -170,15 +136,18 @@ importers: '@types/react-dom': specifier: ^18.3.5 version: 18.3.7(@types/react@18.3.27) + '@types/react-is': + specifier: ^18.3.0 + version: 18.3.1 '@vitejs/plugin-react': - specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.7)) + specifier: ^5.1.3 + version: 5.1.3(vite@7.1.7(@types/node@22.19.7)(jiti@2.4.2)) typescript: specifier: ~5.7.3 version: 5.7.3 vite: - specifier: ^6.0.7 - version: 6.4.1(@types/node@22.19.7) + specifier: 7.1.7 + version: 7.1.7(@types/node@22.19.7)(jiti@2.4.2) src/web/packages/host-sdk: devDependencies: @@ -186,53 +155,22 @@ importers: specifier: ~5.7.3 version: 5.7.3 - src/web/packages/ui-components: - dependencies: - '@ddk/host-sdk': - specifier: workspace:* - version: link:../host-sdk - '@fluentui/react-components': - specifier: ^9.56.4 - version: 9.72.10(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2) - '@fluentui/react-context-selector': - specifier: ^9.1.68 - version: 9.2.14(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2) - '@fluentui/react-icons': - specifier: ^2.0.272 - version: 2.0.317(react@18.3.1) - react: - specifier: ^18.3.1 - version: 18.3.1 - react-dom: - specifier: ^18.3.1 - version: 18.3.1(react@18.3.1) - devDependencies: - '@types/react': - specifier: ^18.3.18 - version: 18.3.27 - '@types/react-dom': - specifier: ^18.3.5 - version: 18.3.7(@types/react@18.3.27) - typescript: - specifier: ~5.7.3 - version: 5.7.3 - packages: - '@babel/code-frame@7.28.6': - resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} '@babel/compat-data@7.28.6': resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.6': - resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==} + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.6': - resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.28.6': @@ -278,6 +216,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-transform-react-jsx-self@7.27.1': resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} @@ -298,14 +241,18 @@ packages: resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.6': - resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} '@babel/types@7.28.6': resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + '@ctrl/tinycolor@3.6.1': resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} engines: {node: '>=10'} @@ -331,6 +278,15 @@ packages: '@dnd-kit/state@0.2.3': resolution: {integrity: sha512-4o+Tc9QrgmMa5Snopc4mtTNaFQVtreYGbG1So8q6Tq7/4ogwCcrqmVhzJ4+/Ryif7km4CqduBo62r00/sVh9/A==} + '@emnapi/core@1.8.1': + resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} + + '@emnapi/runtime@1.8.1': + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} @@ -1078,6 +1034,143 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@module-federation/bridge-react-webpack-plugin@2.0.0': + resolution: {integrity: sha512-AVT/rZK6RHva6ZTYfsyQ8oP4xYNTws3OzqKW/YxWaLXwQ3oG9ZbF7fKl4jIKoMKuuy2L9MGVXS4CYPZy0s8fXg==} + + '@module-federation/cli@2.0.0': + resolution: {integrity: sha512-IWGWbdgoeNcuA5jzqPr6pLTN1hovMQh9A1lgJp5fAvKfICfFXKq7K8nwMAQrWD6iEKApIenI0madk1Dg2PU3pw==} + engines: {node: '>=16.0.0'} + hasBin: true + + '@module-federation/data-prefetch@2.0.0': + resolution: {integrity: sha512-KPyZoqNrb5WgFY2owYnMaO2Mg2DYD6KXLVI7GPguj7Z/4pPKEC+SUjWU2FuSfTeyE6ZIi0iFGdwerxzlQ6nfmw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@module-federation/dts-plugin@0.21.6': + resolution: {integrity: sha512-YIsDk8/7QZIWn0I1TAYULniMsbyi2LgKTi9OInzVmZkwMC6644x/ratTWBOUDbdY1Co+feNkoYeot1qIWv2L7w==} + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: '>=1.0.24' + peerDependenciesMeta: + vue-tsc: + optional: true + + '@module-federation/dts-plugin@2.0.0': + resolution: {integrity: sha512-YyYMgLNARKdf3FLihnIzzUTgafHrqzR9YnKPmrfuCm2Jit+USqFT4QO58hcb0F5KSEyjB2ARPz9RM4XAVZhzMg==} + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: '>=1.0.24' + peerDependenciesMeta: + vue-tsc: + optional: true + + '@module-federation/enhanced@2.0.0': + resolution: {integrity: sha512-xeVrGvypYMvN8gJulbro3j1t8+aS1f9xjj4quwAAqgJF0Nz8bt7sXUYJyjUHPmC2UZsShZ0GnPHJNtI8/2GYjA==} + hasBin: true + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: '>=1.0.24' + webpack: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + vue-tsc: + optional: true + webpack: + optional: true + + '@module-federation/error-codes@0.21.6': + resolution: {integrity: sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==} + + '@module-federation/error-codes@0.22.0': + resolution: {integrity: sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==} + + '@module-federation/error-codes@2.0.0': + resolution: {integrity: sha512-9oE+hXuPv2zej7AxJ5hOgeRqlPs98meooV2FiutTfftLAyy2N6+Kwmmz5NR9d9t91weJj8N0cSHFoyenNHKTVg==} + + '@module-federation/inject-external-runtime-core-plugin@2.0.0': + resolution: {integrity: sha512-aZ6f4UU7KM5zBnHf3xsb2guqsfaEd6IlmuldbpED3JPk4ITwZk0DbvxRMr4prde7cfj8RH0nKMz2kmMncp+lIQ==} + peerDependencies: + '@module-federation/runtime-tools': 2.0.0 + + '@module-federation/managers@0.21.6': + resolution: {integrity: sha512-BeV6m2/7kF5MDVz9JJI5T8h8lMosnXkH2bOxxFewcra7ZjvDOgQu7WIio0mgk5l1zjNPvnEVKhnhrenEdcCiWg==} + + '@module-federation/managers@2.0.0': + resolution: {integrity: sha512-ZmkRIujH+T3xvkmy04TNvviFH8xFOrNeKCLb4tlH4ifU/kLfjTu+PYO/KAEIsgtmrDnd52zTf22dg3ok85OAHA==} + + '@module-federation/manifest@2.0.0': + resolution: {integrity: sha512-AXwYyGiDJdfP9MteKyIdJrLwG5tp4qKaq0uOPiWHilYN3/21G0DM7f30HgJqgx3WSTFSh7hcq0a3V3EZHH/9TA==} + + '@module-federation/rspack@2.0.0': + resolution: {integrity: sha512-1kziarKrPRM+rJax/AaMEZTwu7ORGed2xSxfdoP9GEbAFEGyNliadvw4kB6PqAfLad3PI4lQMX2vGMLI1KoyVQ==} + peerDependencies: + '@rspack/core': ^0.7.0 || ^1.0.0 || ^2.0.0-0 + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: '>=1.0.24' + peerDependenciesMeta: + typescript: + optional: true + vue-tsc: + optional: true + + '@module-federation/runtime-core@0.21.6': + resolution: {integrity: sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==} + + '@module-federation/runtime-core@0.22.0': + resolution: {integrity: sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==} + + '@module-federation/runtime-core@2.0.0': + resolution: {integrity: sha512-UhIGUs7Mg+TwMI2lgaLnj4UehpoyXbR7HDb2+vLikgBulPmFtodeWfsxCgENEwKsIY1vS0lOun15lNOn1vo3Xg==} + + '@module-federation/runtime-tools@0.22.0': + resolution: {integrity: sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==} + + '@module-federation/runtime-tools@2.0.0': + resolution: {integrity: sha512-eMDQN4hYpwvUnCNMjfQdtPVzYaO2DdauemHVc4HnyibgqijRzBwJh9bI2ph4R1xfYEm18+QmTrfXrRlaK2Xizw==} + + '@module-federation/runtime@0.21.6': + resolution: {integrity: sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==} + + '@module-federation/runtime@0.22.0': + resolution: {integrity: sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==} + + '@module-federation/runtime@2.0.0': + resolution: {integrity: sha512-vPxQrmQNq3Z1T+1fkHEvFwTdJq9wuCLvdp/lpu9k2Oy7QP/Pj6QoQ/S7J5MCIAoRwj8Wj3z3ma21/DyHwLGvzA==} + + '@module-federation/sdk@0.21.6': + resolution: {integrity: sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==} + + '@module-federation/sdk@0.22.0': + resolution: {integrity: sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==} + + '@module-federation/sdk@2.0.0': + resolution: {integrity: sha512-JYd1wTulsaoLT7HTk2oXL5y5797Z+H4mzxuUEKnSJo7R34RZSqehsqPSND7n0HT/1nf7uyn0Rb4qBfR3BVvdHQ==} + + '@module-federation/third-party-dts-extractor@0.21.6': + resolution: {integrity: sha512-Il6x4hLsvCgZNk1DFwuMBNeoxD1BsZ5AW2BI/nUgu0k5FiAvfcz1OFawRFEHtaM/kVrCsymMOW7pCao90DaX3A==} + + '@module-federation/third-party-dts-extractor@2.0.0': + resolution: {integrity: sha512-B99+Wkbd2xIodVTjNCeFtFC89Uh2/AtYkSESlz4+6Cec42wyqrGxyfYm4qRY0LhJI+YmZXLk/RTm85m15eBKKg==} + + '@module-federation/vite@1.11.0': + resolution: {integrity: sha512-dawLMF1JUt/4IUwQh7dUF5TBcetGg3qPKBX+hCFL2aHFd8m3EI+HmGc4qIGVlGZMub6mpTIGo9EHfhV5cDIOmQ==} + peerDependencies: + vite: <=7.1.7 + + '@module-federation/webpack-bundler-runtime@0.22.0': + resolution: {integrity: sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==} + + '@module-federation/webpack-bundler-runtime@2.0.0': + resolution: {integrity: sha512-XxiFR/A1G1fa9hTyylWNbs6yEU2hC7FqHAArFptD4U9qp/xyoLgqbK4M8LwltOAyAM8hRofcMdSyiRKVlWqAfQ==} + '@monaco-editor/loader@1.7.0': resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} @@ -1088,6 +1181,9 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@napi-rs/wasm-runtime@1.0.7': + resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1100,15 +1196,20 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@originjs/vite-plugin-federation@1.4.1': - resolution: {integrity: sha512-Uo08jW5pj1t58OUKuZNkmzcfTN2pqeVuAWCCiKf/75/oll4Efq4cHOqSE1FXMlvwZNGDziNdDyBbQ5IANem3CQ==} - engines: {node: '>=14.0.0', pnpm: '>=7.0.1'} - '@preact/signals-core@1.12.2': resolution: {integrity: sha512-5Yf8h1Ke3SMHr15xl630KtwPTW4sYDFkkxS0vQ8UiQLWwZQnrF9IKaVG1mN5VcJz52EcWs2acsc/Npjha/7ysA==} - '@rolldown/pluginutils@1.0.0-beta.27': - resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + '@rolldown/pluginutils@1.0.0-rc.2': + resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true '@rollup/rollup-android-arm-eabi@4.57.0': resolution: {integrity: sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==} @@ -1240,9 +1341,76 @@ packages: cpu: [x64] os: [win32] + '@rspack/binding-darwin-arm64@1.7.5': + resolution: {integrity: sha512-dg2/IrF+g498NUt654N8LFWfIiUsHlTankWieE1S3GWEQM6jweeRbNuu1Py1nWIUsjR2yQtv7ziia7c9Q8UTaQ==} + cpu: [arm64] + os: [darwin] + + '@rspack/binding-darwin-x64@1.7.5': + resolution: {integrity: sha512-RQJX4boQJUu3lo1yiN344+y8W6iSO08ARXIZqFPg66coOgfX1lhsXQSRJGQEQG4PAcYuC0GmrYFzErliifbc1Q==} + cpu: [x64] + os: [darwin] + + '@rspack/binding-linux-arm64-gnu@1.7.5': + resolution: {integrity: sha512-R7CO1crkJQLIQpJQzf+6DMHjvcvH/VxsatS5CG897IIT2aAfBeQuQAO+ERJko/UwSZam2K8Rxjuopcu5A2jsTQ==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-arm64-musl@1.7.5': + resolution: {integrity: sha512-moDVFD06ISZi+wCIjJLzQSr8WO8paViacSHk+rOKQxwKI96cPoC4JFkz0+ibT2uks4i2ecs4Op48orsoguiXxw==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-x64-gnu@1.7.5': + resolution: {integrity: sha512-LGtdsdhtA5IxdMptj2NDVEbuZF4aqM99BVn3saHp92A4Fn20mW9UtQ+19PtaOFdbQBUN1GcP+cosrJ1wY56hOg==} + cpu: [x64] + os: [linux] + + '@rspack/binding-linux-x64-musl@1.7.5': + resolution: {integrity: sha512-V1HTvuj0XF/e4Xnixqf7FrxdCtTkYqn26EKwH7ExUFuVBh4SsLGr29EK5SOXBG0xdy5TSEUokMup7cuONPb3Hw==} + cpu: [x64] + os: [linux] + + '@rspack/binding-wasm32-wasi@1.7.5': + resolution: {integrity: sha512-rGNHrk2QuLFfwOTib91skuLh2aMYeTP4lgM4zanDhtt95DLDlwioETFY7FzY1WmS+Z3qnEyrgQIRp8osy0NKTw==} + cpu: [wasm32] + + '@rspack/binding-win32-arm64-msvc@1.7.5': + resolution: {integrity: sha512-eLyD9URS9M2pYa7sPICu9S0OuDAMnnGfuqrZYlrtgnEOEgimaG39gX6ENLwHvlNulaVMMFTNbDnS/2MELZ7r7g==} + cpu: [arm64] + os: [win32] + + '@rspack/binding-win32-ia32-msvc@1.7.5': + resolution: {integrity: sha512-ZT4eC8hHWzweA6S4Tl2c/z/fvhbU7Wnh+l76z+qmDy8wuA8uNrHgIb1mHLPli/wsqcjmIy8rDO9gkIBitg5I+w==} + cpu: [ia32] + os: [win32] + + '@rspack/binding-win32-x64-msvc@1.7.5': + resolution: {integrity: sha512-a2j10QS3dZvW+gdu+FXteAkChxsK2g9BRUOmpt13w22LkiGrdmOkMQyDWRgJNxUGJTlqIUqtXxs72nTTlzo2Sw==} + cpu: [x64] + os: [win32] + + '@rspack/binding@1.7.5': + resolution: {integrity: sha512-tlZfDHfGu765FBL3hIyjrr8slJZztv7rCM+KIczZS7UlJQDl1+WsDKUe/+E1Fw9SlmorLWK40+y3rLTHmMrN2A==} + + '@rspack/core@1.7.5': + resolution: {integrity: sha512-W1ChLhjBxGg6y4AHjEVjhcww/FZJ2O9obR0EOlYcfrfQGojCAUMeQjbmaF2sse5g5m0vSCaPtNYkycZ0qVRk1A==} + engines: {node: '>=18.12.0'} + peerDependencies: + '@swc/helpers': '>=0.5.1' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@rspack/lite-tapable@1.1.0': + resolution: {integrity: sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==} + '@swc/helpers@0.5.18': resolution: {integrity: sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -1354,6 +1522,9 @@ packages: '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/node@22.19.7': resolution: {integrity: sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==} @@ -1365,12 +1536,18 @@ packages: peerDependencies: '@types/react': ^18.0.0 + '@types/react-is@18.3.1': + resolution: {integrity: sha512-zts4lhQn5ia0cF/y2+3V6Riu0MAfez9/LJYavdM8TvcVl+S91A/7VWxyBT8hbRuWspmuCaiGI0F41OJYGrKhRA==} + '@types/react-window@1.8.8': resolution: {integrity: sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==} '@types/react@18.3.27': resolution: {integrity: sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==} + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -1435,12 +1612,16 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vitejs/plugin-react@4.7.0': - resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} - engines: {node: ^14.18.0 || >=16.0.0} + '@vitejs/plugin-react@5.1.3': + resolution: {integrity: sha512-NVUnA6gQCl8jfoYqKqQU5Clv0aPw14KkZYCsX6T9Lfu9slI0LOU10OTwFHS/WmptsMMpshNd/1tuWsHQ2Uk+cg==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1451,9 +1632,33 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + adm-zip@0.5.16: + resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} + engines: {node: '>=12.0'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1501,10 +1706,20 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + axios@1.13.4: + resolution: {integrity: sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1527,6 +1742,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + btoa@1.2.1: + resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==} + engines: {node: '>= 0.4.0'} + hasBin: true + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -1546,6 +1766,10 @@ packages: caniuse-lite@1.0.30001766: resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -1561,6 +1785,14 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -1573,9 +1805,25 @@ packages: engines: {node: '>=18'} hasBin: true + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookies@0.9.1: + resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} + engines: {node: '>= 0.8'} + + cron-parser@4.9.0: + resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} + engines: {node: '>=12.0.0'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -1722,6 +1970,10 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} + date-format@4.0.14: + resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} + engines: {node: '>=4.0'} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1731,6 +1983,9 @@ packages: supports-color: optional: true + deep-equal@1.0.1: + resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1742,9 +1997,31 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + delaunator@5.0.1: resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1764,6 +2041,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + electron-to-chromium@1.5.282: resolution: {integrity: sha512-FCPkJtpst28UmFzd903iU7PdeVTfY0KAeJy+Lk0GLZRwgwYHn/irRcaCbQQOmr5Vytc/7rcavsYLvTM8RiHYhQ==} @@ -1783,6 +2063,10 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + es-abstract@1.24.1: resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} engines: {node: '>= 0.4'} @@ -1824,6 +2108,9 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -1876,13 +2163,17 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1896,6 +2187,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -1916,6 +2210,14 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-file-up@2.0.1: + resolution: {integrity: sha512-qVdaUhYO39zmh28/JLQM5CoYN9byEOKEH4qfa8K1eNV17W0UUMJ9WgbR/hHFH+t5rcl+6RTb5UC7ck/I+uRkpQ==} + engines: {node: '>=8'} + + find-pkg@2.0.0: + resolution: {integrity: sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ==} + engines: {node: '>=8'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -1927,10 +2229,35 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1985,6 +2312,14 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported + global-modules@1.0.0: + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} + + global-prefix@1.0.2: + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} + globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -2001,6 +2336,9 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -2031,6 +2369,22 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + + http-assert@1.5.0: + resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} + engines: {node: '>= 0.8'} + + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -2054,6 +2408,9 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -2170,16 +2527,29 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + iterator.prototype@1.1.5: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2198,6 +2568,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2206,6 +2579,12 @@ packages: engines: {node: '>=6'} hasBin: true + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -2213,9 +2592,20 @@ packages: keyborg@2.6.0: resolution: {integrity: sha512-o5kvLbuTF+o326CMVYpjlaykxqYP9DphFQZ2ZpgrvBouyvOxyEB7oqe8nOLFpiV5VCtz0D3pt8gXQYWpLpBnmA==} + keygrip@1.1.0: + resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} + engines: {node: '>= 0.6'} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + koa-compose@4.1.0: + resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + + koa@3.0.3: + resolution: {integrity: sha512-MeuwbCoN1daWS32/Ni5qkzmrOtQO2qrnfdxDHjrm6s4b59yG4nexAJ0pTEFyzjLp0pBVO80CZp0vW8Ze30Ebow==} + engines: {node: '>= 18'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -2224,9 +2614,19 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.clonedeepwith@4.5.0: + resolution: {integrity: sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + log4js@6.9.1: + resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} + engines: {node: '>=8.0'} + + long-timeout@0.1.1: + resolution: {integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -2234,10 +2634,13 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + luxon@3.7.2: + resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} engines: {node: '>=12'} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + marked@14.0.0: resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==} engines: {node: '>= 18'} @@ -2247,6 +2650,10 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} @@ -2258,6 +2665,22 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2279,9 +2702,17 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-schedule@2.1.1: + resolution: {integrity: sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==} + engines: {node: '>=6'} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -2310,6 +2741,10 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -2333,6 +2768,14 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2352,6 +2795,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2383,6 +2829,9 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -2390,6 +2839,9 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + rambda@9.4.2: + resolution: {integrity: sha512-++euMfxnl7OgaEKwXh9QqThOjMeta2HH001N1v4mYQzBjJBnmXBh2BCK6dZAbICFVXOFUVD3xFG0R3ZPU0mxXw==} + react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -2401,8 +2853,11 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-refresh@0.17.0: - resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} react-window@1.8.11: @@ -2428,10 +2883,22 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-dir@1.0.1: + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true @@ -2440,6 +2907,9 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -2469,6 +2939,9 @@ packages: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-push-apply@1.0.0: resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} @@ -2483,10 +2956,19 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + schema-utils@4.3.3: + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} + engines: {node: '>= 10.13.0'} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + semver@7.7.3: resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} @@ -2504,6 +2986,9 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2536,6 +3021,9 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + sorted-array-functions@1.3.0: + resolution: {integrity: sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -2543,10 +3031,22 @@ packages: state-local@1.0.7: resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} + streamroller@3.1.5: + resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} + engines: {node: '>=8.0'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -2607,6 +3107,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -2620,6 +3124,10 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsscmp@1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -2628,6 +3136,10 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -2656,6 +3168,18 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + upath@2.0.1: + resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} + engines: {node: '>=4'} + update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true @@ -2670,19 +3194,23 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - vite@6.4.1: - resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite@7.1.7: + resolution: {integrity: sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 jiti: '>=1.21.0' - less: '*' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -2726,6 +3254,10 @@ packages: resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} engines: {node: '>= 0.4'} + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -2742,6 +3274,18 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -2781,7 +3325,7 @@ packages: snapshots: - '@babel/code-frame@7.28.6': + '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 @@ -2789,17 +3333,17 @@ snapshots: '@babel/compat-data@7.28.6': {} - '@babel/core@7.28.6': + '@babel/core@7.29.0': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helpers': 7.28.6 - '@babel/parser': 7.28.6 + '@babel/parser': 7.29.0 '@babel/template': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -2809,10 +3353,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.6': + '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 @@ -2829,17 +3373,17 @@ snapshots: '@babel/helper-module-imports@7.28.6': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -2854,38 +3398,42 @@ snapshots: '@babel/helpers@7.28.6': dependencies: '@babel/template': 7.28.6 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/parser@7.28.6': dependencies: '@babel/types': 7.28.6 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.6)': + '@babel/parser@7.29.0': + dependencies: + '@babel/types': 7.29.0 + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/runtime@7.28.6': {} '@babel/template@7.28.6': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 - '@babel/traverse@7.28.6': + '@babel/traverse@7.29.0': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.6 + '@babel/parser': 7.29.0 '@babel/template': 7.28.6 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -2895,6 +3443,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@ctrl/tinycolor@3.6.1': {} '@dnd-kit/abstract@0.2.3': @@ -2936,6 +3489,22 @@ snapshots: '@preact/signals-core': 1.12.2 tslib: 2.8.1 + '@emnapi/core@1.8.1': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.8.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/hash@0.9.2': {} '@esbuild/aix-ppc64@0.25.12': @@ -4252,6 +4821,260 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@module-federation/bridge-react-webpack-plugin@2.0.0': + dependencies: + '@module-federation/sdk': 2.0.0 + '@types/semver': 7.5.8 + semver: 7.6.3 + + '@module-federation/cli@2.0.0(typescript@5.7.3)': + dependencies: + '@module-federation/dts-plugin': 2.0.0(typescript@5.7.3) + '@module-federation/sdk': 2.0.0 + chalk: 3.0.0 + commander: 11.1.0 + jiti: 2.4.2 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - typescript + - utf-8-validate + - vue-tsc + + '@module-federation/data-prefetch@2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@module-federation/runtime': 2.0.0 + '@module-federation/sdk': 2.0.0 + fs-extra: 9.1.0 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@module-federation/dts-plugin@0.21.6(typescript@5.7.3)': + dependencies: + '@module-federation/error-codes': 0.21.6 + '@module-federation/managers': 0.21.6 + '@module-federation/sdk': 0.21.6 + '@module-federation/third-party-dts-extractor': 0.21.6 + adm-zip: 0.5.16 + ansi-colors: 4.1.3 + axios: 1.13.4 + chalk: 3.0.0 + fs-extra: 9.1.0 + isomorphic-ws: 5.0.0(ws@8.18.0) + koa: 3.0.3 + lodash.clonedeepwith: 4.5.0 + log4js: 6.9.1 + node-schedule: 2.1.1 + rambda: 9.4.2 + typescript: 5.7.3 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@module-federation/dts-plugin@2.0.0(typescript@5.7.3)': + dependencies: + '@module-federation/error-codes': 2.0.0 + '@module-federation/managers': 2.0.0 + '@module-federation/sdk': 2.0.0 + '@module-federation/third-party-dts-extractor': 2.0.0 + adm-zip: 0.5.16 + ansi-colors: 4.1.3 + axios: 1.13.4 + chalk: 3.0.0 + fs-extra: 9.1.0 + isomorphic-ws: 5.0.0(ws@8.18.0) + koa: 3.0.3 + lodash.clonedeepwith: 4.5.0 + log4js: 6.9.1 + node-schedule: 2.1.1 + rambda: 9.4.2 + typescript: 5.7.3 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@module-federation/enhanced@2.0.0(@rspack/core@1.7.5(@swc/helpers@0.5.18))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)': + dependencies: + '@module-federation/bridge-react-webpack-plugin': 2.0.0 + '@module-federation/cli': 2.0.0(typescript@5.7.3) + '@module-federation/data-prefetch': 2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@module-federation/dts-plugin': 2.0.0(typescript@5.7.3) + '@module-federation/error-codes': 2.0.0 + '@module-federation/inject-external-runtime-core-plugin': 2.0.0(@module-federation/runtime-tools@2.0.0) + '@module-federation/managers': 2.0.0 + '@module-federation/manifest': 2.0.0(typescript@5.7.3) + '@module-federation/rspack': 2.0.0(@rspack/core@1.7.5(@swc/helpers@0.5.18))(typescript@5.7.3) + '@module-federation/runtime-tools': 2.0.0 + '@module-federation/sdk': 2.0.0 + btoa: 1.2.1 + schema-utils: 4.3.3 + upath: 2.0.1 + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - '@rspack/core' + - bufferutil + - debug + - react + - react-dom + - supports-color + - utf-8-validate + + '@module-federation/error-codes@0.21.6': {} + + '@module-federation/error-codes@0.22.0': {} + + '@module-federation/error-codes@2.0.0': {} + + '@module-federation/inject-external-runtime-core-plugin@2.0.0(@module-federation/runtime-tools@2.0.0)': + dependencies: + '@module-federation/runtime-tools': 2.0.0 + + '@module-federation/managers@0.21.6': + dependencies: + '@module-federation/sdk': 0.21.6 + find-pkg: 2.0.0 + fs-extra: 9.1.0 + + '@module-federation/managers@2.0.0': + dependencies: + '@module-federation/sdk': 2.0.0 + find-pkg: 2.0.0 + fs-extra: 9.1.0 + + '@module-federation/manifest@2.0.0(typescript@5.7.3)': + dependencies: + '@module-federation/dts-plugin': 2.0.0(typescript@5.7.3) + '@module-federation/managers': 2.0.0 + '@module-federation/sdk': 2.0.0 + chalk: 3.0.0 + find-pkg: 2.0.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - typescript + - utf-8-validate + - vue-tsc + + '@module-federation/rspack@2.0.0(@rspack/core@1.7.5(@swc/helpers@0.5.18))(typescript@5.7.3)': + dependencies: + '@module-federation/bridge-react-webpack-plugin': 2.0.0 + '@module-federation/dts-plugin': 2.0.0(typescript@5.7.3) + '@module-federation/inject-external-runtime-core-plugin': 2.0.0(@module-federation/runtime-tools@2.0.0) + '@module-federation/managers': 2.0.0 + '@module-federation/manifest': 2.0.0(typescript@5.7.3) + '@module-federation/runtime-tools': 2.0.0 + '@module-federation/sdk': 2.0.0 + '@rspack/core': 1.7.5(@swc/helpers@0.5.18) + btoa: 1.2.1 + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@module-federation/runtime-core@0.21.6': + dependencies: + '@module-federation/error-codes': 0.21.6 + '@module-federation/sdk': 0.21.6 + + '@module-federation/runtime-core@0.22.0': + dependencies: + '@module-federation/error-codes': 0.22.0 + '@module-federation/sdk': 0.22.0 + + '@module-federation/runtime-core@2.0.0': + dependencies: + '@module-federation/error-codes': 2.0.0 + '@module-federation/sdk': 2.0.0 + + '@module-federation/runtime-tools@0.22.0': + dependencies: + '@module-federation/runtime': 0.22.0 + '@module-federation/webpack-bundler-runtime': 0.22.0 + + '@module-federation/runtime-tools@2.0.0': + dependencies: + '@module-federation/runtime': 2.0.0 + '@module-federation/webpack-bundler-runtime': 2.0.0 + + '@module-federation/runtime@0.21.6': + dependencies: + '@module-federation/error-codes': 0.21.6 + '@module-federation/runtime-core': 0.21.6 + '@module-federation/sdk': 0.21.6 + + '@module-federation/runtime@0.22.0': + dependencies: + '@module-federation/error-codes': 0.22.0 + '@module-federation/runtime-core': 0.22.0 + '@module-federation/sdk': 0.22.0 + + '@module-federation/runtime@2.0.0': + dependencies: + '@module-federation/error-codes': 2.0.0 + '@module-federation/runtime-core': 2.0.0 + '@module-federation/sdk': 2.0.0 + + '@module-federation/sdk@0.21.6': {} + + '@module-federation/sdk@0.22.0': {} + + '@module-federation/sdk@2.0.0': {} + + '@module-federation/third-party-dts-extractor@0.21.6': + dependencies: + find-pkg: 2.0.0 + fs-extra: 9.1.0 + resolve: 1.22.8 + + '@module-federation/third-party-dts-extractor@2.0.0': + dependencies: + find-pkg: 2.0.0 + fs-extra: 9.1.0 + resolve: 1.22.8 + + '@module-federation/vite@1.11.0(rollup@4.57.0)(typescript@5.7.3)(vite@7.1.7(@types/node@22.19.7)(jiti@2.4.2))': + dependencies: + '@module-federation/dts-plugin': 0.21.6(typescript@5.7.3) + '@module-federation/runtime': 0.21.6 + '@module-federation/sdk': 0.21.6 + '@rollup/pluginutils': 5.3.0(rollup@4.57.0) + defu: 6.1.4 + estree-walker: 2.0.2 + magic-string: 0.30.21 + pathe: 1.1.2 + vite: 7.1.7(@types/node@22.19.7)(jiti@2.4.2) + transitivePeerDependencies: + - bufferutil + - debug + - rollup + - supports-color + - typescript + - utf-8-validate + - vue-tsc + + '@module-federation/webpack-bundler-runtime@0.22.0': + dependencies: + '@module-federation/runtime': 0.22.0 + '@module-federation/sdk': 0.22.0 + + '@module-federation/webpack-bundler-runtime@2.0.0': + dependencies: + '@module-federation/runtime': 2.0.0 + '@module-federation/sdk': 2.0.0 + '@monaco-editor/loader@1.7.0': dependencies: state-local: 1.0.7 @@ -4263,6 +5086,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@napi-rs/wasm-runtime@1.0.7': + dependencies: + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 + '@tybys/wasm-util': 0.10.1 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4275,14 +5105,17 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@originjs/vite-plugin-federation@1.4.1': - dependencies: - estree-walker: 3.0.3 - magic-string: 0.27.0 - '@preact/signals-core@1.12.2': {} - '@rolldown/pluginutils@1.0.0-beta.27': {} + '@rolldown/pluginutils@1.0.0-rc.2': {} + + '@rollup/pluginutils@5.3.0(rollup@4.57.0)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.57.0 '@rollup/rollup-android-arm-eabi@4.57.0': optional: true @@ -4362,10 +5195,70 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.57.0': optional: true + '@rspack/binding-darwin-arm64@1.7.5': + optional: true + + '@rspack/binding-darwin-x64@1.7.5': + optional: true + + '@rspack/binding-linux-arm64-gnu@1.7.5': + optional: true + + '@rspack/binding-linux-arm64-musl@1.7.5': + optional: true + + '@rspack/binding-linux-x64-gnu@1.7.5': + optional: true + + '@rspack/binding-linux-x64-musl@1.7.5': + optional: true + + '@rspack/binding-wasm32-wasi@1.7.5': + dependencies: + '@napi-rs/wasm-runtime': 1.0.7 + optional: true + + '@rspack/binding-win32-arm64-msvc@1.7.5': + optional: true + + '@rspack/binding-win32-ia32-msvc@1.7.5': + optional: true + + '@rspack/binding-win32-x64-msvc@1.7.5': + optional: true + + '@rspack/binding@1.7.5': + optionalDependencies: + '@rspack/binding-darwin-arm64': 1.7.5 + '@rspack/binding-darwin-x64': 1.7.5 + '@rspack/binding-linux-arm64-gnu': 1.7.5 + '@rspack/binding-linux-arm64-musl': 1.7.5 + '@rspack/binding-linux-x64-gnu': 1.7.5 + '@rspack/binding-linux-x64-musl': 1.7.5 + '@rspack/binding-wasm32-wasi': 1.7.5 + '@rspack/binding-win32-arm64-msvc': 1.7.5 + '@rspack/binding-win32-ia32-msvc': 1.7.5 + '@rspack/binding-win32-x64-msvc': 1.7.5 + + '@rspack/core@1.7.5(@swc/helpers@0.5.18)': + dependencies: + '@module-federation/runtime-tools': 0.22.0 + '@rspack/binding': 1.7.5 + '@rspack/lite-tapable': 1.1.0 + optionalDependencies: + '@swc/helpers': 0.5.18 + + '@rspack/lite-tapable@1.1.0': {} + '@swc/helpers@0.5.18': dependencies: tslib: 2.8.1 + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.28.6 @@ -4508,6 +5401,8 @@ snapshots: '@types/geojson@7946.0.16': {} + '@types/json-schema@7.0.15': {} + '@types/node@22.19.7': dependencies: undici-types: 6.21.0 @@ -4518,6 +5413,10 @@ snapshots: dependencies: '@types/react': 18.3.27 + '@types/react-is@18.3.1': + dependencies: + '@types/react': 18.3.27 + '@types/react-window@1.8.8': dependencies: '@types/react': 18.3.27 @@ -4527,6 +5426,8 @@ snapshots: '@types/prop-types': 15.7.15 csstype: 3.2.3 + '@types/semver@7.5.8': {} + '@types/trusted-types@2.0.7': optional: true @@ -4613,24 +5514,40 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.7))': + '@vitejs/plugin-react@5.1.3(vite@7.1.7(@types/node@22.19.7)(jiti@2.4.2))': dependencies: - '@babel/core': 7.28.6 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.6) - '@rolldown/pluginutils': 1.0.0-beta.27 + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-rc.2 '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 6.4.1(@types/node@22.19.7) + react-refresh: 0.18.0 + vite: 7.1.7(@types/node@22.19.7)(jiti@2.4.2) transitivePeerDependencies: - supports-color + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 acorn@8.15.0: {} + adm-zip@0.5.16: {} + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -4638,6 +5555,15 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-colors@4.1.3: {} + ansi-regex@5.0.1: {} ansi-styles@4.3.0: @@ -4707,10 +5633,22 @@ snapshots: async-function@1.0.0: {} + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 + axios@1.13.4: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.5 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + balanced-match@1.0.2: {} baseline-browser-mapping@2.9.19: {} @@ -4736,6 +5674,8 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) + btoa@1.2.1: {} + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -4757,6 +5697,11 @@ snapshots: caniuse-lite@1.0.30001766: {} + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -4774,6 +5719,12 @@ snapshots: color-name@1.1.4: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@11.1.0: {} + commander@7.2.0: {} concat-map@0.0.1: {} @@ -4787,8 +5738,23 @@ snapshots: tree-kill: 1.2.2 yargs: 17.7.2 + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + convert-source-map@2.0.0: {} + cookies@0.9.1: + dependencies: + depd: 2.0.0 + keygrip: 1.1.0 + + cron-parser@4.9.0: + dependencies: + luxon: 3.7.2 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -4967,10 +5933,14 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 + date-format@4.0.14: {} + debug@4.4.3: dependencies: ms: 2.1.3 + deep-equal@1.0.1: {} + deep-is@0.1.4: {} define-data-property@1.1.4: @@ -4985,10 +5955,22 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + defu@6.1.4: {} + delaunator@5.0.1: dependencies: robust-predicates: 3.0.2 + delayed-stream@1.0.0: {} + + delegates@1.0.0: {} + + depd@1.1.2: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -5011,6 +5993,8 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + ee-first@1.1.1: {} + electron-to-chromium@1.5.282: {} embla-carousel-autoplay@8.6.0(embla-carousel@8.6.0): @@ -5025,6 +6009,8 @@ snapshots: emoji-regex@8.0.0: {} + encodeurl@2.0.0: {} + es-abstract@1.24.1: dependencies: array-buffer-byte-length: 1.0.2 @@ -5157,6 +6143,8 @@ snapshots: escalade@3.2.0: {} + escape-html@1.0.3: {} + escape-string-regexp@4.0.0: {} eslint-config-prettier@9.1.2(eslint@8.57.1): @@ -5255,12 +6243,14 @@ snapshots: estraverse@5.3.0: {} - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.8 + estree-walker@2.0.2: {} esutils@2.0.3: {} + expand-tilde@2.0.2: + dependencies: + homedir-polyfill: 1.0.3 + fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -5275,6 +6265,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-uri@3.1.0: {} + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -5291,6 +6283,14 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-file-up@2.0.1: + dependencies: + resolve-dir: 1.0.1 + + find-pkg@2.0.0: + dependencies: + find-file-up: 2.0.1 + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -5304,10 +6304,35 @@ snapshots: flatted@3.3.3: {} + follow-redirects@1.15.11: {} + for-each@0.3.5: dependencies: is-callable: 1.2.7 + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + fresh@0.5.2: {} + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -5373,6 +6398,20 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 + global-modules@1.0.0: + dependencies: + global-prefix: 1.0.2 + is-windows: 1.0.2 + resolve-dir: 1.0.1 + + global-prefix@1.0.2: + dependencies: + expand-tilde: 2.0.2 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 1.0.2 + which: 1.3.1 + globals@13.24.0: dependencies: type-fest: 0.20.2 @@ -5393,6 +6432,8 @@ snapshots: gopd@1.2.0: {} + graceful-fs@4.2.11: {} + graphemer@1.4.0: {} has-bigints@1.1.0: {} @@ -5417,6 +6458,31 @@ snapshots: dependencies: function-bind: 1.1.2 + homedir-polyfill@1.0.3: + dependencies: + parse-passwd: 1.0.0 + + http-assert@1.5.0: + dependencies: + deep-equal: 1.0.1 + http-errors: 1.8.1 + + http-errors@1.8.1: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -5437,6 +6503,8 @@ snapshots: inherits@2.0.4: {} + ini@1.3.8: {} + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -5557,10 +6625,16 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 + is-windows@1.0.2: {} + isarray@2.0.5: {} isexe@2.0.0: {} + isomorphic-ws@5.0.0(ws@8.18.0): + dependencies: + ws: 8.18.0 + iterator.prototype@1.1.5: dependencies: define-data-property: 1.1.4 @@ -5570,6 +6644,8 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 + jiti@2.4.2: {} + js-tokens@4.0.0: {} js-yaml@4.1.1: @@ -5582,10 +6658,22 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@2.2.3: {} + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.9 @@ -5595,10 +6683,37 @@ snapshots: keyborg@2.6.0: {} + keygrip@1.1.0: + dependencies: + tsscmp: 1.0.6 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 + koa-compose@4.1.0: {} + + koa@3.0.3: + dependencies: + accepts: 1.3.8 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookies: 0.9.1 + delegates: 1.0.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + fresh: 0.5.2 + http-assert: 1.5.0 + http-errors: 2.0.1 + koa-compose: 4.1.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + type-is: 2.0.1 + vary: 1.1.2 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -5608,8 +6723,22 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.clonedeepwith@4.5.0: {} + lodash.merge@4.6.2: {} + log4js@6.9.1: + dependencies: + date-format: 4.0.14 + debug: 4.4.3 + flatted: 3.3.3 + rfdc: 1.4.1 + streamroller: 3.1.5 + transitivePeerDependencies: + - supports-color + + long-timeout@0.1.1: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -5618,7 +6747,9 @@ snapshots: dependencies: yallist: 3.1.1 - magic-string@0.27.0: + luxon@3.7.2: {} + + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -5626,6 +6757,8 @@ snapshots: math-intrinsics@1.1.0: {} + media-typer@1.1.0: {} + memoize-one@5.2.1: {} merge2@1.4.1: {} @@ -5635,6 +6768,18 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -5654,8 +6799,16 @@ snapshots: natural-compare@1.4.0: {} + negotiator@0.6.3: {} + node-releases@2.0.27: {} + node-schedule@2.1.1: + dependencies: + cron-parser: 4.9.0 + long-timeout: 0.1.1 + sorted-array-functions: 1.3.0 + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -5692,6 +6845,10 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -5723,6 +6880,10 @@ snapshots: dependencies: callsites: 3.1.0 + parse-passwd@1.0.0: {} + + parseurl@1.3.3: {} + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -5733,6 +6894,8 @@ snapshots: path-type@4.0.0: {} + pathe@1.1.2: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -5757,10 +6920,14 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + proxy-from-env@1.1.0: {} + punycode@2.3.1: {} queue-microtask@1.2.3: {} + rambda@9.4.2: {} + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -5771,7 +6938,9 @@ snapshots: react-is@17.0.2: {} - react-refresh@0.17.0: {} + react-is@18.3.1: {} + + react-refresh@0.18.0: {} react-window@1.8.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -5806,8 +6975,21 @@ snapshots: require-directory@2.1.1: {} + require-from-string@2.0.2: {} + + resolve-dir@1.0.1: + dependencies: + expand-tilde: 2.0.2 + global-modules: 1.0.0 + resolve-from@4.0.0: {} + resolve@1.22.8: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + resolve@2.0.0-next.5: dependencies: is-core-module: 2.16.1 @@ -5816,6 +6998,8 @@ snapshots: reusify@1.1.0: {} + rfdc@1.4.1: {} + rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -5875,6 +7059,8 @@ snapshots: has-symbols: 1.1.0 isarray: 2.0.5 + safe-buffer@5.2.1: {} + safe-push-apply@1.0.0: dependencies: es-errors: 1.3.0 @@ -5892,8 +7078,17 @@ snapshots: dependencies: loose-envify: 1.4.0 + schema-utils@4.3.3: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + semver@6.3.1: {} + semver@7.6.3: {} + semver@7.7.3: {} set-function-length@1.2.2: @@ -5918,6 +7113,8 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 + setprototypeof@1.2.0: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -5956,15 +7153,29 @@ snapshots: slash@3.0.0: {} + sorted-array-functions@1.3.0: {} + source-map-js@1.2.1: {} state-local@1.0.7: {} + statuses@1.5.0: {} + + statuses@2.0.2: {} + stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 internal-slot: 1.1.0 + streamroller@3.1.5: + dependencies: + date-format: 4.0.14 + debug: 4.4.3 + fs-extra: 8.1.0 + transitivePeerDependencies: + - supports-color + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -6051,6 +7262,8 @@ snapshots: dependencies: is-number: 7.0.0 + toidentifier@1.0.1: {} + tree-kill@1.2.2: {} ts-api-utils@1.4.3(typescript@5.7.3): @@ -6059,12 +7272,20 @@ snapshots: tslib@2.8.1: {} + tsscmp@1.0.6: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 type-fest@0.20.2: {} + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.2 + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -6109,6 +7330,12 @@ snapshots: undici-types@6.21.0: {} + universalify@0.1.2: {} + + universalify@2.0.1: {} + + upath@2.0.1: {} + update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: browserslist: 4.28.1 @@ -6123,7 +7350,9 @@ snapshots: dependencies: react: 18.3.1 - vite@6.4.1(@types/node@22.19.7): + vary@1.1.2: {} + + vite@7.1.7(@types/node@22.19.7)(jiti@2.4.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -6134,6 +7363,7 @@ snapshots: optionalDependencies: '@types/node': 22.19.7 fsevents: 2.3.3 + jiti: 2.4.2 which-boxed-primitive@1.1.1: dependencies: @@ -6176,6 +7406,10 @@ snapshots: gopd: 1.2.0 has-tostringtag: 1.0.2 + which@1.3.1: + dependencies: + isexe: 2.0.0 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -6190,6 +7424,8 @@ snapshots: wrappy@1.0.2: {} + ws@8.18.0: {} + y18n@5.0.8: {} yallist@3.1.1: {} diff --git a/preprocessed.xml b/preprocessed.xml new file mode 100644 index 0000000..d2fef59 --- /dev/null +++ b/preprocessed.xml @@ -0,0 +1,26143 @@ + + + + + + <_AfterSdkPublishDependsOn Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true'">AfterPublish + <_AfterSdkPublishDependsOn Condition="'$(UsingMicrosoftNETSdkWeb)' != 'true'">Publish + + + + + true + + true + $(CustomAfterDirectoryBuildProps);$(MSBuildThisFileDirectory)UseArtifactsOutputPath.props + + + $(ProjectExtensionsPathForSpecifiedProject) + + + + + + true + true + true + true + true + + + + <_DirectoryBuildPropsFile Condition="'$(_DirectoryBuildPropsFile)' == ''">Directory.Build.props + <_DirectoryBuildPropsBasePath Condition="'$(_DirectoryBuildPropsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), '$(_DirectoryBuildPropsFile)')) + $([System.IO.Path]::Combine('$(_DirectoryBuildPropsBasePath)', '$(_DirectoryBuildPropsFile)')) + + + + + latest + enable + enable + true + true + All + + 0.1.0 + alpha + + Dataverse DevKit Contributors + Dataverse DevKit + Copyright © 2026 Dataverse DevKit Contributors + MIT + https://github.com/your-org/DataverseDevKit + git + + true + $(NoWarn);1591;CA1515;CA1711;CA1805;CA1724;CA5392;CA1852;CA1848;CA1873;CA1031;CA2007;CA1869;CA1849;CA1062;CA2213;CA1056;CA1707;CA1310;CA1823;CA1822;CA1812 + + + + + + + + true + $(MSBuildProjectName) + + + $(ArtifactsPath)\obj\$(ArtifactsProjectName)\ + $(ArtifactsPath)\obj\ + + + + <_ArtifactsPathSetEarly>true + + + + + + obj\ + $(BaseIntermediateOutputPath)\ + <_InitialBaseIntermediateOutputPath>$(BaseIntermediateOutputPath) + $(BaseIntermediateOutputPath) + + $([System.IO.Path]::Combine('$(MSBuildProjectDirectory)', '$(MSBuildProjectExtensionsPath)')) + $(MSBuildProjectExtensionsPath)\ + + false + true + <_InitialMSBuildProjectExtensionsPath Condition=" '$(ImportProjectExtensionProps)' == 'true' ">$(MSBuildProjectExtensionsPath) + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\mathi\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 7.0.0 + + + + + + + + + x64 + arm64 + x86 + 10.0.22621.0 + $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..')) + $(WindowsSDKBuildToolsRootFolder)\bin + $(WindowsSDKBuildToolsBinFolder)\$(WindowsSDKBuildToolsVersion) + $(WindowsSDKBuildToolsBinVersionedFolder)\$(WindowsSDKBuildToolsArchFolder) + $(WindowsSDKBuildToolsRootFolder)\schemas\$(WindowsSDKBuildToolsVersion) + $(WindowsSDKSchemasFolder)\winrt + $(WindowsSDKBuildToolsBinVersionedArchFolder)\makepri.exe + $(WindowsSDKBuildToolsArchFolder) + $(WindowsSDKBuildToolsBinVersionedArchFolder)\MakeAppx.exe + $(WindowsSDKBuildToolsArchFolder) + $(WindowsSDKBuildToolsBinVersionedArchFolder)\signtool.exe + $(WindowsSDKBuildToolsArchFolder) + $(WindowsSDKBuildToolsBinVersionedArchFolder)\Microsoft.Windows.Build.Appx.AppxPackaging.dll.manifest + $(WindowsSDKBuildToolsArchFolder) + $(WindowsSDKBuildToolsBinVersionedArchFolder)\MrmSupport.dll + $(WindowsSDKBuildToolsArchFolder) + $(WindowsSDKBuildToolsBinVersionedArchFolder)\rc.exe + $(WindowsSDKBuildToolsBinVersionedFolder)\x86; + $(WindowsSDKBuildToolsBinVersionedFolder)\x64; + + + + + + + + + + + + + + + + + + + true + + + + + + <_MrtCoreImageGlobs>**/*.png;**/*.bmp;**/*.jpg;**/*.dds;**/*.tif;**/*.tga;**/*.gif + + + + + + + + + + + + + + PerMonV2 + $(MSBuildThisFileDirectory) + + WinUI3-NET5-Projects-Dont-Use-MsAppxPackageTargets + + $(MSBuildThisFileDirectory)Microsoft.Build.Msix.props + + + + + + + Microsoft.UI.Xaml + + + + <_OriginalCustomBeforeMicrosoftCommonTargetsFromWinUIProps>$(CustomBeforeMicrosoftCommonTargets) + $(MSBuildThisFileDirectory)Microsoft.UI.Xaml.Markup.Compiler.BeforeCommon.targets + + + + + + + MSBuild:Compile + $(DefaultXamlRuntime) + + + MSBuild:Compile + $(DefaultXamlRuntime) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $([MSBuild]::NormalizeDirectory('$(MSBuildThisFileDirectory)','..')) + stable + $(PrepareForBuildDependsOn);WindowsAppSDKVerifyKitVersion + + + + + + + + false + true + + + + + + + + + + + + + $(MSBuildThisFileDirectory)..\..\lib\uap10.0\Microsoft.Graphics.Canvas.winmd + Microsoft.Graphics.Canvas.dll + + + + + + true + + false + + + + + + + $(MicrosoftMauiSdkPlatformTargets);$(MSBuildThisFileDirectory)Microsoft.Maui.Sdk.Windows.targets + + + + + + <_MauiSkipSdkAutoImport>true + + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MSBuild:Compile + $(DefaultXamlRuntime) + + + MSBuild:Compile + $(DefaultXamlRuntime) + + + MSBuild:Compile + $(DefaultXamlRuntime) + + + + + + + + + + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + 1 + + $( [System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)../../tools) ) + + $( [System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)../native/include) ) + + + + + + + + + + C:\Users\mathi\.nuget\packages\microsoft.web.webview2\1.0.3179.45 + C:\Users\mathi\.nuget\packages\microsoft.windowsappsdk\1.7.250909003 + C:\Users\mathi\.nuget\packages\grpc.tools\2.62.0 + + + + + + + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.Before.$(MSBuildThisFile) + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.After.$(MSBuildThisFile) + + + + + true + + + $(DefaultProjectConfiguration) + $(DefaultProjectPlatform) + + + WJProject + JavaScript + + + + + + + + $([MSBuild]::IsRunningFromVisualStudio()) + $([MSBuild]::GetToolsDirectory32())\..\..\..\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.props + $(MSBuildToolsPath)\NuGet.props + + + + + + true + + + + <_DirectoryPackagesPropsFile Condition="'$(_DirectoryPackagesPropsFile)' == ''">Directory.Packages.props + <_DirectoryPackagesPropsBasePath Condition="'$(_DirectoryPackagesPropsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildProjectDirectory)', '$(_DirectoryPackagesPropsFile)')) + $([MSBuild]::NormalizePath('$(_DirectoryPackagesPropsBasePath)', '$(_DirectoryPackagesPropsFile)')) + + + + true + + + + true + true + true + true + true + true + true + true + true + true + true + true + true + + + + + + + true + + + + Debug;Release + AnyCPU + Debug + AnyCPU + + + + + true + + + + Library + 512 + prompt + $(MSBuildProjectName) + $(MSBuildProjectName.Replace(" ", "_")) + true + + + + true + false + + + true + + + + + <_PlatformWithoutConfigurationInference>$(Platform) + + + x64 + + + x86 + + + ARM + + + arm64 + + + + + {CandidateAssemblyFiles} + $(AssemblySearchPaths);{HintPathFromItem} + $(AssemblySearchPaths);{TargetFrameworkDirectory} + $(AssemblySearchPaths);{RawFileName} + + + None + portable + + false + + true + true + + PackageReference + $(AssemblySearchPaths) + false + false + false + false + false + false + + false + false + false + false + true + 1.0.3 + false + true + true + + + + <_ImplicitFileBasedProgramUserSecretsId Condition="'$(FileBasedProgram)' == 'true'">$(MSBuildProjectName)-$([MSBuild]::StableStringHash($(MSBuildProjectFullPath.ToLowerInvariant()), 'Sha256')) + $(_ImplicitFileBasedProgramUserSecretsId) + + + + $(MSBuildThisFileDirectory)GenerateDeps\GenerateDeps.proj + + + + + + $(MSBuildThisFileDirectory)..\..\..\Microsoft.NETCoreSdk.BundledVersions.props + + + + + $([MSBuild]::NormalizePath('$(MSBuildThisFileDirectory)..\..\')) + $([MSBuild]::EnsureTrailingSlash('$(NetCoreRoot)'))packs + $([MSBuild]::EnsureTrailingSlash('$(MSBuildThisFileDirectory)'))PrunePackageData + <_NetFrameworkHostedCompilersVersion>5.0.0-2.25612.105 + 10.0 + 10.0 + 10.0.2 + 2.1 + 2.1.0 + 10.0.2-servicing.25612.105 + $(MSBuildThisFileDirectory)RuntimeIdentifierGraph.json + 10.0.102 + 10.0.100 + win-x64 + win-x64 + <_NETCoreSdkIsPreview>false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_KnownRuntimeIdentiferPlatforms Include="any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix;any;aot;freebsd;illumos;solaris;unix" /> + <_ExcludedKnownRuntimeIdentiferPlatforms Include="rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;rhel.6;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0;tizen.4.0.0;tizen.5.0.0" /> + + + + $(MSBuildThisFileDirectory)..\..\..\Microsoft.NETCoreSdk.BundledMSBuildInformation.props + + + + + 17.14.0 + 18.0.7 + <_MSBuildVersionMajorMinor>$([System.Version]::Parse('$(MSBuildVersion)').ToString(2)) + <_IsDisjointMSBuildVersion>$([MSBuild]::VersionLessThan('$(_MSBuildVersionMajorMinor)', '18.0')) + + + + + false + + + <__WindowsAppSdkDefaultImageIncludes>**/*.png;**/*.bmp;**/*.jpg;**/*.dds;**/*.tif;**/*.tga;**/*.gif + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <__DisableWorkloadResolverSentinelPath Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildBinPath)\DisableWorkloadResolver.sentinel + <__DisableWorkloadResolverSentinelPath Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildToolsPath32)\SdkResolvers\Microsoft.DotNet.MSBuildSdkResolver\DisableWorkloadResolver.sentinel + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + false + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + + + + + + + + + + + + + + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + false + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + + + + + + + + + + + + + + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + false + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + + + + + + + + + + + + + + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + false + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + + + + + + + + + + + + + + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + false + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + + + + + + + + + + + + + + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + false + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + + + + + + + + + + + + + + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + false + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + + + + + + + + + + + + + + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + false + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + true + + + + $([MSBuild]::MakeRelative ('$(MSBuildProjectDirectory)', '%(FullPath)')) + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $([MSBuild]::Add($(NETCoreAppMaximumVersion), 1)).0 + 17.16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_NormalizedWindowsSdkSupportedTargetPlatformVersion Include="@(WindowsSdkSupportedTargetPlatformVersion)"> + $([System.Text.RegularExpressions.Regex]::Replace(%(Identity), '^((\d+\.){3})1$', '${1}0')) + + + + + + + + + true + <_SourceLinkPropsImported>true + + + + + + $(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.Build.Tasks.Git.dll + $(MSBuildThisFileDirectory)..\tools\net\Microsoft.Build.Tasks.Git.dll + + + + + + <_MicrosoftSourceLinkCommonAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.Common.dll + <_MicrosoftSourceLinkCommonAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.Common.dll + + + + true + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1701;1702 + + $(WarningsAsErrors);NU1605 + + + $(DefineConstants); + $(DefineConstants)TRACE + + + + + + + + + + + + + + + + + + + + + + + + $(TargetsForTfmSpecificContentInPackage);_PackProjectToolValidation + + + + + + MSBuild:Compile + $(DefaultXamlRuntime) + Designer + + + MSBuild:Compile + $(DefaultXamlRuntime) + Designer + + + + + + + + + + + + + + + + + + <_WpfCommonNetFxReference Include="WindowsBase" /> + <_WpfCommonNetFxReference Include="PresentationCore" /> + <_WpfCommonNetFxReference Include="PresentationFramework" /> + <_WpfCommonNetFxReference Include="System.Xaml" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'"> + 4.0 + + <_WpfCommonNetFxReference Include="UIAutomationClient" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> + <_WpfCommonNetFxReference Include="UIAutomationClientSideProviders" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> + <_WpfCommonNetFxReference Include="UIAutomationProvider" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> + <_WpfCommonNetFxReference Include="UIAutomationTypes" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.0'" /> + <_WpfCommonNetFxReference Include="System.Windows.Controls.Ribbon" Condition="'$(_TargetFrameworkVersionValue)' != '' And '$(_TargetFrameworkVersionValue)' >= '4.5'" /> + + + <_SDKImplicitReference Include="@(_WpfCommonNetFxReference)" Condition="'$(UseWPF)' == 'true'" /> + <_SDKImplicitReference Include="System.Windows.Forms" Condition="('$(UseWindowsForms)' == 'true') " /> + <_SDKImplicitReference Include="WindowsFormsIntegration" Condition=" ('$(UseWindowsForms)' == 'true') And ('$(UseWPF)' == 'true') " /> + + + + + + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v1.0" /> + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v1.1" /> + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v2.0" /> + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v2.1" /> + <_UnsupportedNETCoreAppTargetFramework Include=".NETCoreApp,Version=v2.2" /> + + <_UnsupportedNETStandardTargetFramework Include="@(SupportedNETStandardTargetFramework)" /> + + <_UnsupportedNETFrameworkTargetFramework Include=".NETFramework,Version=v2.0" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + <_TargetFrameworkVersionValue>0.0 + <_WindowsDesktopSdkTargetFrameworkVersionFloor>3.0 + + + + + + + + net10.0-windows10.0.19041.0 + net10.0-maccatalyst + net10.0 + Exe + DataverseDevKit.Host + true + true + enable + enable + + DataverseDevKit.Host + + io.github.mathis-m.dataversedevkit.host + + 1.0 + 1 + + None + 15.0 + 10.0.17763.0 + 10.0.17763.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..\..\..')) + $([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..\..\..\src\web\apps\shell')) + $(MSBuildProjectDirectory)\wwwroot + + + + $([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..\..\plugins')) + $(MSBuildProjectDirectory)\wwwroot\plugins + $(MSBuildProjectDirectory)\scripts\copy-plugins.ps1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + <_IsExecutable Condition="'$(OutputType)' == 'Exe' or '$(OutputType)'=='WinExe'">true + + + $(_IsExecutable) + <_UsingDefaultForHasRuntimeOutput>true + + + + + 1.0.0 + $(VersionPrefix)-$(VersionSuffix) + $(VersionPrefix) + + + $(AssemblyName) + $(Authors) + $(AssemblyName) + $(AssemblyName) + + + + + Debug + AnyCPU + $(Platform) + + + + + + + true + <_PublishProfileDesignerFolder Condition="'$(AppDesignerFolder)' != ''">$(AppDesignerFolder) + <_PublishProfileDesignerFolder Condition="'$(_PublishProfileDesignerFolder)' == ''">Properties + <_PublishProfileRootFolder Condition="'$(_PublishProfileRootFolder)' == ''">$(MSBuildProjectDirectory)\$(_PublishProfileDesignerFolder)\PublishProfiles\ + $([System.IO.Path]::GetFileNameWithoutExtension($(PublishProfile))) + $(_PublishProfileRootFolder)$(PublishProfileName).pubxml + $(PublishProfileFullPath) + + false + + + + + + + + + + + + + $([MSBuild]::GetTargetFrameworkIdentifier('$(TargetFramework)')) + v$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)', 2)) + + + <_TargetFrameworkVersionWithoutV>$(TargetFrameworkVersion.TrimStart('vV')) + + + + $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) + $([MSBuild]::GetTargetPlatformVersion('$(TargetFramework)', 4)) + + <_TargetPlatformVersionUsesCsWinRT3>false + <_TargetPlatformVersionUsesCsWinRT3 Condition="'$(TargetPlatformIdentifier)' == 'Windows' and '$(TargetPlatformVersion)' != '' and $([System.Version]::Parse('$(TargetPlatformVersion)').Revision) == 1">true + $([System.Version]::Parse('$(TargetPlatformVersion)').Major).$([System.Version]::Parse('$(TargetPlatformVersion)').Minor).$([System.Version]::Parse('$(TargetPlatformVersion)').Build).0 + $([MSBuild]::GetTargetPlatformVersion('$(TargetFramework)', 2)) + + $(TargetPlatformVersion) + + Windows + + + + <_UnsupportedTargetFrameworkError>true + + + + + + + + + + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + v0.0 + + + _ + + + + + true + + + + + + + + + true + + + + + + + + + + <_EnableDefaultWindowsPlatform>false + false + + + 2.1 + + + + + + + + + + + + + + <_ApplicableTargetPlatformVersion Include="@(SdkSupportedTargetPlatformVersion)" Condition="'@(SdkSupportedTargetPlatformVersion)' != '' and '%(SdkSupportedTargetPlatformVersion.DefineConstantsOnly)' != 'true'" RemoveMetadata="DefineConstantsOnly" /> + <_ValidTargetPlatformVersion Include="@(_ApplicableTargetPlatformVersion)" Condition="'@(_ApplicableTargetPlatformVersion)' != '' and $([MSBuild]::VersionEquals(%(Identity), $(TargetPlatformVersion)))" /> + + + @(_ValidTargetPlatformVersion->Distinct()) + + + + + true + <_ValidTargetPlatformVersions Condition="'@(_ApplicableTargetPlatformVersion)' != ''">@(_ApplicableTargetPlatformVersion, '%0a') + <_ValidTargetPlatformVersions Condition="'@(_ApplicableTargetPlatformVersion)' == ''">None + + + + + + + true + true + + + + + + + + + true + false + true + <_PlatformToAppendToOutputPath Condition="'$(AppendPlatformToOutputPath)' == 'true'">$(PlatformName)\ + + + + + + + + <_DefaultArtifactsPathPropsImported>true + + + + true + true + <_ArtifactsPathLocationType>ExplicitlySpecified + + + + + $(_DirectoryBuildPropsBasePath)\artifacts + true + <_ArtifactsPathLocationType>DirectoryBuildPropsFolder + + + + $(MSBuildProjectDirectory)\artifacts + <_ArtifactsPathLocationType>ProjectFolder + + + + $(MSBuildProjectName) + bin + publish + package + + true + + + $(Configuration.ToLowerInvariant()) + + $(ArtifactsPivots)_$(TargetFramework.ToLowerInvariant()) + + $(ArtifactsPivots)_$(RuntimeIdentifier.ToLowerInvariant()) + + + + $(ArtifactsPath)\$(ArtifactsBinOutputName)\$(ArtifactsProjectName)\ + $(ArtifactsPath)\obj\$(ArtifactsProjectName)\ + $(ArtifactsPath)\$(ArtifactsPublishOutputName)\$(ArtifactsProjectName)\$(ArtifactsPivots)\ + + + + $(ArtifactsPath)\$(ArtifactsBinOutputName)\ + $(ArtifactsPath)\obj\ + $(ArtifactsPath)\$(ArtifactsPublishOutputName)\$(ArtifactsPivots)\ + + + $(BaseOutputPath)$(ArtifactsPivots)\ + $(BaseIntermediateOutputPath)$(ArtifactsPivots)\ + + $(ArtifactsPath)\$(ArtifactsPackageOutputName)\$(Configuration.ToLowerInvariant())\ + + + bin\ + $(BaseOutputPath)\ + $(BaseOutputPath)$(_PlatformToAppendToOutputPath)$(Configuration)\ + $(OutputPath)\ + + + + obj\ + $(BaseIntermediateOutputPath)\ + $(BaseIntermediateOutputPath)$(_PlatformToAppendToOutputPath)$(Configuration)\ + $(IntermediateOutputPath)\ + + + + $(OutputPath) + + + + $(DefaultItemExcludes);$(OutputPath)/** + $(DefaultItemExcludes);$(IntermediateOutputPath)/** + + + $(DefaultItemExcludes);$(ArtifactsPath)/** + + $(DefaultItemExcludes);bin/**;obj/** + + + + $(OutputPath)$(TargetFramework.ToLowerInvariant())\ + + + $(IntermediateOutputPath)$(TargetFramework.ToLowerInvariant())\ + + + + + + + + + + + true + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10.0.1 + net10.0 + 10.0 + $(MauiWorkloadVersion) + + true + + + + + + + + <_MauiImplicitPackageReference Include="Microsoft.Maui.Resizetizer" Version="$(MauiVersion)" PrivateAssets="all" Condition=" '$(UseMauiAssets)' == 'true' " /> + <_MauiImplicitPackageReference Include="Microsoft.Maui.Essentials" Version="$(MauiVersion)" Condition=" '$(UseMauiEssentials)' == 'true' "> + all + + <_MauiImplicitPackageReference Include="Microsoft.Maui.Core" Version="$(MauiVersion)" Condition=" '$(UseMauiCore)' == 'true' "> + all + + <_MauiImplicitPackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" Condition=" '$(UseMaui)' == 'true' "> + all + + <_MauiImplicitPackageReference Include="Microsoft.AspNetCore.Components.WebView.Maui" Version="$(MauiVersion)" Condition=" '$(UseMaui)' == 'true' and '$(UsingMicrosoftNETSdkRazor)' == 'true' "> + all + + + + + <_MauiImplicitPackageReference Remove="@(PackageReference)" /> + + <_MauiImplicitRequiredPackageReference Include="@(_MauiImplicitPackageReference->WithMetadataValue('IsMauiImplicitOptionalPackageReference',''))" /> + + + + <_MauiValidateRefsPrefix>Starting with .NET 8, setting + + <_MauiValidateRefsInfix> does not automatically include NuGet package references in your project. Update your project by including this item: <PackageReference Include=" + + <_MauiValidateRefsSuffix>" Version="$(MauiVersion)" />. You can skip this warning by setting <SkipValidateMauiImplicitPackageReferences>true</SkipValidateMauiImplicitPackageReferences> in your project file. + + + + + + + + + + + true + + + + + WinExe + + true + + + + <_SingleProjectRIDRequired Condition="'$(OutputType)' == 'WinExe'">true + <_SingleProjectRIDSpecified Condition="'$(RuntimeIdentifier)' != '' or '$(RuntimeIdentifiers)' != ''">true + + + <_SingleProjectHostArchitecture>$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture) + <_SingleProjectHostArchitecture>$(_SingleProjectHostArchitecture.ToLower()) + win10-$(_SingleProjectHostArchitecture) + win-$(_SingleProjectHostArchitecture) + <_MauiUsingDefaultRuntimeIdentifier>true + + + + + + MSIX + + true + + false + + true + + + + + $(AfterMicrosoftNETSdkTargets);$(MSBuildThisFileDirectory)Microsoft.Maui.Sdk.After.targets + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_RuntimePackInWorkloadVersionCurrent>10.0.2 + <_RuntimePackInWorkloadVersion9>9.0.12 + <_RuntimePackInWorkloadVersion8>8.0.23 + <_RuntimePackInWorkloadVersion7>7.0.20 + <_RuntimePackInWorkloadVersion6>6.0.36 + true + + + + + true + true + true + true + + + + <_BrowserWorkloadNotSupportedForTFM Condition="$([MSBuild]::VersionLessThan($(TargetFrameworkVersion), '6.0'))">true + <_BrowserWorkloadDisabled>$(_BrowserWorkloadNotSupportedForTFM) + <_UsingBlazorOrWasmSdk Condition="'$(UsingMicrosoftNETSdkBlazorWebAssembly)' == 'true' or '$(UsingMicrosoftNETSdkWebAssembly)' == 'true'">true + + + true + $(WasmNativeWorkload10) + $(WasmNativeWorkload9) + $(WasmNativeWorkload8) + $(WasmNativeWorkload7) + $(WasmNativeWorkload) + false + $(WasmNativeWorkloadAvailable) + + + + + + <_WasmNativeWorkloadNeeded Condition=" '$(WasmEnableSIMD)' == 'false' or '$(WasmEnableExceptionHandling)' == 'false' or '$(InvariantTimezone)' == 'true' or '$(WasmNativeStrip)' == 'false' or '$(WasmNativeDebugSymbols)' == 'true' or '$(WasmSingleFileBundle)' == 'false' or '$(EnableDiagnostics)' == 'true' or '$(WasmProfilers)' != '' or '$(RunAOTCompilation)' == 'true' or '$(WasmBuildNative)' == 'true' or '$(WasmGenerateAppBundle)' == 'true' or '$(_UsingBlazorOrWasmSdk)' != 'true' or '$(EmccInitialHeapSize)' != '' or '$(EmccMaximumHeapSize)' != '' ">true + false + true + $(WasmNativeWorkloadAvailable) + + + + <_IsAndroidLibraryMode Condition="'$(RuntimeIdentifier)' == 'android-arm64' or '$(RuntimeIdentifier)' == 'android-arm' or '$(RuntimeIdentifier)' == 'android-x64' or '$(RuntimeIdentifier)' == 'android-x86'">true + <_IsAppleMobileLibraryMode Condition="'$(RuntimeIdentifier)' == 'ios-arm64' or '$(RuntimeIdentifier)' == 'iossimulator-arm64' or '$(RuntimeIdentifier)' == 'iossimulator-x64' or '$(RuntimeIdentifier)' == 'maccatalyst-arm64' or '$(RuntimeIdentifier)' == 'maccatalyst-x64' or '$(RuntimeIdentifier)' == 'tvos-arm64'">true + <_IsiOSLibraryMode Condition="'$(RuntimeIdentifier)' == 'ios-arm64' or '$(RuntimeIdentifier)' == 'iossimulator-arm64' or '$(RuntimeIdentifier)' == 'iossimulator-x64'">true + <_IsMacCatalystLibraryMode Condition="'$(RuntimeIdentifier)' == 'maccatalyst-arm64' or '$(RuntimeIdentifier)' == 'maccatalyst-x64'">true + <_IstvOSLibraryMode Condition="'$(RuntimeIdentifier)' == 'tvos-arm64'">true + + + true + + + <_MonoWorkloadTargetsMobile>true + + + false + true + + + + $(_RuntimePackInWorkloadVersionCurrent) + + + + + true + 1.0 + + + + + + + true + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersionCurrent) + + + + + %(RuntimePackRuntimeIdentifiers);wasi-wasm + $(_MonoWorkloadRuntimePackPackageVersion) + + Microsoft.NETCore.App.Runtime.Mono.multithread.**RID** + + + $(_MonoWorkloadRuntimePackPackageVersion) + + + + + + true + + + <_NativeBuildNeeded Condition="'$(RunAOTCompilation)' == 'true'">true + WebAssembly workloads (required for AOT) are only supported for projects targeting net6.0+ + + + true + $(WasmNativeWorkload) + + + 9.0 + 10.0 + + + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_MonoWorkloadTargetsMobile>true + <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion6) + + + + $(_MonoWorkloadRuntimePackPackageVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_MonoWorkloadTargetsMobile>true + <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion7) + + + + $(_MonoWorkloadRuntimePackPackageVersion) + + Microsoft.NETCore.App.Runtime.Mono.multithread.**RID** + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_MonoWorkloadTargetsMobile>true + <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion8) + + + + + %(RuntimePackRuntimeIdentifiers);wasi-wasm + $(_MonoWorkloadRuntimePackPackageVersion) + + Microsoft.NETCore.App.Runtime.Mono.multithread.**RID** + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion9) + + + + + %(RuntimePackRuntimeIdentifiers);wasi-wasm + $(_MonoWorkloadRuntimePackPackageVersion) + + Microsoft.NETCore.App.Runtime.Mono.multithread.**RID** + + + $(_MonoWorkloadRuntimePackPackageVersion) + + + + + + + + + + + + + + + + + + + + <_ResolvedSuggestedWorkload Include="@(SuggestedWorkload)" /> + <_ResolvedSuggestedWorkload Include="@(SuggestedWorkloadFromReference)" /> + + + + + + + + + <_UsingDefaultRuntimeIdentifier>true + win7-x64 + win7-x86 + win-x64 + win-x86 + + + + true + + + + <_IsPublishing>true + + + + $(PublishSelfContained) + + + + true + + + $(NETCoreSdkPortableRuntimeIdentifier) + + + $(PublishRuntimeIdentifier) + + + <_UsingDefaultPlatformTarget>true + + + + + + + x86 + + + + + x64 + + + + + arm + + + + + arm64 + + + + + AnyCPU + + + + + + + <_SelfContainedWasSpecified Condition="'$(SelfContained)' != ''">true + + + + true + false + <_RuntimeIdentifierUsesAppHost Condition="$(RuntimeIdentifier.StartsWith('ios')) or $(RuntimeIdentifier.StartsWith('tvos')) or $(RuntimeIdentifier.StartsWith('maccatalyst')) or $(RuntimeIdentifier.StartsWith('android')) or $(RuntimeIdentifier.StartsWith('browser')) or $(RuntimeIdentifier.StartsWith('wasi')) or $(RuntimeIdentifier) == 'any'">false + <_RuntimeIdentifierUsesAppHost Condition="'$(_IsPublishing)' == 'true' and '$(PublishAot)' == 'true'">false + <_RuntimeIdentifierUsesAppHost Condition="'$(_RuntimeIdentifierUsesAppHost)' == ''">true + true + false + + + + $(NETCoreSdkRuntimeIdentifier) + win-x64 + win-x86 + win-arm + win-arm64 + + $(DefaultAppHostRuntimeIdentifier.Replace("arm64", "x64")) + + $(DefaultAppHostRuntimeIdentifier.Replace("arm64", "x64")) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + false + + + + + + + + + + + + + true + + + + + + + + true + + + + $(IntermediateOutputPath)$(RuntimeIdentifier)\ + $(OutputPath)$(RuntimeIdentifier)\ + + + + + + + + + + + + + + + + + true + true + + + + <_EolNetCoreTargetFrameworkVersions Include="1.0;1.1;2.0;2.1;2.2;3.0;3.1;5.0;6.0;7.0" /> + + + <_MinimumNonEolSupportedNetCoreTargetFramework>net8.0 + + + + + + + + + + + + + + + + + + + <_IsNETCoreOrNETStandard Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'">true + <_IsNETCoreOrNETStandard Condition="'$(TargetFrameworkIdentifier)' == '.NETStandard'">true + + + + true + true + true + + + true + + + + true + + true + + .dll + + false + + + + $(PreserveCompilationContext) + + + + publish + + $(OutputPath)$(RuntimeIdentifier)\$(PublishDirName)\ + $(OutputPath)$(PublishDirName)\ + + + + + + <_NugetFallbackFolder>$(MSBuildThisFileDirectory)..\..\..\..\NuGetFallbackFolder + <_IsNETCore1x Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and '$(_TargetFrameworkVersionWithoutV)' < '2.0' ">true + <_WorkloadLibraryPacksFolder Condition="'$(_WorkloadLibraryPacksFolder)' == ''">$([MSBuild]::EnsureTrailingSlash('$(NetCoreRoot)'))library-packs + + + $(RestoreAdditionalProjectSources);$(_NugetFallbackFolder) + $(RestoreAdditionalProjectFallbackFoldersExcludes);$(_NugetFallbackFolder) + $(RestoreAdditionalProjectFallbackFolders);$(_NugetFallbackFolder) + + + $(RestoreAdditionalProjectSources);$(_WorkloadLibraryPacksFolder) + + + + <_SDKImplicitReference Include="System" /> + <_SDKImplicitReference Include="System.Data" /> + <_SDKImplicitReference Include="System.Drawing" /> + <_SDKImplicitReference Include="System.Xml" /> + + + <_SDKImplicitReference Include="System.Core" Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '3.5' " /> + <_SDKImplicitReference Include="System.Runtime.Serialization" Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '3.5' " /> + <_SDKImplicitReference Include="System.Xml.Linq" Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '3.5' " /> + + <_SDKImplicitReference Include="System.Numerics" Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '4.0' " /> + + <_SDKImplicitReference Include="System.IO.Compression.FileSystem" Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '4.5' " /> + <_SDKImplicitReference Update="@(_SDKImplicitReference)" Pack="false" IsImplicitlyDefined="true" /> + + <_SDKImplicitReference Remove="@(Reference)" /> + + + + + + false + + + $(AssetTargetFallback);net461;net462;net47;net471;net472;net48;net481 + + + + + <_FrameworkIdentifierForImplicitDefine>$(TargetFrameworkIdentifier.Replace('.', '').ToUpperInvariant()) + <_FrameworkIdentifierForImplicitDefine Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), 5.0)) ">NET + $(_FrameworkIdentifierForImplicitDefine) + <_FrameworkIdentifierForImplicitDefine Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework'">NET + <_FrameworkVersionForImplicitDefine>$(TargetFrameworkVersion.TrimStart('vV')) + <_FrameworkVersionForImplicitDefine>$(_FrameworkVersionForImplicitDefine.Replace('.', '_')) + <_FrameworkVersionForImplicitDefine Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework'">$(_FrameworkVersionForImplicitDefine.Replace('_', '')) + $(_FrameworkIdentifierForImplicitDefine)$(_FrameworkVersionForImplicitDefine) + $(TargetFrameworkIdentifier.Replace('.', '').ToUpperInvariant()) + + + <_ImplicitDefineConstant Include="$(VersionlessImplicitFrameworkDefine)" /> + <_ImplicitDefineConstant Include="$(ImplicitFrameworkDefine)" /> + <_ImplicitDefineConstant Include="$(BackwardsCompatFrameworkDefine)" /> + + + + + + <_PlatformIdentifierForImplicitDefine>$(TargetPlatformIdentifier.ToUpperInvariant()) + <_PlatformVersionForImplicitDefine>$(EffectiveTargetPlatformVersion.Replace('.', '_')) + + + <_ImplicitDefineConstant Include="$(_PlatformIdentifierForImplicitDefine)" /> + <_ImplicitDefineConstant Include="$(_PlatformIdentifierForImplicitDefine)$(_PlatformVersionForImplicitDefine)" /> + + + + <_ImplicitDefineConstant Include="CSWINRT3_0" /> + + + + + + <_SupportedFrameworkVersions Include="@(SupportedNETCoreAppTargetFramework->'%(Identity)'->TrimStart('.NETCoreApp,Version=v'))" Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' " /> + <_SupportedFrameworkVersions Include="@(SupportedNETFrameworkTargetFramework->'%(Identity)'->TrimStart('.NETFramework,Version=v'))" Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' " /> + <_SupportedFrameworkVersions Include="@(SupportedNETStandardTargetFramework->'%(Identity)'->TrimStart('.NETStandard,Version=v'))" Condition=" '$(TargetFrameworkIdentifier)' == '.NETStandard' " /> + <_CompatibleFrameworkVersions Include="@(_SupportedFrameworkVersions)" Condition=" $([MSBuild]::VersionLessThanOrEquals(%(Identity), $(TargetFrameworkVersion))) " /> + <_FormattedCompatibleFrameworkVersions Include="@(_CompatibleFrameworkVersions)" Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' or '$(TargetFrameworkIdentifier)' == '.NETStandard' " /> + <_FormattedCompatibleFrameworkVersions Include="@(_CompatibleFrameworkVersions->'%(Identity)'->Replace('.', ''))" Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' " /> + <_ImplicitDefineConstant Include="@(_FormattedCompatibleFrameworkVersions->'$(_FrameworkIdentifierForImplicitDefine)%(Identity)_OR_GREATER'->Replace('.', '_'))" Condition=" '$(TargetFrameworkIdentifier)' != '.NETCoreApp' or $([MSBuild]::VersionGreaterThanOrEquals(%(_FormattedCompatibleFrameworkVersions.Identity), 5.0)) " /> + <_ImplicitDefineConstant Include="@(_FormattedCompatibleFrameworkVersions->'NETCOREAPP%(Identity)_OR_GREATER'->Replace('.', '_'))" Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionLessThan(%(_FormattedCompatibleFrameworkVersions.Identity), 5.0)) " /> + + + + + + + <_SupportedPlatformCompatibleVersions Include="@(SdkSupportedTargetPlatformVersion)" Condition=" %(Identity) != '' and '%(SdkSupportedTargetPlatformVersion.NormalizedSupportedTargetPlatformVersion)' == '' and $([MSBuild]::VersionLessThanOrEquals(%(Identity), $(TargetPlatformVersion))) " /> + <_SupportedPlatformCompatibleVersions Include="@(SdkSupportedTargetPlatformVersion->'%(NormalizedSupportedTargetPlatformVersion)')" Condition=" '%(SdkSupportedTargetPlatformVersion.NormalizedSupportedTargetPlatformVersion)' != '' and $([MSBuild]::VersionLessThanOrEquals('%(SdkSupportedTargetPlatformVersion.NormalizedSupportedTargetPlatformVersion)', $(TargetPlatformVersion))) " /> + <_ImplicitDefineConstant Include="@(_SupportedPlatformCompatibleVersions->Distinct()->'$(TargetPlatformIdentifier.ToUpper())%(Identity)_OR_GREATER'->Replace('.', '_'))" /> + + + + + + <_DefineConstantsWithoutTrace Include="$(DefineConstants)" /> + <_DefineConstantsWithoutTrace Remove="TRACE" /> + + + @(_DefineConstantsWithoutTrace) + + + + + + $(DefineConstants);@(_ImplicitDefineConstant) + $(FinalDefineConstants),@(_ImplicitDefineConstant->'%(Identity)=-1', ',') + + + + + false + true + + + $(AssemblyName).xml + $(IntermediateOutputPath)$(AssemblyName).xml + + + + + + true + true + true + + + + + + + true + + + + + + + + + FrameworkPackage + + + + + + Core + + + + + + FrameworkPackage + + + + + + Framework + + + + + + + $(RoslynTargetsPath) + $(MSBuildThisFileDirectory)..\..\..\Roslyn\bincore + + + $(MSBuildThisFileDirectory)..\..\..\Roslyn + $(MSBuildThisFileDirectory)..\..\..\Roslyn\Microsoft.Build.Tasks.CodeAnalysis.dll + $(RoslynCoreAssembliesPath) + $(MSBuildThisFileDirectory)..\..\..\Roslyn\binfx + $(MSBuildThisFileDirectory)..\..\..\Roslyn\binfx\Microsoft.Build.Tasks.CodeAnalysis.Sdk.dll + $(MSBuildThisFileDirectory)..\..\..\Roslyn\Microsoft.CSharp.Core.targets + $(MSBuildThisFileDirectory)..\..\..\Roslyn\Microsoft.VisualBasic.Core.targets + + + + $(MSBuildToolsPath)\Microsoft.CSharp.targets + $(MSBuildToolsPath)\Microsoft.VisualBasic.targets + $(MSBuildThisFileDirectory)..\targets\Microsoft.NET.Sdk.FSharpTargetsShim.targets + + $(MSBuildToolsPath)\Microsoft.Common.targets + + + + + + + + $(MSBuildToolsPath)\Microsoft.CSharp.CrossTargeting.targets + + + + + $(MSBuildToolsPath)\Microsoft.CSharp.CurrentVersion.targets + + + + + + + + true + + + + + + true + true + true + true + + + + + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.Before.Microsoft.CSharp.targets + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.After.Microsoft.CSharp.targets + + + + .cs + C# + Managed + true + true + true + true + true + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Properties + + + + + File + + + BrowseObject + + + + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + + + + + + + + + + + + true + + + + + + <_DebugSymbolsIntermediatePathTemporary Include="$(PdbFile)" /> + + <_DebugSymbolsIntermediatePath Include="@(_DebugSymbolsIntermediatePathTemporary->'%(RootDir)%(Directory)%(Filename).pdb')" /> + + + $(CoreCompileDependsOn);_ComputeNonExistentFileProperty;ResolveCodeAnalysisRuleSet + true + + + + + + $(NoWarn);1701;1702 + + + + $(NoWarn);2008 + + + + + + + + + $(AppConfig) + + $(IntermediateOutputPath)$(TargetName).compile.pdb + + + + false + + + + + + + true + + + + + + + + + + $(RoslynTargetsPath)\Microsoft.CSharp.Core.targets + + + + + + + <_BuildTasksDirectory>$(MSBuildThisFileDirectory) + <_BuildTasksDirectory Condition="Exists('$(RoslynTargetsPath)')">$(RoslynTargetsPath)\ + <_BuildTasksAssemblyName>Microsoft.Build.Tasks.CodeAnalysis + <_BuildTasksAssemblyName Condition="!Exists('$(_BuildTasksDirectory)$(_BuildTasksAssemblyName)') and Exists('$(_BuildTasksDirectory)Microsoft.Build.Tasks.CodeAnalysis.Sdk.dll')">Microsoft.Build.Tasks.CodeAnalysis.Sdk + + + + + + roslyn5.0 + + + + + + + + + + + + + + + + + false + + + + + + + + true + + + + + + + + <_SkipAnalyzers /> + <_ImplicitlySkipAnalyzers /> + + + + <_SkipAnalyzers>true + + + + <_ImplicitlySkipAnalyzers>true + <_SkipAnalyzers>true + run-nullable-analysis=never;$(Features) + + + + + + <_LastBuildWithSkipAnalyzers>$(IntermediateOutputPath)$(MSBuildProjectFile).BuildWithSkipAnalyzers + + + + + + + + + + + + + + <_AllDirectoriesAbove Include="@(Compile->GetPathsOfAllDirectoriesAbove())" Condition="'$(DiscoverEditorConfigFiles)' != 'false' or '$(DiscoverGlobalAnalyzerConfigFiles)' != 'false'" /> + + + + + + + + + + + + $(IntermediateOutputPath)$(MSBuildProjectName).GeneratedMSBuildEditorConfig.editorconfig + true + <_GeneratedEditorConfigHasItems Condition="'@(CompilerVisibleItemMetadata->Count())' != '0'">true + <_GeneratedEditorConfigShouldRun Condition="'$(GenerateMSBuildEditorConfigFile)' == 'true' and ('$(_GeneratedEditorConfigHasItems)' == 'true' or '@(CompilerVisibleProperty->Count())' != '0')">true + + + + + + <_GeneratedEditorConfigProperty Include="@(CompilerVisibleProperty)"> + $(%(CompilerVisibleProperty.Identity)) + + + <_GeneratedEditorConfigMetadata Include="@(%(CompilerVisibleItemMetadata.Identity))" Condition="'$(_GeneratedEditorConfigHasItems)' == 'true'"> + %(Identity) + %(CompilerVisibleItemMetadata.MetadataName) + + + + + + + + + + + true + + + + + <_MappedSourceRoot Remove="@(_MappedSourceRoot)" /> + + + + + + + + + + + + true + + + + + + + <_TopLevelSourceRoot Include="@(SourceRoot)" Condition="'%(SourceRoot.NestedRoot)' == ''"> + $([MSBuild]::ValueOrDefault('%(Identity)', '').Replace(',', ',,').Replace('=', '==')) + $([MSBuild]::ValueOrDefault('%(MappedPath)', '').Replace(',', ',,').Replace('=', '==')) + + + + + @(_TopLevelSourceRoot->'%(EscapedKey)=%(EscapedValue)', ','),$(PathMap) + + + + + + + + + + + false + + $(IntermediateOutputPath)/generated + + + + + + + + + + + + + <_MaxSupportedLangVersion Condition="('$(TargetFrameworkIdentifier)' != '.NETCoreApp' OR '$(_TargetFrameworkVersionWithoutV)' < '3.0') AND ('$(TargetFrameworkIdentifier)' != '.NETStandard' OR '$(_TargetFrameworkVersionWithoutV)' < '2.1')">7.3 + + <_MaxSupportedLangVersion Condition="(('$(TargetFrameworkIdentifier)' == '.NETCoreApp' AND '$(_TargetFrameworkVersionWithoutV)' < '5.0') OR ('$(TargetFrameworkIdentifier)' == '.NETStandard' AND '$(_TargetFrameworkVersionWithoutV)' == '2.1')) AND '$(_MaxSupportedLangVersion)' == ''">8.0 + + <_MaxSupportedLangVersion Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' AND '$(_MaxSupportedLangVersion)' == ''">$([MSBuild]::Add(9, $([MSBuild]::Subtract($(_TargetFrameworkVersionWithoutV.Split('.')[0]), 5)))).0 + + <_MaxAvailableLangVersion>14.0 + <_MaxSupportedLangVersion Condition="'$(_MaxSupportedLangVersion)' != '' AND '$(_MaxSupportedLangVersion)' > '$(_MaxAvailableLangVersion)'">$(_MaxAvailableLangVersion) + $(_MaxSupportedLangVersion) + $(_MaxSupportedLangVersion) + + + + + $(NoWarn);1701;1702 + + + + $(NoWarn);2008 + + + + $(AppConfig) + + $(IntermediateOutputPath)$(TargetName).compile.pdb + + + + + + + <_CoreCompileResourceInputs Remove="@(_CoreCompileResourceInputs)" /> + + + + + + -langversion:$(LangVersion) + $(CommandLineArgsForDesignTimeEvaluation) -checksumalgorithm:$(ChecksumAlgorithm) + $(CommandLineArgsForDesignTimeEvaluation) -define:$(DefineConstants) + $(CommandLineArgsForDesignTimeEvaluation) -features:$(Features) + $(CommandLineArgsForDesignTimeEvaluation) -doc:"$(DocumentationFile)" + + + + + + $(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed\Microsoft.CSharp.DesignTime.targets + + + + + + $(MSBuildToolsPath)\Microsoft.Common.CurrentVersion.targets + + + + + + true + true + true + true + + + + + + False + net10.0-windows10.0.19041.0 + Windows Machine + + + + Designer + + + Designer + + + Designer + + + Designer + + + Designer + + + + + + 10.0 + + + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.Before.Microsoft.Common.targets + $(MSBuildExtensionsPath)\v$(MSBuildToolsVersion)\Custom.After.Microsoft.Common.targets + $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\ReportingServices\Microsoft.ReportingServices.targets + + + + + + true + false + WinUI-Projects-Don-t-Use-SDK-Xaml-Tools + + + + false + false + + + + <_IsWinUICustomBeforeMicrosoftCommonTargetsChainValid>true + + + + + + true + + true + + + false + true + <_MicrosoftBuildMsixPropsOverriden Condition="'$(MicrosoftBuildMsixLocation)'!=''">true + <_MicrosoftBuildMsixPropsOverriden Condition="'$(_MicrosoftBuildMsixPropsOverriden)'==''">false + + + $(MSBuildThisFileDirectory)Microsoft.Build.Msix.Common.props + $(MSBuildThisFileDirectory)Microsoft.Build.Msix.Cpp.props + + + $(MicrosoftBuildMsixLocation)\Targets\Microsoft.Build.Msix.Common.props + $(MicrosoftBuildMsixLocation)\Targets\Microsoft.Build.Msix.Cpp.props + + + $(MsixPackageSupport) + $(MsixPackageSupport) + + + + + Dont-Use-MsAppxPackageTargets + + false + false + 9A19103F-16F7-4668-BE54-9A1E7A4F7556 + + + + CopyToDevice + False + False + + + + + + + + + + + + + + + + + + Managed + + + + .NETFramework + v4.0 + + + + Any CPU,x86,x64,Itanium + Any CPU,x86,x64 + + + + + + + + $(SDK40ToolsPath) + + + + true + + + false + + + + + true + + true + + + $(TargetFrameworkIdentifier),Version=$(TargetFrameworkVersion),Profile=$(TargetFrameworkProfile) + $(TargetFrameworkIdentifier),Version=$(TargetFrameworkVersion) + + $(TargetFrameworkRootPath)$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion) + + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetPathToStandardLibraries($(TargetFrameworkIdentifier), $(TargetFrameworkVersion), $(TargetFrameworkProfile), $(PlatformTarget), $(TargetFrameworkRootPath), $(TargetFrameworkFallbackSearchPaths))) + $(MSBuildFrameworkToolsPath) + + + Windows + 7.0 + $(TargetPlatformSdkRootOverride)\ + $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SDKs\Windows\v$(TargetPlatformVersion)', InstallationFolder, null, RegistryView.Registry32, RegistryView.Default)) + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformSDKLocation($(TargetPlatformIdentifier), $(TargetPlatformVersion))) + $(TargetPlatformSdkPath)Windows Metadata + $(TargetPlatformSdkPath)References\CommonConfiguration\Neutral + $(TargetPlatformSdkMetadataLocation) + true + $(WinDir)\System32\WinMetadata + $(TargetPlatformIdentifier),Version=$(TargetPlatformVersion) + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformSDKDisplayName($(TargetPlatformIdentifier), $(TargetPlatformVersion))) + + + + + <_OriginalPlatform>$(Platform) + + <_OriginalConfiguration>$(Configuration) + + <_OutputPathWasMissing Condition="'$(_OriginalPlatform)' != '' and '$(_OriginalConfiguration)' != '' and '$(OutputPath)' == ''">true + + true + + + AnyCPU + $(Platform) + Debug + $(Configuration) + bin\ + $(BaseOutputPath)\ + $(BaseOutputPath)$(Configuration)\ + $(BaseOutputPath)$(PlatformName)\$(Configuration)\ + $(OutputPath)\ + obj\ + $(BaseIntermediateOutputPath)\ + $(BaseIntermediateOutputPath)$(Configuration)\ + $(BaseIntermediateOutputPath)$(PlatformName)\$(Configuration)\ + $(IntermediateOutputPath)\ + + + + $(TargetType) + library + exe + true + + <_DebugSymbolsProduced>false + <_DebugSymbolsProduced Condition="'$(DebugSymbols)'=='true'">true + <_DebugSymbolsProduced Condition="'$(DebugType)'=='none'">false + <_DebugSymbolsProduced Condition="'$(DebugType)'=='pdbonly'">true + <_DebugSymbolsProduced Condition="'$(DebugType)'=='full'">true + <_DebugSymbolsProduced Condition="'$(DebugType)'=='portable'">true + <_DebugSymbolsProduced Condition="'$(DebugType)'=='embedded'">false + <_DebugSymbolsProduced Condition="'$(ProduceOnlyReferenceAssembly)'=='true'">false + + <_DocumentationFileProduced>true + <_DocumentationFileProduced Condition="'$(DocumentationFile)'==''">false + + false + + + + + <_InvalidConfigurationMessageSeverity Condition=" '$(SkipInvalidConfigurations)' == 'true' ">Warning + <_InvalidConfigurationMessageSeverity Condition=" '$(SkipInvalidConfigurations)' != 'true' ">Error + + + + .exe + .exe + .exe + .dll + .netmodule + .winmdobj + + + + true + $(OutputPath) + + + $(OutDir)\ + $(MSBuildProjectName) + + + $(OutDir)$(ProjectName)\ + $(MSBuildProjectName) + $(RootNamespace) + $(AssemblyName) + + $(MSBuildProjectFile) + + $(MSBuildProjectExtension) + + $(TargetName).winmd + $(WinMDExpOutputWindowsMetadataFilename) + $(TargetName)$(TargetExt) + + + + + <_DeploymentPublishableProjectDefault Condition="'$(OutputType)'=='winexe' or '$(OutputType)'=='exe' or '$(OutputType)'=='appcontainerexe'">true + $(_DeploymentPublishableProjectDefault) + <_DeploymentTargetApplicationManifestFileName Condition="'$(OutputType)'=='library'">Native.$(AssemblyName).manifest + + <_DeploymentTargetApplicationManifestFileName Condition="'$(OutputType)'=='winexe'">$(TargetFileName).manifest + + <_DeploymentTargetApplicationManifestFileName Condition="'$(OutputType)'=='exe'">$(TargetFileName).manifest + + <_DeploymentTargetApplicationManifestFileName Condition="'$(OutputType)'=='appcontainerexe'">$(TargetFileName).manifest + + $(AssemblyName).application + + $(AssemblyName).xbap + + $(GenerateManifests) + <_DeploymentApplicationManifestIdentity Condition="'$(OutputType)'=='library'">Native.$(AssemblyName) + <_DeploymentApplicationManifestIdentity Condition="'$(OutputType)'=='winexe'">$(AssemblyName).exe + <_DeploymentApplicationManifestIdentity Condition="'$(OutputType)'=='exe'">$(AssemblyName).exe + <_DeploymentApplicationManifestIdentity Condition="'$(OutputType)'=='appcontainerexe'">$(AssemblyName).exe + <_DeploymentDeployManifestIdentity Condition="'$(HostInBrowser)' != 'true'">$(AssemblyName).application + <_DeploymentDeployManifestIdentity Condition="'$(HostInBrowser)' == 'true'">$(AssemblyName).xbap + <_DeploymentFileMappingExtension Condition="'$(MapFileExtensions)'=='true'">.deploy + <_DeploymentFileMappingExtension Condition="'$(MapFileExtensions)'!='true'" /> + <_DeploymentBuiltUpdateInterval Condition="'$(UpdatePeriodically)'=='true'">$(UpdateInterval) + <_DeploymentBuiltUpdateIntervalUnits Condition="'$(UpdatePeriodically)'=='true'">$(UpdateIntervalUnits) + <_DeploymentBuiltUpdateInterval Condition="'$(UpdatePeriodically)'!='true'">0 + <_DeploymentBuiltUpdateIntervalUnits Condition="'$(UpdatePeriodically)'!='true'">Days + <_DeploymentBuiltMinimumRequiredVersion Condition="'$(UpdateRequired)'=='true' and '$(Install)'=='true'">$(MinimumRequiredVersion) + <_DeploymentLauncherBased Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'">true + 100 + + + + * + $(UICulture) + + + + <_OutputPathItem Include="$(OutDir)" /> + <_UnmanagedRegistrationCache Include="$(BaseIntermediateOutputPath)$(MSBuildProjectFile).UnmanagedRegistration.cache" /> + <_ResolveComReferenceCache Include="$(IntermediateOutputPath)$(MSBuildProjectFile).ResolveComReference.cache" /> + + + + + $([MSBuild]::Escape($([System.IO.Path]::GetFullPath(`$([System.IO.Path]::Combine(`$(MSBuildProjectDirectory)`, `$(OutDir)`))`)))) + + $(TargetDir)$(TargetFileName) + $([MSBuild]::NormalizePath($(TargetDir), 'ref', $(TargetFileName))) + $([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(IntermediateOutputPath), 'ref', $(TargetFileName))) + + $([MSBuild]::EnsureTrailingSlash($(MSBuildProjectDirectory))) + + $(ProjectDir)$(ProjectFileName) + + + + + + + + *Undefined* + *Undefined* + + *Undefined* + + *Undefined* + + *Undefined* + + *Undefined* + + + + true + + true + + + true + false + + + $(MSBuildProjectFile).FileListAbsolute.txt + + false + + true + true + <_ResolveReferenceDependencies Condition="'$(_ResolveReferenceDependencies)' == ''">false + <_GetChildProjectCopyToOutputDirectoryItems Condition="'$(_GetChildProjectCopyToOutputDirectoryItems)' == ''">true + false + false + + + <_GenerateBindingRedirectsIntermediateAppConfig>$(IntermediateOutputPath)$(TargetFileName).config + + + $(MSBuildProjectFile) + + $([MSBuild]::SubstringByAsciiChars($(MSBuildProjectFile), 0, 8)).$([MSBuild]::StableStringHash($(MSBuildProjectFile)).ToString("X8")) + $(MSBuildCopyMarkerName).Up2Date + + + + + + + + + + + + + + <_DebugSymbolsIntermediatePath Include="$(IntermediateOutputPath)$(TargetName).compile.pdb" Condition="'$(OutputType)' == 'winmdobj' and '@(_DebugSymbolsIntermediatePath)' == ''" /> + <_DebugSymbolsIntermediatePath Include="$(IntermediateOutputPath)$(TargetName).pdb" Condition="'$(OutputType)' != 'winmdobj' and '@(_DebugSymbolsIntermediatePath)' == ''" /> + <_DebugSymbolsOutputPath Include="@(_DebugSymbolsIntermediatePath->'$(OutDir)%(Filename)%(Extension)')" /> + + + $(IntermediateOutputPath)$(TargetName).pdb + <_WinMDDebugSymbolsOutputPath>$([System.IO.Path]::Combine('$(OutDir)', $([System.IO.Path]::GetFileName('$(WinMDExpOutputPdb)')))) + + + $(IntermediateOutputPath)$(TargetName).xml + <_WinMDDocFileOutputPath>$([System.IO.Path]::Combine('$(OutDir)', $([System.IO.Path]::GetFileName('$(WinMDOutputDocumentationFile)')))) + + + <_IntermediateWindowsMetadataPath>$(IntermediateOutputPath)$(WinMDExpOutputWindowsMetadataFilename) + <_WindowsMetadataOutputPath>$(OutDir)$(WinMDExpOutputWindowsMetadataFilename) + + + + <_SupportedArchitectures>amd64 arm64 + + + + <_DeploymentManifestEntryPoint Include="@(IntermediateAssembly)"> + $(TargetFileName) + + + + <_DeploymentManifestIconFile Include="$(ApplicationIcon)" Condition="Exists('$(ApplicationIcon)')"> + $(ApplicationIcon) + + + + $(_DeploymentTargetApplicationManifestFileName) + + + <_ApplicationManifestFinal Include="$(OutDir)$(_DeploymentTargetApplicationManifestFileName)"> + $(_DeploymentTargetApplicationManifestFileName) + + + + $(TargetDeployManifestFileName) + + + <_DeploymentIntermediateTrustInfoFile Include="$(IntermediateOutputPath)$(TargetName).TrustInfo.xml" Condition="'$(TargetZone)'!=''" /> + + + + <_DeploymentUrl Condition="'$(_DeploymentUrl)'==''">$(UpdateUrl) + <_DeploymentUrl Condition="'$(_DeploymentUrl)'==''">$(InstallUrl) + <_DeploymentUrl Condition="'$(_DeploymentUrl)'==''">$(PublishUrl) + <_DeploymentUrl Condition="!('$(UpdateUrl)'=='') and '$(Install)'=='false'" /> + <_DeploymentUrl Condition="'$(_DeploymentUrl)'!=''">$(_DeploymentUrl)$(TargetDeployManifestFileName) + + <_DeploymentUrl Condition="'$(UpdateUrl)'=='' and !('$(Install)'=='true' and '$(UpdateEnabled)'=='true')" /> + <_DeploymentUrl Condition="'$(ExcludeDeploymentUrl)'=='true'" /> + + + + <_DeploymentApplicationUrl Condition="'$(IsWebBootstrapper)'=='true'">$(InstallUrl) + <_DeploymentApplicationUrl Condition="'$(IsWebBootstrapper)'=='true' and '$(InstallUrl)'==''">$(PublishUrl) + <_DeploymentComponentsUrl Condition="'$(BootstrapperComponentsLocation)'=='Absolute'">$(BootstrapperComponentsUrl) + + + + $(PublishDir)\ + $([MSBuild]::EnsureTrailingSlash('$(OutputPath)'))app.publish\ + + + + $(PublishDir) + $(ClickOncePublishDir)\ + + + + + $(PlatformTarget) + + msil + amd64 + ia64 + x86 + arm + + + true + + + + $(Platform) + msil + amd64 + ia64 + x86 + arm + + None + $(PROCESSOR_ARCHITECTURE) + + + + CLR2 + CLR4 + CurrentRuntime + true + false + $(PlatformTarget) + x86 + x64 + CurrentArchitecture + + + + Client + + + + false + + + + + true + true + false + + + + AssemblyFoldersEx + Software\Microsoft\$(TargetFrameworkIdentifier) + Software\Microsoft\Microsoft SDKs\$(TargetPlatformIdentifier) + $([MSBuild]::GetToolsDirectory32())\AssemblyFolders.config + {AssemblyFoldersFromConfig:$(AssemblyFoldersConfigFile),$(TargetFrameworkVersion)}; + + + .winmd; + .dll; + .exe + + + + .pdb; + .xml; + .pri; + .dll.config; + .exe.config + + + Full + + + + {CandidateAssemblyFiles} + $(AssemblySearchPaths);$(ReferencePath) + $(AssemblySearchPaths);{HintPathFromItem} + $(AssemblySearchPaths);{TargetFrameworkDirectory} + $(AssemblySearchPaths);$(AssemblyFoldersConfigFileSearchPath) + $(AssemblySearchPaths);{Registry:$(FrameworkRegistryBase),$(TargetFrameworkVersion),$(AssemblyFoldersSuffix)$(AssemblyFoldersExConditions)} + $(AssemblySearchPaths);{AssemblyFolders} + $(AssemblySearchPaths);{GAC} + $(AssemblySearchPaths);{RawFileName} + $(AssemblySearchPaths);$(OutDir) + + + + false + + + + $(NoWarn) + $(WarningsAsErrors) + $(WarningsNotAsErrors) + + + + $(MSBuildThisFileDirectory)$(LangName)\ + + + + $(MSBuildThisFileDirectory)en-US\ + + + + + Project + + + BrowseObject + + + File + + + Invisible + + + File;BrowseObject + + + File;ProjectSubscriptionService + + + + $(DefineCommonItemSchemas) + + + + + ;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + ;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + ;BrowseObject + + + ProjectSubscriptionService;BrowseObject + + + + + + + + + Never + + + Never + + + Never + + + Never + + + + + + true + + + + + <_GlobalPropertiesToRemoveFromProjectReferences Condition="'$(PassOutputPathToReferencedProjects)'=='false'">$(_GlobalPropertiesToRemoveFromProjectReferences);OutputPath + + + + + + <_InvalidConfigurationMessageResourceName Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">CommonSdk.InvalidConfigurationTextWhenBuildingInsideVisualStudio + <_InvalidConfigurationMessageResourceName Condition=" '$(BuildingInsideVisualStudio)' != 'true' ">CommonSdk.InvalidConfigurationTextWhenBuildingOutsideVisualStudio + + + + + + + + + + + x86 + + + + + + + + + + + + + BeforeBuild; + CoreBuild; + AfterBuild + + + + + + + + + + + BuildOnlySettings; + PrepareForBuild; + PreBuildEvent; + ResolveReferences; + PrepareResources; + ResolveKeySource; + Compile; + ExportWindowsMDFile; + UnmanagedUnregistration; + GenerateSerializationAssemblies; + CreateSatelliteAssemblies; + GenerateManifests; + GetTargetPath; + PrepareForRun; + UnmanagedRegistration; + IncrementalClean; + PostBuildEvent + + + + + + + + + <_ProjectDefaultTargets Condition="'$(MSBuildProjectDefaultTargets)' != ''">$(MSBuildProjectDefaultTargets) + <_ProjectDefaultTargets Condition="'$(MSBuildProjectDefaultTargets)' == ''">Build + + BeforeRebuild; + Clean; + $(_ProjectDefaultTargets); + AfterRebuild; + + + BeforeRebuild; + Clean; + Build; + AfterRebuild; + + + + + + + + + + Build + + + + + + + + + + + Build + + + + + + + + + + + Build + + + + + + + + + + + + + + + + + + + + + + + false + + + + true + + + + + + $(PrepareForBuildDependsOn);GetFrameworkPaths;GetReferenceAssemblyPaths;AssignLinkMetadata + + + + + $(TargetFileName).config + + + + + + + + + + + + + @(_TargetFramework40DirectoryItem) + @(_TargetFramework35DirectoryItem) + @(_TargetFramework30DirectoryItem) + @(_TargetFramework20DirectoryItem) + + @(_TargetFramework20DirectoryItem) + @(_TargetFramework40DirectoryItem) + @(_TargetedFrameworkDirectoryItem) + @(_TargetFrameworkSDKDirectoryItem) + + + + + + + + + + + + + + + + + + $(_TargetFrameworkDirectories);$(TargetFrameworkDirectory);$(WinFXAssemblyDirectory) + $(TargetFrameworkDirectory);$(TargetPlatformWinMDLocation) + + + + true + + + $(AssemblySearchPaths.Replace('{AssemblyFolders}', '').Split(';')) + + + + + + + $(TargetFrameworkDirectory);@(DesignTimeFacadeDirectories) + + + + + + + + + + + + + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + + + + + + + + + + + + + + $(PlatformTargetAsMSBuildArchitecture) + + + + $(TargetFrameworkAsMSBuildRuntime) + + CurrentRuntime + + + + + + + + + + BeforeResolveReferences; + AssignProjectConfiguration; + ResolveProjectReferences; + FindInvalidProjectReferences; + ResolveNativeReferences; + ResolveAssemblyReferences; + GenerateBindingRedirects; + GenerateBindingRedirectsUpdateAppConfig; + ResolveComReferences; + AfterResolveReferences + + + + + + + + + + + + false + + + + + + + true + true + false + + false + + true + + + + + + + + + + + <_ProjectReferenceWithConfiguration> + true + true + + + true + true + + + + + + + + + + + + + <_MSBuildProjectReference Include="@(ProjectReferenceWithConfiguration)" Condition="'$(BuildingInsideVisualStudio)'!='true' and '@(ProjectReferenceWithConfiguration)'!=''" /> + + + + <_MSBuildProjectReferenceExistent Include="@(_MSBuildProjectReference)" Condition="Exists('%(Identity)')" /> + <_MSBuildProjectReferenceNonexistent Include="@(_MSBuildProjectReference)" Condition="!Exists('%(Identity)')" /> + + + + + true + + + + + + <_MSBuildProjectReferenceExistent Condition="'%(_MSBuildProjectReferenceExistent.SetPlatform)' != ''"> + true + + + + <_ProjectReferencePlatformPossibilities Include="@(_MSBuildProjectReferenceExistent)" Condition="'%(_MSBuildProjectReferenceExistent.SkipGetPlatformProperties)' != 'true'" /> + + + + + <_ProjectReferencePlatformPossibilities Condition="'$(MSBuildProjectExtension)' != '.vcxproj' and '$(MSBuildProjectExtension)' != '.nativeproj' and '%(_ProjectReferencePlatformPossibilities.IsVcxOrNativeProj)' == 'true'"> + + x86=Win32 + + + <_ProjectReferencePlatformPossibilities Condition="('$(MSBuildProjectExtension)' == '.vcxproj' or '$(MSBuildProjectExtension)' == '.nativeproj') and '%(_ProjectReferencePlatformPossibilities.IsVcxOrNativeProj)' != 'true'"> + Win32=x86 + + + + + + + + + + Platform=%(ProjectsWithNearestPlatform.NearestPlatform) + + + + %(ProjectsWithNearestPlatform.UndefineProperties);Platform + + <_MSBuildProjectReferenceExistent Remove="@(_MSBuildProjectReferenceExistent)" Condition="'%(_MSBuildProjectReferenceExistent.SkipGetPlatformProperties)' != 'true'" /> + <_MSBuildProjectReferenceExistent Include="@(ProjectsWithNearestPlatform)" /> + + + + + + + $(NuGetTargetMoniker) + $(TargetFrameworkMoniker) + + + + <_MSBuildProjectReferenceExistent Condition="'%(_MSBuildProjectReferenceExistent.SkipGetTargetFrameworkProperties)' == '' and ('%(Extension)' == '.vcxproj' or '%(Extension)' == '.nativeproj')"> + + true + %(_MSBuildProjectReferenceExistent.UndefineProperties);TargetFramework + + + + + <_MSBuildProjectReferenceExistent Condition="'%(_MSBuildProjectReferenceExistent.SetTargetFramework)' != ''"> + + true + + + + + + + + + + + + + <_ProjectReferenceTargetFrameworkPossibilitiesOriginalItemSpec Include="@(_ProjectReferenceTargetFrameworkPossibilities->'%(OriginalItemSpec)')" /> + <_ProjectReferenceTargetFrameworkPossibilities Remove="@(_ProjectReferenceTargetFrameworkPossibilities)" /> + <_ProjectReferenceTargetFrameworkPossibilities Include="@(_ProjectReferenceTargetFrameworkPossibilitiesOriginalItemSpec)" /> + + + + + + + + + + + + + + + + + + + + + + + + TargetFramework=%(AnnotatedProjects.NearestTargetFramework) + + + + %(AnnotatedProjects.UndefineProperties);TargetFramework + + + + %(AnnotatedProjects.UndefineProperties);RuntimeIdentifier;SelfContained + + + <_MSBuildProjectReferenceExistent Remove="@(_MSBuildProjectReferenceExistent)" Condition="'%(_MSBuildProjectReferenceExistent.SkipGetTargetFrameworkProperties)' != 'true'" /> + <_MSBuildProjectReferenceExistent Include="@(AnnotatedProjects)" /> + + + + + + + + + <_ThisProjectBuildMetadata Include="$(MSBuildProjectFullPath)"> + @(_TargetFrameworkInfo) + @(_TargetFrameworkInfo->'%(TargetFrameworkMonikers)') + @(_TargetFrameworkInfo->'%(TargetPlatformMonikers)') + $(_AdditionalPropertiesFromProject) + true + @(_TargetFrameworkInfo->'%(IsRidAgnostic)') + + true + $(Platform) + $(Platforms) + + @(ProjectConfiguration->'%(Platform)'->Distinct()) + + + + + + <_AdditionalTargetFrameworkInfoPropertyWithValue Include="@(AdditionalTargetFrameworkInfoProperty)"> + $(%(AdditionalTargetFrameworkInfoProperty.Identity)) + + + + <_UseAttributeForTargetFrameworkInfoPropertyNames Condition="'$(_UseAttributeForTargetFrameworkInfoPropertyNames)' == ''">false + + + + + + <_TargetFrameworkInfo Include="$(TargetFramework)"> + $(TargetFramework) + $(TargetFrameworkMoniker) + $(TargetPlatformMoniker) + None + $(_AdditionalTargetFrameworkInfoProperties) + + $(IsRidAgnostic) + true + false + + + + + + + + + AssignProjectConfiguration; + _SplitProjectReferencesByFileExistence; + _GetProjectReferenceTargetFrameworkProperties; + _GetProjectReferencePlatformProperties + + + + + + + + + $(ProjectReferenceBuildTargets) + + + ProjectReference + + + + + + + + + + + + + + + + + + + <_ResolvedProjectReferencePaths Remove="@(_ResolvedProjectReferencePaths)" Condition="'%(_ResolvedProjectReferencePaths.ResolveableAssembly)' == 'false'" /> + + <_ResolvedProjectReferencePaths> + %(_ResolvedProjectReferencePaths.OriginalItemSpec) + + + + + <_NonExistentProjectReferenceSeverity Condition="'@(ProjectReferenceWithConfiguration)' != '' and '@(_MSBuildProjectReferenceNonexistent)' != '' and '$(ErrorOnMissingProjectReference)' != 'True'">Warning + <_NonExistentProjectReferenceSeverity Condition="'@(ProjectReferenceWithConfiguration)' != '' and '@(_MSBuildProjectReferenceNonexistent)' != '' and '$(ErrorOnMissingProjectReference)' == 'True'">Error + + + + + + + <_ProjectReferencesFromRAR Include="@(ReferencePath->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))"> + %(ReferencePath.ProjectReferenceOriginalItemSpec) + + + + + + + + + $(GetTargetPathDependsOn) + + + + + + $(TargetPlatformMoniker) + $(TargetPlatformIdentifier) + $(TargetFrameworkIdentifier) + $(TargetFrameworkVersion.TrimStart('vV')) + $(TargetRefPath) + @(CopyUpToDateMarker) + + + + + + + + %(_ApplicationManifestFinal.FullPath) + + + + + + + + + + + + + + + + + + ResolveProjectReferences; + FindInvalidProjectReferences; + GetFrameworkPaths; + GetReferenceAssemblyPaths; + PrepareForBuild; + ResolveSDKReferences; + ExpandSDKReferences; + + + + + <_ReferenceInstalledAssemblyDirectory Include="$(TargetFrameworkDirectory)" /> + <_ReferenceInstalledAssemblySubsets Include="$(TargetFrameworkSubset)" /> + + + + $(IntermediateOutputPath)$(MSBuildProjectFile).AssemblyReference.cache + + + false + + + + <_ResolveAssemblyReferencesApplicationConfigFileForExes Include="@(AppConfigWithTargetPath)" Condition="'$(AutoGenerateBindingRedirects)'=='true' or '$(AutoUnifyAssemblyReferences)'=='false'" /> + + + + <_FindDependencies Condition="'$(BuildingProject)' != 'true' and '$(_ResolveReferenceDependencies)' != 'true'">false + true + false + Warning + $(BuildingProject) + $(BuildingProject) + $(BuildingProject) + false + + + + + + true + + + + + + + + false + + + + false + true + + + + + + + + + + + + + + + + + + + + + + + %(FullPath) + + + %(ReferencePath.Identity) + + + + + + + + + + + + + + + <_NewGenerateBindingRedirectsIntermediateAppConfig Condition="Exists('$(_GenerateBindingRedirectsIntermediateAppConfig)')">true + $(_GenerateBindingRedirectsIntermediateAppConfig) + + + + + $(TargetFileName).config + + + + + + Software\Microsoft\Microsoft SDKs + $(LocalAppData)\Microsoft SDKs;$(MSBuildProgramFiles32)\Microsoft SDKs + + $(MSBuildProgramFiles32)\Microsoft SDKs\Windows Kits\10;$(WindowsKitsRoot) + + true + Windows + 8.1 + + false + WindowsPhoneApp + 8.1 + + + + + + + + + + + + + + + + + GetInstalledSDKLocations + + + + Debug + Retail + Retail + $(ProcessorArchitecture) + Neutral + + + true + + + + + + + + + + + + + + + + GetReferenceTargetPlatformMonikers + + + + + + + + <_ResolvedProjectReferencePaths Remove="@(InvalidProjectReferences)" /> + + + + + + + + + + + + + + ResolveSDKReferences + + + .winmd; + .dll + + + + + + + + + + + + + + + + false + false + false + $(TargetFrameworkSDKToolsDirectory) + true + + + + + + + + + + + + + + + <_ReferencesFromRAR Include="@(ReferencePath->WithMetadataValue('ReferenceSourceTarget', 'ResolveAssemblyReference'))" /> + + + + + {CandidateAssemblyFiles}; + $(ReferencePath); + {HintPathFromItem}; + {TargetFrameworkDirectory}; + {Registry:$(FrameworkRegistryBase),$(TargetFrameworkVersion),$(AssemblyFoldersSuffix)$(AssemblyFoldersExConditions)}; + {RawFileName}; + $(TargetDir) + + + + + + GetFrameworkPaths; + GetReferenceAssemblyPaths; + ResolveReferences + + + + + <_DesignTimeReferenceInstalledAssemblyDirectory Include="$(TargetFrameworkDirectory)" /> + + + $(IntermediateOutputPath)$(MSBuildProjectFile)DesignTimeResolveAssemblyReferences.cache + + + + {CandidateAssemblyFiles}; + $(ReferencePath); + {HintPathFromItem}; + {TargetFrameworkDirectory}; + {Registry:$(FrameworkRegistryBase),$(TargetFrameworkVersion),$(AssemblyFoldersSuffix)$(AssemblyFoldersExConditions)}; + {RawFileName}; + $(OutDir) + + + + false + false + false + false + false + true + false + + + <_DesignTimeReferenceAssemblies Include="$(DesignTimeReference)" /> + + + <_RARResolvedReferencePath Include="@(ReferencePath)" /> + + + + + + + + + + false + + + + $(IntermediateOutputPath) + + + + + $(PlatformTargetAsMSBuildArchitecture) + $(TargetFrameworkSDKToolsDirectory) + false + + + + + + + + + + + + + + + + + + + + + + + + + + + $(PrepareResourcesDependsOn); + PrepareResourceNames; + ResGen; + CompileLicxFiles + + + + + + + AssignTargetPaths; + SplitResourcesByCulture; + CreateManifestResourceNames; + CreateCustomManifestResourceNames + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + + + + + + + + + + + + + + + + + + false + false + + + + + + + <_LicxFile Include="@(EmbeddedResource)" Condition="'%(Extension)'=='.licx'" /> + + + Resx + + + Non-Resx + + + + + + + + + + + + + + + + Resx + + + Non-Resx + + + + + + + + + + + + <_MixedResourceWithNoCulture Remove="@(_MixedResourceWithNoCulture)" /> + <_MixedResourceWithCulture Remove="@(_MixedResourceWithCulture)" /> + + + + + + + + + + ResolveAssemblyReferences;SplitResourcesByCulture;BeforeResGen;CoreResGen;AfterResGen + FindReferenceAssembliesForReferences + true + false + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + $(PlatformTargetAsMSBuildArchitecture) + $(TargetFrameworkSDKToolsDirectory) + + + + $(TargetFrameworkAsMSBuildRuntime) + + CurrentRuntime + + + + + + + + + + + + + + + + + + + + <_Temporary Remove="@(_Temporary)" /> + + + true + + + true + + + + true + + + true + + + + + + + + + + $(PlatformTargetAsMSBuildArchitecture) + + + + + + + + + + + + + + + + + + + + ResolveReferences; + ResolveKeySource; + SetWin32ManifestProperties; + _SetPreferNativeArm64Win32ManifestProperties; + FindReferenceAssembliesForReferences; + _GenerateCompileInputs; + BeforeCompile; + _TimeStampBeforeCompile; + _GenerateCompileDependencyCache; + CoreCompile; + _TimeStampAfterCompile; + AfterCompile; + + + + + + + + + + <_CoreCompileResourceInputs Include="@(EmbeddedResource->'%(OutputResource)')" Condition="'%(EmbeddedResource.WithCulture)' == 'false' and '%(EmbeddedResource.Type)' == 'Resx'" /> + <_CoreCompileResourceInputs Include="@(EmbeddedResource)" Condition="'%(EmbeddedResource.WithCulture)' == 'false' and '%(EmbeddedResource.Type)' == 'Non-Resx' " /> + + <_CoreCompileResourceInputs Include="@(ManifestResourceWithNoCulture)" Condition="'%(ManifestResourceWithNoCulture.EmittedForCompatibilityOnly)'==''"> + Resx + false + + <_CoreCompileResourceInputs Include="@(ManifestNonResxWithNoCultureOnDisk)" Condition="'%(ManifestNonResxWithNoCultureOnDisk.EmittedForCompatibilityOnly)'==''"> + Non-Resx + false + + + + + + + true + $([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)')) + + + true + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + <_AssemblyTimestampBeforeCompile>%(IntermediateAssembly.ModifiedTime) + + + + + + $(IntermediateOutputPath)$(MSBuildProjectFile).SuggestedBindingRedirects.cache + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_AssemblyTimestampAfterCompile>%(IntermediateAssembly.ModifiedTime) + + + + + + __NonExistentSubDir__\__NonExistentFile__ + + + + + <_SGenDllName>$(TargetName).XmlSerializers.dll + <_SGenDllCreated>false + <_SGenGenerateSerializationAssembliesConfig>$(GenerateSerializationAssemblies) + <_SGenGenerateSerializationAssembliesConfig Condition="'$(GenerateSerializationAssemblies)' == ''">Auto + <_SGenGenerateSerializationAssembliesConfig Condition="'$(ConfigurationName)'=='Debug' and '$(_SGenGenerateSerializationAssembliesConfig)' == 'Auto'">Off + true + false + true + + + + + $(PlatformTargetAsMSBuildArchitecture) + + + + + + + + + + $(CreateSatelliteAssembliesDependsOn); + _GenerateSatelliteAssemblyInputs; + ComputeIntermediateSatelliteAssemblies; + GenerateSatelliteAssemblies + + + + + + + + + + <_SatelliteAssemblyResourceInputs Include="@(EmbeddedResource->'%(OutputResource)')" Condition="'%(EmbeddedResource.WithCulture)' == 'true' and '%(EmbeddedResource.Type)' == 'Resx'" /> + <_SatelliteAssemblyResourceInputs Include="@(EmbeddedResource)" Condition="'%(EmbeddedResource.WithCulture)' == 'true' and '%(EmbeddedResource.Type)' == 'Non-Resx'" /> + + <_SatelliteAssemblyResourceInputs Include="@(ManifestResourceWithCulture)" Condition="'%(ManifestResourceWithCulture.EmittedForCompatibilityOnly)'==''"> + Resx + true + + <_SatelliteAssemblyResourceInputs Include="@(ManifestNonResxWithCultureOnDisk)" Condition="'%(ManifestNonResxWithCultureOnDisk.EmittedForCompatibilityOnly)'==''"> + Non-Resx + true + + + + + + + <_ALExeToolPath Condition="'$(_ALExeToolPath)' == ''">$(TargetFrameworkSDKToolsDirectory) + + + + + + + + + + CreateManifestResourceNames + + + + + + %(EmbeddedResource.Culture) + %(EmbeddedResource.Culture)\$(TargetName).resources.dll + + + + + + $(Win32Manifest) + + + + + + + <_DeploymentBaseManifest>$(ApplicationManifest) + <_DeploymentBaseManifest Condition="'$(_DeploymentBaseManifest)'==''">@(_DeploymentBaseManifestWithTargetPath) + + true + + + + + $(ApplicationManifest) + $(ApplicationManifest) + + + + + + + $(_FrameworkVersion40Path)\default.win32manifest + + + + + + + + + $(_Win32Manifest) + + + + + + + SetWin32ManifestProperties; + GenerateApplicationManifest; + GenerateDeploymentManifest + + + + + + <_DeploymentPublishFileOfTypeManifestEntryPoint Include="@(PublishFile)" Condition="'%(FileType)'=='ManifestEntryPoint'" /> + + + + + + + + + + + + + + + + + <_DeploymentCopyApplicationManifest>true + + + + + + <_DeploymentManifestTargetFrameworkMoniker>$(TargetFrameworkMoniker) + <_DeploymentManifestTargetFrameworkVersion>$(TargetFrameworkVersion) + + + + + + + + + + + + + + + + + + + <_DeploymentManifestTargetFrameworkVersion Condition="'$(DeploymentManifestTargetFrameworkVersionOverride)' == ''">v4.5 + <_DeploymentManifestTargetFrameworkVersion Condition="'$(DeploymentManifestTargetFrameworkVersionOverride)' != ''">$(DeploymentManifestTargetFrameworkVersionOverride) + <_DeploymentManifestTargetFrameworkMoniker>.NETFramework,Version=$(_DeploymentManifestTargetFrameworkVersion) + + + + + + + + + + + <_DeploymentManifestEntryPoint Remove="@(_DeploymentManifestEntryPoint)" /> + <_DeploymentManifestEntryPoint Include="@(_DeploymentManifestLauncherEntryPoint)" /> + + + + + + + + + + <_DeploymentManifestType>Native + + + + + + + <_DeploymentManifestVersion>@(_IntermediateAssemblyIdentity->'%(Version)') + + + + + + + <_SGenDllsRelatedToCurrentDll Include="@(_ReferenceSerializationAssemblyPaths->'%(FullPath)')" Condition="'%(Extension)' == '.dll'" /> + <_SGenDllsRelatedToCurrentDll Include="@(SerializationAssembly->'%(FullPath)')" Condition="'%(Extension)' == '.dll'" /> + + + <_CopyLocalFalseRefPaths Include="@(ReferencePath)" Condition="'%(CopyLocal)' == 'false'" /> + <_CopyLocalFalseRefPathsWithExclusion Include="@(_CopyLocalFalseRefPaths)" Exclude="@(ReferenceCopyLocalPaths);@(_NETStandardLibraryNETFrameworkLib)" /> + + + <_ClickOnceSatelliteAssemblies Include="@(IntermediateSatelliteAssembliesWithTargetPath);@(ReferenceSatellitePaths)" /> + + + + <_DeploymentReferencePaths Include="@(ReferenceCopyLocalPaths)" Condition="('%(Extension)' == '.dll' Or '%(Extension)' == '.exe' Or '%(Extension)' == '.md') and ('%(ReferenceCopyLocalPaths.CopyToPublishDirectory)' != 'false')"> + true + + <_DeploymentReferencePaths Include="@(_CopyLocalFalseRefPathsWithExclusion)" /> + + + + <_ManifestManagedReferences Include="@(_DeploymentReferencePaths);@(ReferenceDependencyPaths);@(_SGenDllsRelatedToCurrentDll);@(SerializationAssembly);@(ReferenceCOMWrappersToCopyLocal)" Exclude="@(_ClickOnceSatelliteAssemblies);@(_ReferenceScatterPaths);@(_ExcludedAssembliesFromManifestGeneration)" /> + + + + + <_ClickOnceRuntimeCopyLocalItems Include="@(RuntimeTargetsCopyLocalItems)" Condition="'%(RuntimeTargetsCopyLocalItems.CopyLocal)' == 'true'" /> + <_ClickOnceRuntimeCopyLocalItems Include="@(NativeCopyLocalItems)" Condition="'%(NativeCopyLocalItems.CopyLocal)' == 'true'" /> + <_ClickOnceRuntimeCopyLocalItems Remove="@(_DeploymentReferencePaths)" /> + + <_ClickOnceTransitiveContentItemsTemp Include="@(_TransitiveItemsToCopyToOutputDirectory->WithoutMetadataValue('CopyToPublishDirectory', 'Never')->'%(TargetPath)')" Condition="'$(PublishProtocol)' == 'ClickOnce'"> + %(Identity) + + <_ClickOnceTransitiveContentItems Include="@(_ClickOnceTransitiveContentItemsTemp->'%(SavedIdentity)')" Condition="'%(Identity)'=='@(PublishFile)' Or '%(Extension)'=='.exe' Or '%(Extension)'=='.dll'" /> + + <_ClickOnceContentItems Include="@(ContentWithTargetPath->WithoutMetadataValue('CopyToPublishDirectory', 'Never'))" /> + <_ClickOnceContentItems Include="@(_ClickOnceTransitiveContentItems)" /> + + + <_ClickOnceNoneItemsTemp Include="@(_NoneWithTargetPath->WithoutMetadataValue('CopyToPublishDirectory', 'Never')->'%(TargetPath)')" Condition="'$(PublishProtocol)'=='Clickonce' And ('%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' or '%(_NoneWithTargetPath.CopyToOutputDirectory)'=='IfDifferent')"> + %(Identity) + + <_ClickOnceNoneItems Include="@(_ClickOnceNoneItemsTemp->'%(SavedIdentity)')" Condition="'%(Identity)'=='@(PublishFile)' Or '%(Extension)'=='.exe' Or '%(Extension)'=='.dll'" /> + <_ClickOnceFiles Include="@(_ClickOnceContentItems);@(_DeploymentManifestIconFile);@(AppConfigWithTargetPath);@(NetCoreRuntimeJsonFilesForClickOnce);@(_ClickOnceRuntimeCopyLocalItems);@(_ClickOnceNoneItems)" /> + + <_ClickOnceNoneItemsTemp Remove="@(_ClickOnceNoneItemsTemp)" /> + <_ClickOnceNoneItems Remove="@(_ClickOnceNoneItems)" /> + <_ClickOnceTransitiveContentItemsTemp Remove="@(_ClickOnceTransitiveContentItemsTemp)" /> + <_ClickOnceTransitiveContentItems Remove="@(_ClickOnceTransitiveContentItems)" /> + <_ClickOnceContentItems Remove="@(_ClickOnceContentItems)" /> + <_ClickOnceRuntimeCopyLocalItems Remove="@(_ClickOnceRuntimeCopyLocalItems)" /> + + + + <_ClickOnceFiles Include="$(PublishedSingleFilePath);@(_DeploymentManifestIconFile)" /> + <_ClickOnceFiles Include="@(_FilesExcludedFromBundle)" /> + + <_FileAssociationIcons Include="%(FileAssociation.DefaultIcon)" /> + <_ClickOnceFiles Include="@(ContentWithTargetPath)" Condition="'%(Identity)'=='@(_FileAssociationIcons)'" /> + + + + + + <_ManifestManagedReferences Remove="@(_ReadyToRunCompileList)" /> + <_ClickOnceFiles Remove="@(_ReadyToRunCompileList)" /> + <_ClickOnceFiles Include="@(_ReadyToRunFilesToPublish)" /> + <_ClickOnceTargetFile Include="@(_ReadyToRunFilesToPublish)" Condition="'%(Filename)%(Extension)' == '$(TargetFileName)'" /> + + + + + + + + + + + + + + + + + + + <_DeploymentManifestDependencies Include="@(_DeploymentManifestDependenciesUnfiltered)" Condition="!('%(_DeploymentManifestDependenciesUnfiltered.CopyLocal)' == 'false' And '%(_DeploymentManifestDependenciesUnfiltered.DependencyType)' != 'Install')" /> + + + <_DeploymentManifestType>ClickOnce + + + + <_DeploymentPlatformTarget Condition="'$(_DeploymentLauncherBased)' != 'true'">$(PlatformTarget) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + false + + + + + CopyFilesToOutputDirectory + + + + + + + false + false + + + + + false + false + false + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + false + + + + + + + + + + + + + + + + + <_TargetsThatPrepareProjectReferences>_SplitProjectReferencesByFileExistence + + true + <_TargetsThatPrepareProjectReferences Condition=" '$(MSBuildCopyContentTransitively)' == 'true' "> + AssignProjectConfiguration; + _SplitProjectReferencesByFileExistence + + + AssignTargetPaths; + $(_TargetsThatPrepareProjectReferences); + _GetProjectReferenceTargetFrameworkProperties; + _PopulateCommonStateForGetCopyToOutputDirectoryItems + + + <_RecursiveTargetForContentCopying>GetCopyToOutputDirectoryItems + + <_RecursiveTargetForContentCopying Condition=" '$(MSBuildCopyContentTransitively)' == 'false' ">_GetCopyToOutputDirectoryItemsFromThisProject + + + + + <_GCTODIKeepDuplicates>false + <_GCTODIKeepMetadata>CopyToOutputDirectory;TargetPath + + + + + + + + + + <_CopyToOutputDirectoryTransitiveItems KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_AllChildProjectItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)'=='Always'" /> + <_CopyToOutputDirectoryTransitiveItems KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_AllChildProjectItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'" /> + <_CopyToOutputDirectoryTransitiveItems KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_AllChildProjectItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)'=='IfDifferent'" /> + + + + <_AllChildProjectItemsWithTargetPath Remove="@(_AllChildProjectItemsWithTargetPath)" /> + + + + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='Always' AND '%(ContentWithTargetPath.MSBuildSourceProjectFile)'!=''" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' AND '%(ContentWithTargetPath.MSBuildSourceProjectFile)'!=''" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='IfDifferent' AND '%(ContentWithTargetPath.MSBuildSourceProjectFile)'!=''" /> + + + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToOutputDirectory)'=='Always' AND '%(EmbeddedResource.MSBuildSourceProjectFile)'!=''" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToOutputDirectory)'=='PreserveNewest' AND '%(EmbeddedResource.MSBuildSourceProjectFile)'!=''" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToOutputDirectory)'=='IfDifferent' AND '%(EmbeddedResource.MSBuildSourceProjectFile)'!=''" /> + + + <_CompileItemsToCopy Include="@(Compile->'%(FullPath)')" Condition="('%(Compile.CopyToOutputDirectory)'=='Always' or '%(Compile.CopyToOutputDirectory)'=='PreserveNewest' or '%(Compile.CopyToOutputDirectory)'=='IfDifferent') AND '%(Compile.MSBuildSourceProjectFile)'!=''" /> + + + + + + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_CompileItemsToCopyWithTargetPath)" Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='Always'" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_CompileItemsToCopyWithTargetPath)" Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_CompileItemsToCopyWithTargetPath)" Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='IfDifferent'" /> + + + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' AND '%(_NoneWithTargetPath.MSBuildSourceProjectFile)'!=''" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' AND '%(_NoneWithTargetPath.MSBuildSourceProjectFile)'!=''" /> + <_CopyToOutputDirectoryTransitiveItems KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='IfDifferent' AND '%(_NoneWithTargetPath.MSBuildSourceProjectFile)'!=''" /> + + + + + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='Always' AND '%(ContentWithTargetPath.MSBuildSourceProjectFile)'==''" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' AND '%(ContentWithTargetPath.MSBuildSourceProjectFile)'==''" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='IfDifferent' AND '%(ContentWithTargetPath.MSBuildSourceProjectFile)'==''" /> + + + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToOutputDirectory)'=='Always' AND '%(EmbeddedResource.MSBuildSourceProjectFile)'==''" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToOutputDirectory)'=='PreserveNewest' AND '%(EmbeddedResource.MSBuildSourceProjectFile)'==''" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToOutputDirectory)'=='IfDifferent' AND '%(EmbeddedResource.MSBuildSourceProjectFile)'==''" /> + + + <_CompileItemsToCopy Include="@(Compile->'%(FullPath)')" Condition="('%(Compile.CopyToOutputDirectory)'=='Always' or '%(Compile.CopyToOutputDirectory)'=='PreserveNewest' or '%(Compile.CopyToOutputDirectory)'=='IfDifferent') AND '%(Compile.MSBuildSourceProjectFile)'==''" /> + + + + + + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_CompileItemsToCopyWithTargetPath)" Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='Always'" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_CompileItemsToCopyWithTargetPath)" Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_CompileItemsToCopyWithTargetPath)" Condition="'%(_CompileItemsToCopyWithTargetPath.CopyToOutputDirectory)'=='IfDifferent'" /> + + + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' AND '%(_NoneWithTargetPath.MSBuildSourceProjectFile)'==''" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' AND '%(_NoneWithTargetPath.MSBuildSourceProjectFile)'==''" /> + <_ThisProjectItemsToCopyToOutputDirectory KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='IfDifferent' AND '%(_NoneWithTargetPath.MSBuildSourceProjectFile)'==''" /> + + + + + + + + + + + + + <_TransitiveItemsToCopyToOutputDirectory Remove="@(_ThisProjectItemsToCopyToOutputDirectory)" MatchOnMetadata="TargetPath" MatchOnMetadataOptions="PathLike" /> + + + <_TransitiveItemsToCopyToOutputDirectoryAlways KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_TransitiveItemsToCopyToOutputDirectory->'%(FullPath)')" Condition="'%(_TransitiveItemsToCopyToOutputDirectory.CopyToOutputDirectory)'=='Always'" /> + <_TransitiveItemsToCopyToOutputDirectoryPreserveNewest KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_TransitiveItemsToCopyToOutputDirectory->'%(FullPath)')" Condition="'%(_TransitiveItemsToCopyToOutputDirectory.CopyToOutputDirectory)'=='PreserveNewest'" /> + <_TransitiveItemsToCopyToOutputDirectoryIfDifferent KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_TransitiveItemsToCopyToOutputDirectory->'%(FullPath)')" Condition="'%(_TransitiveItemsToCopyToOutputDirectory.CopyToOutputDirectory)'=='IfDifferent'" /> + <_ThisProjectItemsToCopyToOutputDirectoryAlways KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_ThisProjectItemsToCopyToOutputDirectory->'%(FullPath)')" Condition="'%(_ThisProjectItemsToCopyToOutputDirectory.CopyToOutputDirectory)'=='Always'" /> + <_ThisProjectItemsToCopyToOutputDirectoryPreserveNewest KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_ThisProjectItemsToCopyToOutputDirectory->'%(FullPath)')" Condition="'%(_ThisProjectItemsToCopyToOutputDirectory.CopyToOutputDirectory)'=='PreserveNewest'" /> + <_ThisProjectItemsToCopyToOutputDirectoryIfDifferent KeepDuplicates=" '$(_GCTODIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTODIKeepMetadata)" Include="@(_ThisProjectItemsToCopyToOutputDirectory->'%(FullPath)')" Condition="'%(_ThisProjectItemsToCopyToOutputDirectory.CopyToOutputDirectory)'=='IfDifferent'" /> + + <_SourceItemsToCopyToOutputDirectoryAlways Include="@(_TransitiveItemsToCopyToOutputDirectoryAlways);@(_ThisProjectItemsToCopyToOutputDirectoryAlways)" /> + <_SourceItemsToCopyToOutputDirectory Include="@(_TransitiveItemsToCopyToOutputDirectoryPreserveNewest);@(_ThisProjectItemsToCopyToOutputDirectoryPreserveNewest)" /> + <_SourceItemsToCopyToOutputDirectoryIfDifferent Include="@(_TransitiveItemsToCopyToOutputDirectoryIfDifferent);@(_ThisProjectItemsToCopyToOutputDirectoryIfDifferent)" /> + + + <_TransitiveItemsToCopyToOutputDirectoryAlways Remove="@(_TransitiveItemsToCopyToOutputDirectoryAlways)" /> + <_TransitiveItemsToCopyToOutputDirectoryPreserveNewest Remove="@(_TransitiveItemsToCopyToOutputDirectoryPreserveNewest)" /> + <_TransitiveItemsToCopyToOutputDirectoryIfDifferent Remove="@(_TransitiveItemsToCopyToOutputDirectoryIfDifferent)" /> + <_ThisProjectItemsToCopyToOutputDirectoryAlways Remove="@(_ThisProjectItemsToCopyToOutputDirectoryAlways)" /> + <_ThisProjectItemsToCopyToOutputDirectoryPreserveNewest Remove="@(_ThisProjectItemsToCopyToOutputDirectoryPreserveNewest)" /> + <_ThisProjectItemsToCopyToOutputDirectory Remove="@(_ThisProjectItemsToCopyToOutputDirectory)" /> + <_ThisProjectItemsToCopyToOutputDirectoryIfDifferent Remove="@(_ThisProjectItemsToCopyToOutputDirectoryIfDifferent)" /> + + + + + + + %(CopyToOutputDirectory) + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_DocumentationFileProduced Condition="!Exists('@(DocFileItem)')">false + + + + + + + <_DebugSymbolsProduced Condition="!Exists('@(_DebugSymbolsIntermediatePath)')">false + + + + + + + + + + <_SGenDllCreated Condition="Exists('$(IntermediateOutputPath)$(_SGenDllName)')">true + + + + + + + + + + + + + $(PlatformTargetAsMSBuildArchitecture) + + + + $(TargetFrameworkAsMSBuildRuntime) + + CurrentRuntime + + + + + + + + + + + + <_CleanOrphanFileWrites Include="@(_CleanPriorFileWrites)" Exclude="@(_CleanCurrentFileWrites)" /> + + + + + + + + + + + + + + + + <_CleanRemainingFileWritesAfterIncrementalClean Include="@(_CleanPriorFileWrites);@(_CleanCurrentFileWrites)" Exclude="@(_CleanOrphanFilesDeleted)" /> + + + + + + + + + + + + + + + + + + + + + <_CleanPriorFileWrites Include="@(_CleanUnfilteredPriorFileWrites)" Exclude="@(_ResolveAssemblyReferenceResolvedFilesAbsolute)" /> + + + + false + + + + + + + + + + + + + + + + + + + + + + <_CleanCurrentFileWritesWithNoReferences Include="@(_CleanCurrentFileWritesInOutput);@(_CleanCurrentFileWritesInIntermediate)" Exclude="@(_ResolveAssemblyReferenceResolvedFilesAbsolute)" /> + + + + + + + + + + + BeforeClean; + UnmanagedUnregistration; + CoreClean; + CleanReferencedProjects; + CleanPublishFolder; + AfterClean + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_CleanRemainingFileWritesAfterClean Include="@(_CleanPriorFileWrites)" Exclude="@(_CleanPriorFileWritesDeleted)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CleanPublishFolder; + $(_RecursiveTargetForContentCopying); + _DeploymentGenerateTrustInfo; + $(DeploymentComputeClickOnceManifestInfoDependsOn) + + + + + + SetGenerateManifests; + Build; + PublishOnly + + + _DeploymentUnpublishable + + + + + + + + + + + + + true + + + + + + SetGenerateManifests; + PublishBuild; + BeforePublish; + GenerateManifests; + CopyFilesToOutputDirectory; + _CopyFilesToPublishFolder; + _DeploymentGenerateBootstrapper; + ResolveKeySource; + _DeploymentSignClickOnceDeployment; + AfterPublish + + + + + + + + + + + BuildOnlySettings; + PrepareForBuild; + ResolveReferences; + PrepareResources; + ResolveKeySource; + GenerateSerializationAssemblies; + CreateSatelliteAssemblies; + + + + + + + + + + + <_DeploymentApplicationFolderName>Application Files\$(AssemblyName)_$(_DeploymentApplicationVersionFragment) + <_DeploymentApplicationDir>$(ClickOncePublishDir)$(_DeploymentApplicationFolderName)\ + + + + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(TargetPath) + $(TargetFileName) + true + + + + + + true + $(TargetPath) + $(TargetFileName) + + + + + PrepareForBuild + true + + + + <_BuiltProjectOutputGroupOutputIntermediate Include="@(BuiltProjectOutputGroupKeyOutput)" /> + + + + <_BuiltProjectOutputGroupOutputIntermediate Include="$(AppConfig)" Condition="'$(AddAppConfigToBuildOutputs)'=='true'"> + $(TargetDir)$(TargetFileName).config + $(TargetFileName).config + + $(AppConfig) + + + + <_IsolatedComReference Include="@(COMReference)" Condition=" '%(COMReference.Isolated)' == 'true' " /> + <_IsolatedComReference Include="@(COMFileReference)" Condition=" '%(COMFileReference.Isolated)' == 'true' " /> + + + + <_BuiltProjectOutputGroupOutputIntermediate Include="$(OutDir)$(_DeploymentTargetApplicationManifestFileName)" Condition="('@(NativeReference)'!='' or '@(_IsolatedComReference)'!='') And Exists('$(OutDir)$(_DeploymentTargetApplicationManifestFileName)')"> + $(_DeploymentTargetApplicationManifestFileName) + + $(OutDir)$(_DeploymentTargetApplicationManifestFileName) + + + + + + + %(_BuiltProjectOutputGroupOutputIntermediate.FullPath) + + + + + + + + + + @(_DebugSymbolsOutputPath->'%(FullPath)') + @(_DebugSymbolsIntermediatePath->'%(Filename)%(Extension)') + + + + + + + @(WinMDExpFinalOutputPdbItem->'%(FullPath)') + @(WinMDExpOutputPdbItem->'%(Filename)%(Extension)') + + + + + + + + + + @(FinalDocFile->'%(FullPath)') + true + @(DocFileItem->'%(Filename)%(Extension)') + + + + + + + @(WinMDExpFinalOutputDocItem->'%(FullPath)') + @(WinMDOutputDocumentationFileItem->'%(Filename)%(Extension)') + + + + + + $(SatelliteDllsProjectOutputGroupDependsOn);PrepareForBuild;PrepareResourceNames + + + + + %(EmbeddedResource.Culture)\$(TargetName).resources.dll + %(EmbeddedResource.Culture) + + + + + + $(TargetDir)%(SatelliteDllsProjectOutputGroupOutputIntermediate.TargetPath) + + %(SatelliteDllsProjectOutputGroupOutputIntermediate.Identity) + + + + + + PrepareForBuild;AssignTargetPaths + + + + + + + + + + + + $(MSBuildProjectFullPath) + $(ProjectFileName) + + + + + + + + PrepareForBuild;AssignTargetPaths + + + + + + + + + + + + + + @(_OutputPathItem->'%(FullPath)$(_SGenDllName)') + $(_SGenDllName) + + + + + + + + + + + + + + + + + + + ResolveSDKReferences;ExpandSDKReferences + + + + + + + + + + + + + $(CommonOutputGroupsDependsOn); + BuildOnlySettings; + PrepareForBuild; + AssignTargetPaths; + ResolveReferences + + + + + + + + $(BuiltProjectOutputGroupDependenciesDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + + + + + + $(DebugSymbolsProjectOutputGroupDependenciesDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + + + + + + + $(SatelliteDllsProjectOutputGroupDependenciesDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + + + + + + + $(DocumentationProjectOutputGroupDependenciesDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + + + + + + + $(SGenFilesOutputGroupDependenciesDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + + + + + + + $(ReferenceCopyLocalPathsOutputGroupDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + %(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension) + + + + + + + $(DesignerRuntimeImplementationProjectOutputGroupDependsOn); + $(CommonOutputGroupsDependsOn) + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeAnalysis\Microsoft.CodeAnalysis.targets + + + + + + true + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TeamTest\Microsoft.TeamTest.targets + + + + false + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\AppxPackage\Microsoft.AppXPackage.Targets + + true + + + + + + + + $([MSBuild]::IsRunningFromVisualStudio()) + $([MSBuild]::GetToolsDirectory32())\..\..\..\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets + $(MSBuildToolsPath)\NuGet.targets + + + + + + true + + NuGet.Build.Tasks.dll + + false + + true + true + + false + + WarnAndContinue + + $(BuildInParallel) + true + + <_RestoreSolutionFileUsed Condition=" '$(_RestoreSolutionFileUsed)' == '' AND '$(SolutionDir)' != '' AND $(MSBuildProjectFullPath.EndsWith('.metaproj')) == 'true' ">true + + $(MSBuildInteractive) + + true + + true + + <_CentralPackageVersionsEnabled Condition="'$(ManagePackageVersionsCentrally)' == 'true' AND '$(CentralPackageVersionsFileImported)' == 'true'">true + + + + + true + + low + + all + direct + + + + + true + false + true + false + + + + <_GenerateRestoreGraphProjectEntryInputProperties>ExcludeRestorePackageImports=true + + <_GenerateRestoreGraphProjectEntryInputProperties Condition=" '$(RestoreUseCustomAfterTargets)' == 'true' "> + $(_GenerateRestoreGraphProjectEntryInputProperties); + NuGetRestoreTargets=$(MSBuildThisFileFullPath); + RestoreUseCustomAfterTargets=$(RestoreUseCustomAfterTargets); + CustomAfterMicrosoftCommonCrossTargetingTargets=$(MSBuildThisFileFullPath); + CustomAfterMicrosoftCommonTargets=$(MSBuildThisFileFullPath); + + + <_GenerateRestoreGraphProjectEntryInputProperties Condition=" '$(_RestoreSolutionFileUsed)' == 'true' "> + $(_GenerateRestoreGraphProjectEntryInputProperties); + _RestoreSolutionFileUsed=true; + SolutionDir=$(SolutionDir); + SolutionName=$(SolutionName); + SolutionFileName=$(SolutionFileName); + SolutionPath=$(SolutionPath); + SolutionExt=$(SolutionExt); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + <_FrameworkReferenceForRestore Include="@(FrameworkReference)" Condition="'%(FrameworkReference.IsTransitiveFrameworkReference)' != 'true'" /> + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + $(ContinueOnError) + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + exclusionlist + + + + <_FilteredRestoreGraphProjectInputItemsTmp Include="@(RestoreGraphProjectInputItems)" Condition=" '%(RestoreGraphProjectInputItems.Extension)' == '.csproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.vbproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.fsproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.nuproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.proj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.msbuildproj' Or '%(RestoreGraphProjectInputItems.Extension)' == '.vcxproj' " /> + + + + <_FilteredRestoreGraphProjectInputItemsTmp Include="@(RestoreGraphProjectInputItems)" Condition=" '%(RestoreGraphProjectInputItems.Extension)' != '.metaproj' AND '%(RestoreGraphProjectInputItems.Extension)' != '.shproj' AND '%(RestoreGraphProjectInputItems.Extension)' != '.vcxitems' AND '%(RestoreGraphProjectInputItems.Extension)' != '.vdproj' AND '%(RestoreGraphProjectInputItems.Extension)' != '' " /> + + + + <_FilteredRestoreGraphProjectInputItemsTmp Include="@(RestoreGraphProjectInputItems)" /> + + + + + + + + + + + + + + + + + + + + + + + + <_GenerateRestoreGraphProjectEntryInput Include="@(FilteredRestoreGraphProjectInputItems)" Condition=" '$(RestoreRecursive)' != 'true' " /> + <_GenerateRestoreGraphProjectEntryInput Include="@(_RestoreProjectPathItems)" Condition=" '$(RestoreRecursive)' == 'true' " /> + + + + + + + + + + + + + + + + + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())" Condition=" '$(RestoreProjectStyle)' != 'Unknown' "> + RestoreSpec + $(MSBuildProjectFullPath) + + + + + + + netcoreapp1.0 + + + + + + + + + + + <_HasPackageReferenceItems Condition="'@(PackageReference)' != ''">true + + + <_HasPackageReferenceItems Condition="@(PackageReference->Count()) > 0">true + + + + + + + <_HasPackageReferenceItems /> + + + + + + true + + + + + + <_RestoreProjectFramework /> + <_TargetFrameworkToBeUsed Condition=" '$(_TargetFrameworkOverride)' == '' ">$(TargetFrameworks) + + + + + + <_RestoreTargetFrameworksOutputFiltered Include="$(_RestoreProjectFramework.Split(';'))" /> + + + + + + <_RestoreTargetFrameworkItems Include="$(TargetFrameworks.Split(';'))" /> + + + <_RestoreTargetFrameworkItems Include="$(_TargetFrameworkOverride)" /> + + + + + + $(SolutionDir) + + + + + + + + + + + + + + + + + + + + + + + <_RestoreSettingsPerFramework Include="$([System.Guid]::NewGuid())"> + $(RestoreAdditionalProjectSources) + $(RestoreAdditionalProjectFallbackFolders) + $(RestoreAdditionalProjectFallbackFoldersExcludes) + + + + + + + + $(MSBuildProjectExtensionsPath) + + + + + + + <_RestoreProjectName>$(MSBuildProjectName) + <_RestoreProjectName Condition=" '$(PackageReferenceCompatibleProjectStyle)' == 'true' AND '$(AssemblyName)' != '' ">$(AssemblyName) + <_RestoreProjectName Condition=" '$(PackageReferenceCompatibleProjectStyle)' == 'true' AND '$(PackageId)' != '' ">$(PackageId) + + + + <_RestoreProjectVersion>1.0.0 + <_RestoreProjectVersion Condition=" '$(Version)' != '' ">$(Version) + <_RestoreProjectVersion Condition=" '$(PackageVersion)' != '' ">$(PackageVersion) + + + + <_RestoreCrossTargeting>true + + + + <_RestoreSkipContentFileWrite Condition=" '$(TargetFrameworks)' == '' AND '$(TargetFramework)' == '' ">true + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> + ProjectSpec + $(_RestoreProjectVersion) + $(MSBuildProjectFullPath) + $(MSBuildProjectFullPath) + $(_RestoreProjectName) + $(_OutputSources) + $(_OutputFallbackFolders) + $(_OutputPackagesPath) + $(RestoreProjectStyle) + $(RestoreOutputAbsolutePath) + $(RuntimeIdentifiers);$(RuntimeIdentifier) + $(RuntimeSupports) + $(_RestoreCrossTargeting) + $(RestoreLegacyPackagesDirectory) + $(ValidateRuntimeIdentifierCompatibility) + $(_RestoreSkipContentFileWrite) + $(_OutputConfigFilePaths) + $(TreatWarningsAsErrors) + $(WarningsAsErrors) + $(WarningsNotAsErrors) + $(NoWarn) + $(RestorePackagesWithLockFile) + $(NuGetLockFilePath) + $(RestoreLockedMode) + <_CentralPackageVersionsEnabled>$(_CentralPackageVersionsEnabled) + $(CentralPackageFloatingVersionsEnabled) + $(CentralPackageVersionOverrideEnabled) + $(CentralPackageTransitivePinningEnabled) + $(NuGetAudit) + $(NuGetAuditLevel) + $(NuGetAuditMode) + $(SdkAnalysisLevel) + $(UsingMicrosoftNETSdk) + $(RestoreUseLegacyDependencyResolver) + + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> + ProjectSpec + $(MSBuildProjectFullPath) + $(MSBuildProjectFullPath) + $(_RestoreProjectName) + $(RestoreProjectStyle) + $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config + $(MSBuildProjectDirectory)\packages.config + $(RestorePackagesWithLockFile) + $(NuGetLockFilePath) + $(RestoreLockedMode) + $(_OutputSources) + $(SolutionDir) + $(_OutputRepositoryPath) + $(_OutputConfigFilePaths) + $(_OutputPackagesPath) + @(_RestoreTargetFrameworksOutputFiltered) + $(NuGetAudit) + $(NuGetAuditLevel) + + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> + ProjectSpec + $(MSBuildProjectFullPath) + $(MSBuildProjectFullPath) + $(_RestoreProjectName) + $(RestoreProjectStyle) + @(_RestoreTargetFrameworksOutputFiltered) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_RestoreGraphEntry Include="$([System.Guid]::NewGuid())"> + TargetFrameworkInformation + $(MSBuildProjectFullPath) + $(PackageTargetFallback) + $(AssetTargetFallback) + $(TargetFramework) + $(TargetFrameworkIdentifier) + $(TargetFrameworkVersion) + $(TargetFrameworkMoniker) + $(TargetFrameworkProfile) + $(TargetPlatformMoniker) + $(TargetPlatformIdentifier) + $(TargetPlatformVersion) + $(TargetPlatformMinVersion) + $(CLRSupport) + $(RuntimeIdentifierGraphPath) + $(WindowsTargetPlatformMinVersion) + $(RestoreEnablePackagePruning) + $(RestorePackagePruningDefault) + $(NuGetAuditMode) + + + + + + + + + + + + + <_RestoreProjectPathItems Include="$(_RestoreGraphAbsoluteProjectPaths)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_GenerateRestoreProjectPathWalkOutputs Include="$(MSBuildProjectFullPath)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_RestorePackagesPathOverride>$(RestorePackagesPath) + + + + + + <_RestorePackagesPathOverride>$(RestoreRepositoryPath) + + + + + + <_RestoreSourcesOverride>$(RestoreSources) + + + + + + <_RestoreFallbackFoldersOverride>$(RestoreFallbackFolders) + + + + + + + + + + + + + <_TargetFrameworkOverride Condition=" '$(TargetFrameworks)' == '' ">$(TargetFramework) + + + + + + <_ValidProjectsForRestore Include="$(MSBuildProjectFullPath)" /> + + + + + + + + + + $(MSBuildExtensionsPath)\Microsoft\Microsoft.NET.Build.Extensions\Microsoft.NET.Build.Extensions.targets + + + + + <_TargetFrameworkVersionWithoutV>$(TargetFrameworkVersion.TrimStart('vV')) + $(MSBuildThisFileDirectory)\tools\net10.0\Microsoft.NET.Build.Extensions.Tasks.dll + $(MSBuildThisFileDirectory)\tools\net472\Microsoft.NET.Build.Extensions.Tasks.dll + + true + + + + + + + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + $(MSBuildExtensionsPath)\Microsoft.TestPlatform.targets + + + + + + Microsoft.TestPlatform.Build.dll + $([System.IO.Path]::Combine($(MSBuildThisFileDirectory),"vstest.console.dll")) + False + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + true + + + + + + + + + managed + + + + $(MSBuildThisFileDirectory)..\ + + + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + + true + true + + + + Project + + + + + $(Platform) + + x64 + x86 + x86 + x86 + x86 + x64 + x64 + x86 + + arm64 + x86 + true + x86 + true + + x86 + true + + + + + false + true + + None + None + Dynamic + + true + true + + true + + + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + + $([MSBuild]::NormalizeDirectory('$(MSBuildProjectDirectory)', '$(IntermediateOutputPath)', 'Generated Files')) + $(GeneratedFilesDir) + normal + $(MSBuildThisFileDirectory)..\tools\wv2winrt\ + $(WV2WinRTPath)wv2winrt.exe + $(IntDir)wv2winrt_inputs.rsp + $(IntDir)wv2winrt_params.rsp + false + false + false + + WinRTAdapter + + $(RootNamespace) + $(WebView2GeneratedFilesDir) + true + true + match + + + $(BeforeMidlCompileTargets);WV2WinRTAddDispatchAdapterIdl; + + + $(BeforeClCompileTargets);WV2WinRTAddGeneratedFiles; + + + + + <_WV2WinRTPlatformWinMDReferences Remove="@(_WV2WinRTPlatformWinMDReferences)" /> + + <_WV2WinRTPlatformWinMDReferences Include="@(ReferencePath)" Condition="('$(WV2WinRTPlatformReferencesLevel)' == 'explicit' or '$(WV2WinRTPlatformReferencesLevel)' == 'foundation') and '%(ReferencePath.IsSystemReference)' == 'true' and '%(ReferencePath.WinMDFile)' == 'true' and '%(ReferencePath.ReferenceSourceTarget)' == 'ResolveAssemblyReference'" /> + + <_WV2WinRTPlatformWinMDReferences Include="$(WindowsSDK_MetadataPathVersioned)\**\Windows.Foundation.FoundationContract.winmd" Condition="'$(WV2WinRTPlatformReferencesLevel)' == 'foundation'" /> + <_WV2WinRTPlatformWinMDReferences Include="$(WindowsSDK_MetadataPathVersioned)\**\Windows.Foundation.UniversalApiContract.winmd" Condition="'$(WV2WinRTPlatformReferencesLevel)' == 'foundation'" /> + <_WV2WinRTPlatformWinMDReferences Include="$(WindowsSDK_MetadataPathVersioned)\**\Windows.Networking.Connectivity.WwanContract.winmd" Condition="'$(WV2WinRTPlatformReferencesLevel)' == 'foundation'" /> + + <_WV2WinRTPlatformWinMDReferences Include="@(CppWinRTPlatformWinMDReferences)" Condition="'$(WV2WinRTPlatformReferencesLevel)' == 'match'" /> + + + + + + + + <_WV2WinRTDirectWinMDReferences Remove="@(_WV2WinRTDirectWinMDReferences)" /> + <_WV2WinRTDirectWinMDReferences Include="@(CppWinRTDirectWinMDReferences)" Condition="'%(Filename)' != 'Microsoft.Web.WebView2.Core'" /> + <_WV2WinRTDirectWinMDReferences Include="@(CppWinRTDirectWinMDReferences)" Condition="'%(Filename)' == 'Microsoft.Web.WebView2.Core' And '$(WV2WinRTWrapWebViewTypes)' == 'true'" /> + + + + + + + + <_WV2WinRTStaticProjectWinMDReferences Remove="@(_WV2WinRTStaticProjectWinMDReferences)" /> + <_WV2WinRTStaticProjectWinMDReferences Include="@(CppWinRTStaticProjectWinMDReferences)" /> + + + + + <_WV2WinRTDynamicProjectWinMDReferences Remove="@(_WV2WinRTDynamicProjectWinMDReferences)" /> + <_WV2WinRTDynamicProjectWinMDReferences Include="@(CppWinRTDynamicProjectWinMDReferences)" /> + + + + + + + + + + + + + + + + + + <_WV2WinRTAdditionalWinMDReferences Remove="@(_WV2WinRTAdditionalWinMDReferences)" /> + <_WV2WinRTAdditionalWinMDReferences Include="@(WebView2WinRTAdditionalWinMDReferences)" /> + + + + + + + + <_WV2WinRTInputs Remove="@(_WV2WinRTInputs)" /> + <_WV2WinRTInputs Include="@(WV2WinRTDirectWinMDReferences)" /> + <_WV2WinRTInputs Include="@(WV2WinRTPlatformWinMDReferences)" Condition="'$(WebView2WinRTWrapSystemTypes)' == 'true'" /> + <_WV2WinRTInputs Include="@(WV2WinRTProjectWinMDReferences)" /> + <_WV2WinRTInputs Include="@(WV2WinRTAdditionalWinMDReferences)" /> + <_WV2WinRTInputs Include="@(_CppwinrtCompInputs)" /> + + + %(FullPath) + + + + + + + + + + --idl + $(WV2WinRTIdlParameters) --output-path "$(WebView2DispatchAdapterOutputDir.TrimEnd('\'))" + $(WV2WinRTIdlParameters) --output-namespace $(WebView2DispatchAdapterNamespace) + + + + + $(WV2WinRTCommandPrefix) + $(WV2WinRTIdlCommand)"$(WV2WinRTExe)" $(WV2WinRTIdlParameters) + + + + + + + + + + + + + + + + + + + + <_PCH Include="@(ClCompile->Metadata('PrecompiledHeaderFile')->Distinct())" /> + + + + <_PCH>@(_PCH->Distinct()) + + + --output-path "$(WebView2DispatchAdapterOutputDir.TrimEnd('\'))" + $(WV2WinRTParameters) --output-namespace $(WebView2DispatchAdapterNamespace) + $(WV2WinRTParameters) --use-full-namespace + $(WV2WinRTParameters) --use-javascript-case + $(WV2WinRTParameters) --explicit-includes-only + $(WV2WinRTParameters) --require-allow-for-web-attribute + $(WV2WinRTParameters) --ignore-web-host-hidden-attribute + $(WV2WinRTParameters) --include @(WV2WinRTIncludeFilters, ' ') + $(WV2WinRTParameters) --exclude @(WV2WinRTExcludeFilters, ' ') + $(WV2WinRTParameters) --winmd-paths @(WV2WinRTInputs->'"%(WinMDPath)"', ' ') + $(WV2WinRTParameters) --verbose + $(WV2WinRTParameters) --pch "$(_PCH)" + $(WV2WinRTParameters) $(WV2WinRTAdditionalParameters) + + + + + + + $(WV2WinRTCommandPrefix) + $(WV2WinRTCommand)"$(WV2WinRTExe)" $(WV2WinRTParameters) + + + + + + + + + <_WV2WinRTFilesToBuild Remove="@(_WV2WinRTFilesToBuild)" /> + <_WV2WinRTFilesToBuild Include="$(WebView2DispatchAdapterOutputDir)wv2winrt\*.cpp" /> + <_WV2WinRTFilesToClean Include="$(WebView2DispatchAdapterOutputDir)wv2winrt\*.*" /> + + + + $(IntDir)wv2winrt\ + + + + + + + + %(AdditionalIncludeDirectories);$(WebView2DispatchAdapterOutputDir) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(MSBuildThisFileDirectory)native\include\;%(AdditionalIncludeDirectories) + + + + + + WebView2LoaderStatic.lib;version.lib + %(WebView2LoaderLib);WebView2Loader.dll.lib;%(AdditionalDependencies) + $(MSBuildThisFileDirectory)native\$(EffectivePlatform);%(AdditionalLibraryDirectories) + + + + + true + + + + + %(Filename)%(Extension) + Included + False + Always + false + + + + + + runtimes\win-x86\native\WebView2Loader.dll + Included + False + PreserveNewest + true + false + + + runtimes\win-x64\native\WebView2Loader.dll + Included + False + PreserveNewest + true + false + + + runtimes\win-arm64\native\WebView2Loader.dll + Included + False + PreserveNewest + true + false + + + + + + + $(MSBuildThisFileDirectory)native\include-winrt\;%(AdditionalIncludeDirectories) + + + + + + + + Microsoft.Web.WebView2.Core.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(MSBuildThisFileDirectory)..\include\;%(AdditionalIncludeDirectories) + + + + + %(AdditionalDependencies);DWriteCore.lib + %(AdditionalLibraryDirectories);$(MSBuildThisFileDirectory)..\lib\win10-x64 + + + + + %(AdditionalDependencies);DWriteCore.lib + %(AdditionalLibraryDirectories);$(MSBuildThisFileDirectory)..\lib\win10-x86 + + + + + %(AdditionalDependencies);DWriteCore.lib + %(AdditionalLibraryDirectories);$(MSBuildThisFileDirectory)..\lib\win10-arm64 + + + + + + + + + true + + + + + + + + + true + + + false + + + + + + + + true + + + true + + + + + + + + + + + + + + true + + + + + + + true + + + + $(GeneratedFilesDir)\WindowsAppSDK\ + $([MSBuild]::NormalizeDirectory('$(MSBuildProjectDirectory)', '$(IntermediateOutputPath)', 'Generated Files', 'WindowsAppSDK')) + $(WindowsAppSDKGeneratedFilesDir)WindowsAppSDKCompatibilitySetter.cs + + compatibilityOptions.PatchLevel1 = new WindowsAppRuntimeVersion($(WindowsAppSDKRuntimePatchLevel1.Replace(".", ",")))%3B + + + compatibilityOptions.PatchLevel2 = new WindowsAppRuntimeVersion($(WindowsAppSDKRuntimePatchLevel2.Replace(".", ",")))%3B + + $([System.Text.RegularExpressions.Regex]::Replace($(WindowsAppSDKDisabledChanges), "\s+", "")) + + var disabledChangesArray = new RuntimeCompatibilityChange[] { RuntimeCompatibilityChange.$([System.Text.RegularExpressions.Regex]::Replace($(WindowsAppSDKCompatibilityDisabledChangesNoSpaces), ",([A-Za-z])", ", RuntimeCompatibilityChange.$1")) }%3B + foreach (var changeId in disabledChangesArray) + { + compatibilityOptions.DisabledChanges.Add(changeId)%3B + } + + +using Microsoft.Windows.ApplicationModel.WindowsAppRuntime%3B + +// This file is generated by the build based on project properties. +namespace Microsoft.Windows.ApplicationModel.WindowsAppRuntime.Compatibility +{ + class AutoInitialize + { + // Called by WindowsAppRuntimeAutoInitializer.cs + internal static void ConfigureRuntimeCompatibility() + { + var compatibilityOptions = new RuntimeCompatibilityOptions()%3B +$(WindowsAppSDKCompatibilityPatchLevel1Lines) +$(WindowsAppSDKCompatibilityPatchLevel2Lines) +$(WindowsAppSDKCompatibilityDisabledChangesLines) + compatibilityOptions.Apply()%3B + } + } +} + + + + + + + + + + + + + + true + + + + + + $(DefineConstants);MICROSOFT_WINDOWSAPPSDK_AUTOINITIALIZE_BOOTSTRAP + $(DefineConstants);MICROSOFT_WINDOWSAPPSDK_AUTOINITIALIZE_DEPLOYMENTMANAGER + $(DefineConstants);MICROSOFT_WINDOWSAPPSDK_AUTOINITIALIZE_UNDOCKEDREGFREEWINRT + $(DefineConstants);MICROSOFT_WINDOWSAPPSDK_AUTOINITIALIZE_COMPATIBILITY + + + + + + + + + + + + + + + + + + + <_WinUIPlatformTarget Condition="'$(_WinUIPlatformTarget)'=='' and '$(PlatformTarget)'!=''">$(PlatformTarget) + <_WinUIPlatformTarget Condition="'$(_WinUIPlatformTarget)'=='' and '$(Platform)'=='Win32'">x86 + <_WinUIPlatformTarget Condition="'$(_WinUIPlatformTarget)'==''">$(Platform) + + false + + false + + + + + + + $(TargetPlatformVersion) + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformSdkLocation("Windows", "10.0")) + $(MSBuildThisFileDirectory) + $(WinUITargetsDirectory) + true + true + false + WinUI + UAP + + true + false + + + + false + true + true + true + + + + + + + + + + + + + + + + + + + <_MicrosoftWinUIReferencePath Include="@(ReferencePath)" Condition="'%(Filename)%(Extension)' == 'Microsoft.WinUI.dll'" /> + + + <_IsMicrosoftWinUIAssemblyReferenced>false + <_IsMicrosoftWinUIAssemblyReferenced Condition="@(_MicrosoftWinUIReferencePath->Count()) != 0">true + + + + + + + + + + + + <_WinUIRuntimeIdentifier>win10-$(_WinUIPlatformTarget) + <_WinUIDllDir>$(MSBuildThisFileDirectory)..\runtimes\$(_WinUIRuntimeIdentifier)\native\ + + <_AddWinUIAssembliesToReferenceCopyLocalPaths Condition="'$(_AddWinUIAssembliesToReferenceCopyLocalPaths)'==''">false + + + + + + %(RecursiveDir) + + + + + + + + + + + + $(MSBuildWarningsAsMessages); + + + APPX1707; + + + $(MSBuildWarningsAsMessages); + + + MSB3268; + + + + + true + + $(MSBuildWarningsAsMessages); + MSB3842; + MSB3843; + + + + + + + Windows + 10.0 + en-US + + + + + + <_WinUINativeCopyLocalItems Include="@(NativeCopyLocalItems)" Condition="'%(NativeCopyLocalItems.NuGetPackageId)' == 'Microsoft.WinUI' and '%(Extension)' == '.mui' and '%(NativeCopyLocalItems.DestinationSubDirectory)'==''"> + $([MSBuild]::EnsureTrailingSlash($([MSBuild]::MakeRelative($(MSBuildThisFileDirectory)..\runtimes\$(_WinUIRuntimeIdentifier)\native\, %(RootDir)%(Directory))))) + $([MSBuild]::EnsureTrailingSlash( + $([MSBuild]::MakeRelative($(MSBuildThisFileDirectory)..\runtimes\$(_WinUIRuntimeIdentifier)\native\, %(RootDir)%(Directory)))))%(FileName)%(Extension) + + + + + <_WinUINativeCopyLocalItems Remove="@(_WinUINativeCopyLocalItems)" /> + + + $([MSBuild]::EnsureTrailingSlash($([MSBuild]::MakeRelative($(MSBuildThisFileDirectory)..\runtimes\$(_WinUIRuntimeIdentifier)\native\, %(RootDir)%(Directory))))) + + + + + + true + + + + + + + + + + + + $(OutDir)%(_FilteredNonWapProjProjectOutput.DestinationSubDirectory)%(Filename)%(Extension) + + + $(OutDir)%(_FilteredNonWapProjProjectOutput.DestinationSubDirectory)%(Filename)%(Extension) + + + + + + + true + + + + + + + + ContentFilesProjectOutputGroup; + Prep_ComputeProcessXamlFiles; + $(AddProcessedXamlFilesToCopyLocalDependsOn) + + + + + <_ProcessedXamlFilesToCopyLocal Include="@(GeneratedXamlSrc->'%(FullPath)')" /> + <_ProcessedXamlFilesToCopyLocal Condition="'$(GenerateLibraryLayout)' == 'true' and '$(DisableXbfGeneration)' != 'true'" Include="@(GeneratedXamlSrc0->'%(FullPath)')" /> + + + + + + <_AllChildProjectItemsWithTargetPath Include="@(_ProcessedXamlFilesToCopyLocalWithTargetPath)" Condition="'%(Extension)' != '.xbf' OR ('%(Extension)' == '.xbf' AND '$(_SupportXbfAsEmbedFileResources)' != 'true')"> + $(PriInitialPath)\%(_ProcessedXamlFilesToCopyLocalWithTargetPath.TargetPath) + PreserveNewest + + + + <_AllChildProjectItemsWithTargetPath Include="@(ContentFilesProjectOutputGroupOutput)"> + $(PriInitialPath)\%(ContentFilesProjectOutputGroupOutput.TargetPath) + PreserveNewest + + + + + + + + true + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.xaml + + + + + + + + + + + + + + + + + $(MSBuildProjectName) + $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\$(SDKIdentifier)\v$(SDKVersion)', 'InstallationFolder', null, RegistryView.Registry32, RegistryView.Default)) + true + true + true + false + <_MuxPackageToolsFolder Condition=" '$(MSbuildRuntimeType)' == 'Core' ">$(MSBuildThisFileDirectory)..\tools\net6.0\ + <_MuxPackageToolsFolder Condition=" '$(_MuxPackageToolsFolder)' == '' ">$(MSBuildThisFileDirectory)..\tools\net472\ + $(_MuxPackageToolsFolder)..\ + true + XamlSaveStateFile.xml + $(IntermediateOutputPath)\$(XamlSavedStateFileName) + + @(ReferenceAssemblyPaths); + $(WindowsSdkPath) + + $(WindowsSdkPath)UnionMetadata\$(TargetPlatformVersion)\Facade\Windows.winmd + + $(TPVFacadeWinmdPath) + + $(WindowsSdkPath)UnionMetadata\facade\Windows.winmd + $(Language) + + true + + true + + false + true + + + true + false + + false + + + false + + true + false + + true + + true + + + true + + true + + false + + <_UsingCSWinRT>$(UsingMicrosoftNETSdk) + + Microsoft.UI.Xaml + + true + + + + + + + + + + + + + + + + $(_MuxPackageToolsFolder)Microsoft.UI.Xaml.Markup.winmd + + + + + + + + + + + + + + + + + + + + + + + $(AssemblyName).xr.xml + + + + + + ResolveKeySource; + AddImplicitDefineConstants; + MarkupCompilePass1; + XamlPreCompile; + MarkupCompilePass2; + $(PrepareResourcesDependsOn) + + + ResolveKeySource; + MarkupCompilePass1; + XamlPreCompile; + MarkupCompilePass2; + $(PrepareResourcesDependsOn) + + true + true + 6.02 + 6.00 + _OnXamlPreCompileError + + $(IntermediateOutputPath) + + + $(_MuxPackageToolsFolder)Microsoft.UI.Xaml.Markup.Compiler.dll + + + $(_MuxPackageToolsFolder)Microsoft.UI.Xaml.Markup.Compiler.IO.dll + + + $(_MuxPackageToolsFolder)..\net472\XamlCompiler.exe + + + + + + + + + $(FrameworkSDKRoot)bin + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + GetVCInstallPath; + GetXamlCppIncludeDirectories; + $(GetXamlCppIncludeDirectories); + GetPriIndexName; + GetPrecompiledHeaderFile; + $(MarkupCompilePass1DependsOn) + + + GetVCInstallPath; + GetXamlCppIncludeDirectories; + $(GetXamlCppIncludeDirectories) + GetPriIndexName; + GetPrecompiledHeaderFile; + $(MarkupCompilePass2DependsOn) + + + GetVCInstallPath; + GetXamlCppIncludeDirectories; + $(Prep_ComputeProcessXamlFilesDependsOn) + + + + + + + + + + + + + + + + + + + + $(VsInstallRoot)\VC\Tools\MSVC\$(LatestMSVCVersion)\ + + + <_VCInstallPathHostArchitecture Condition="'$(PROCESSOR_ARCHITECTURE)' == 'x86'">X86 + <_VCInstallPathHostArchitecture Condition="'$(PROCESSOR_ARCHITECTURE)' != 'x86'">X64 + $(VCToolsInstallDir)bin\Host$(_VCInstallPathHostArchitecture)\x86\vcmeta.dll + $(VCToolsInstallDir)bin\Host$(_VCInstallPathHostArchitecture)\x64\vcmeta.dll + + + + + + + + + + + + + + + + $(TargetName) + + $(RootNamespace) + $(RootNamespace) + + $(TargetName) + + + + $(PriInitialPath) + + + + + + @(ClCompile->Metadata('PrecompiledHeaderFile')->Distinct()) + + + + + + DesignTimeMarkupCompilation; + $(CoreCompileDependsOn) + + + + + + + + + + + + + + + + + + + + + + + + $(XamlGeneratedOutputPath)\input.json + $(XamlGeneratedOutputPath)\output.json + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(XamlGeneratedOutputPath)\input.json + $(XamlGeneratedOutputPath)\output.json + + + + + + + + + + + + + + + + + + + + + + + $(WarningLevel) + 0 + + + + + + $(PrevWarningLevel) + 1 + + + + + @(XamlIntermediateAssembly->'%(Identity)') + + $(LocalAssembly) + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(XamlGeneratedOutputPath)\input.json + $(XamlGeneratedOutputPath)\output.json + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XamlGenerated + + + + + + + $(XamlGeneratedOutputPath)\input.json + $(XamlGeneratedOutputPath)\output.json + + + + + + + + + + + + + + + + + + + + <_Temp Remove="@(_Temp)" /> + + + + + %(AllProjectXamlPages.DefaultXamlLink) + + + + + + + + + + + + + + + + + + + + + + + + + ExpandSDKReference + + + ExpandSDKReference + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(XamlGeneratedOutputPath) + $(OutputPath)\ + + + + + + + + + + + + GetPackagingOutputs; + $(PrepareLibraryLayoutDependsOn) + + + + + + <_LayoutFile Include="@(PackagingOutputs)" Condition="'%(OutputGroup)' == 'ContentFilesProjectOutputGroup'" /> + <_LayoutFile Include="@(PackagingOutputs)" Condition="'%(OutputGroup)' == 'CustomOutputGroupForPackaging'" /> + + + + + + + + $(ResolveReferencesDependsOn); + ImplicitlyExpandTargetFramework; + ImplicitlyExpandTargetPlatform + + + $(ImplicitlyExpandTargetFrameworkDependsOn); + GetReferenceAssemblyPaths + + + + + + + false + false + .NET for Windows Store apps + $(TargetFrameworkMoniker) + ImplicitlyExpandTargetFramework + True + + + + + + <_ResolveAssemblyReferenceResolvedFiles Include="@(ReferencePath)" Condition="'%(ReferencePath.ResolvedFrom)' == 'ImplicitlyExpandTargetFramework'" /> + + + + + + <_TargetPlatformWinMDs Condition="'$(TargetPlatformSdkRootOverride)' != ''" Include="$(TargetPlatformSdkRootOverride)\References\$(XeWin10TargetVersion)\**\*.winmd"> + true + false + $(TargetPlatformMoniker) + $(TargetPlatformDisplayName) + ImplicitlyExpandTargetPlatform + True + + <_TargetPlatformWinMDs Condition="'$(TargetPlatformSdkRootOverride)' == ''" Include="$([Microsoft.Build.Utilities.ToolLocationHelper]::GetTargetPlatformReferences($(SDKIdentifier), $(SDKVersion), $(TargetPlatformIdentifier), $(TargetPlatformMinVersion), $(TargetPlatformVersion)))"> + true + false + $(TargetPlatformMoniker) + $(TargetPlatformDisplayName) + ImplicitlyExpandTargetPlatform + True + + + + + + + + <_ResolveAssemblyReferenceResolvedFiles Include="@(_TargetPlatformWinMDs)" /> + + <_TargetPlatformWinMDs Remove="@(_TargetPlatformWinMDs)" /> + + + + + true + + + + true + + + + + + + + true + <_MicrosoftBuildMsixTargetsOverriden Condition="'$(MicrosoftBuildMsixLocation)'!=''">true + <_MicrosoftBuildMsixTargetsOverriden Condition="'$(_MicrosoftBuildMsixTargetsOverriden)'==''">false + <_MicrosoftBuildMsixTargetsLocation Condition="'$(_MicrosoftBuildMsixTargetsOverriden)'=='true'">$(MicrosoftBuildMsixLocation)\Targets\ + <_MicrosoftBuildMsixTargetsLocation Condition="'$(_MicrosoftBuildMsixTargetsOverriden)'==''">$(MSBuildThisFileDirectory) + + + $(_MicrosoftBuildMsixTargetsLocation)Microsoft.Build.Msix.DesignTime.targets + $(_MicrosoftBuildMsixTargetsLocation)Microsoft.Build.Msix.Packaging.targets + $(_MicrosoftBuildMsixTargetsLocation)Microsoft.Build.Msix.Cpp.targets + $(_MicrosoftBuildMsixTargetsLocation)Microsoft.Build.Msix.Cs.targets + + + <_MsixTaskAssemblyConfig Condition="'$(_MsixTaskAssemblyConfig)'==''">Debug + $(MicrosoftBuildMsixLocation)\bin\$(_MsixTaskAssemblyConfig)\net6.0-windows$(DotNet6WindowsVersion)\ + $(MicrosoftBuildMsixLocation)\bin\$(_MsixTaskAssemblyConfig)\net472\ + <_PowershellScriptLocation>$(MicrosoftBuildMsixLocation)\AppDevPackageScripts\ + + + $(MsixPackageSupport) + $(MsixPackageSupport) + $(MsixPackageSupport) + $(MsixPackageSupport) + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + + $(MSBuildThisFileDirectory)..\tools\net6.0\ + $(MSBuildThisFileDirectory)..\tools\net472\ + $(MsixTaskAssemblyLocation)Microsoft.Build.Msix.dll + Microsoft.Build.Msix + + + + + + + + + + + + + + + + + + + + + + + + + + + + MSIX + None + + true + + + UAP + 10.0 + <_QualifiersPath>$(IntermediateOutputPath)qualifiers.txt + <_ProjectArchitecturesFilePath>$(IntermediateOutputPath)ProjectArchitectures.txt + AppPackages + Upload + $(OutDir)$(AppxPackageDirName)\ + $(AppxPackageDir)\ + $(OutDir)$(AppxPackageUploadDirName)\$(AppxPackageDirName)\ + $(AppxPackageUploadDir)\ + BundleArtifacts + true + $(ProjectDir)$(PlatformSpecificBundleArtifactsListDirName)\ + $(IntermediateOutputPath)Symbols + $(IntermediateOutputPath)_pkginfo.txt + sha256 + $(AppxPackageSigningTimestampDigestAlgorithm) + $(AppxDefaultHashAlgorithmId) + $(TargetPlatformVersion) + + $(IntermediateOutputPath)package.map.txt + $(IntermediateOutputPath).winmd_cache + CLRHost.dll + AppxManifest.xml + $(TargetDir)$(AppxPackageArtifactsDir)$(AppxManifestFileName) + $(TargetDir)$(AppxPackageArtifactsDir)$(ProjectName).build.appxrecipe + $(TargetDir)$(AppxUploadPackageArtifactsDir)$(ProjectName).build.appxrecipe + $(TargetDir)$(AppxPackageArtifactsDir)$(ProjectName).appxrecipe + $(TargetDir)$(AppxUploadPackageArtifactsDir)$(ProjectName).appxrecipe + $(IntermediateOutputPath)StoreKey_Temp.pfx + Package.appinstaller + false + false + + <_GenerateMsixPackage Condition="'$(GenerateAppxPackageOnBuild)'=='true' or '$(PublishAppxPackage)'=='true' or '$(WindowsPackageType)'=='Sparse'">true + <_GenerateMsixPackage Condition="'$(_GenerateMsixPackage)'==''">false + true + false + $(TargetDir)AppX + Publish + CopyFilesToOutputDirectory + PrepareMsixPackage + $(IntermediateOutputPath)_installerinfo.log + + true + <_TargetPlatformSdkDir Condition="'$(_TargetPlatformSdkDir)' == ''">$(TargetPlatformSdkPath) + + + _GenerateAppxPackage + + + + + Designer + + + + + <_ValidWindowsPackageTypes>None,MSIX,Sparse + + + + + + + + + + + + $(PrepareForBuildDependsOn); + _ValidateWindowsPackageType; + + + + msix + appx + + + .$(PackageExtPrefix) + .e$(PackageExtPrefix) + .$(PackageExtPrefix)sym + .$(PackageExtPrefix)bundle + .e$(PackageExtPrefix)bundle + .$(PackageExtPrefix)upload + .intermediate + + + true + true + true + true + + + false + + + true + + + + $(PrepareMsixPackageDependsOn); + _GetMakeAppxToolPath + + + $(PrepareMsixPackageDependsOn); + _GetSignAppxPackageToolPath + + + $(PrepareMsixPackageDependsOn); + _ValidatePresenceOfAppxManifestItems; + GetPackagingOutputs; + _GetPackageProperties; + _ComputeAppxPackagePayload; + _GenerateAppxManifest; + _GenerateAppxPackageRecipe; + + + + + + $(GenerateMsixPackageDependsOn); + PrepareMsixPackage; + _EnsurePdbCmfExeFullPath; + _ComputeAppxPackageOutput; + _GenerateAppxPackageFile; + _GenerateAppxSymbolPackage; + _CreateTestLayout; + + + GenerateAppInstallerForPackage; + + _AddWindowsInstallScriptToTestLayout; + + + $(GenerateMsixPackageDependsOn); + _GetMakeAppxToolPath + + + $(GenerateMsixPackageDependsOn); + _GetSignAppxPackageToolPath + + + $(GenerateMsixPackageDependsOn); + GenerateProjectPriFile; + _ComputeAppxPackageOutput; + _GenerateAppxManifest; + _GenerateAppxPackageFile; + + + + + + <_PrepareMsixPackage Condition="'$(_PrepareMsixPackage)' == '' and ('$(WindowsPackageType)' == 'Sparse' or '$(WindowsPackageType)'=='None')">false + <_PrepareMsixPackage Condition="'$(_PrepareMsixPackage)' == '' and '$(AppxPackage)'=='true'">true + <_PrepareMsixPackage Condition="'$(_PrepareMsixPackage)' == '' and ('$(OutputType)'=='WinExe' or '$(OutputType)'=='Exe')">true + <_PrepareMsixPackage Condition="'$(_PrepareMsixPackage)'==''">false + + + + + PrepareMsixPackage; + $(PrepareForRunDependsOn); + + + + + + + + + + + + <_GenerateAppxPackageDependsOn> + $(GenerateMsixPackageDependsOn) + + <_GenerateAppxPackageDependsOn Condition="'$(GenerateAppxPackageOnBuild)'!='true'"> + Build; + $(_GenerateAppxPackageDependsOn); + + <_GenerateAppxPackageDependsOn Condition="'$(PublishProfile)'!=''"> + Publish; + $(_GenerateAppxPackageDependsOn); + + + + + + + + + + + + + + + + + + + + + + + $(VsInstallRoot)\VC\Tools\MSVC\$(LatestMSVCVersion)\ + + + <_VCInstallPathHostArchitecture Condition="'$(PROCESSOR_ARCHITECTURE)' == 'x86'">X86 + <_VCInstallPathHostArchitecture Condition="'$(PROCESSOR_ARCHITECTURE)' != 'x86'">X64 + $(VCToolsInstallDir)bin\Host$(_VCInstallPathHostArchitecture)\x86\mspdbcmf.exe + $(VCToolsInstallDir)bin\Host$(_VCInstallPathHostArchitecture)\x64\mspdbcmf.exe + + + + $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\AppxPackage\ + $(AppxMSBuildToolsPath)\x86\mspdbcmf.exe + $(AppxMSBuildToolsPath)\x64\mspdbcmf.exe + + + $(PdbCmfx64ExeFullPath) + $(PdbCmfx86ExeFullPath) + + + + + + + + + + + + + + + + + <_CustomAppxManifestUsed Condition="'@(CustomAppxManifest)' == ''">false + <_CustomAppxManifestUsed Condition="'@(CustomAppxManifest)' != ''">true + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_GenerateAppxPackageFileDependsOn Condition="'$(MakeAppxExeFullPath)'==''"> + $(_GenerateAppxPackageFileDependsOn); + _GetMakeAppxToolPath + + <_GenerateAppxPackageFileDependsOn Condition="'$(SignAppxPackageExeFullPath)'==''"> + $(_GenerateAppxPackageFileDependsOn); + _GetSignAppxPackageToolPath + + <_GenerateAppxPackageFileDependsOn> + $(_GenerateAppxPackageFileDependsOn); + _DeleteAppxOutputFolderIfNecessary + + + + + + + + + + + + + <_DedupedAppxPackagePayload Remove="@(_DedupedAppxPackagePayload)" /> + + + + + + + $(TargetDir) + + + + + + + + + + + + + + + + + + + + + + + + + + <_PowershellScriptLocation Condition="'$(_PowershellScriptLocation)'==''">$(MSBuildThisFileDirectory)AppDevPackageScripts\ + + + <_PowerShellScriptsSource Include="$(_PowershellScriptLocation)Add-AppDevPackage.ps1" /> + <_PowerShellScriptsSource Include="$(_PowershellScriptLocation)Install.ps1" /> + <_PowerShellScriptsSource Include="$(_PowershellScriptLocation)**\Add-AppDevPackage.psd1" /> + + + <_PowerShellScriptsDestination Include="@(_PowerShellScriptsSource->'$(AppxPackageTestDir)%(RecursiveDir)%(FileName)%(Extension)')" /> + + + + + + + + + <_TestLayoutSourceFiles Condition="'%(Architecture)' == 'neutral'" Include="@(FrameworkSdkPackage)" /> + <_TestLayoutTargetFiles Condition="'%(Architecture)' == 'neutral'" Include="@(FrameworkSdkPackage->'$(AppxPackageTestDir)Dependencies\%(FileName)%(Extension)')" /> + + + <_TestLayoutSourceFiles Condition="'%(Architecture)' != 'neutral'" Include="@(FrameworkSdkPackage)" /> + <_TestLayoutTargetFiles Condition="'%(Architecture)' != 'neutral'" Include="@(FrameworkSdkPackage->'$(AppxPackageTestDir)Dependencies\%(Architecture)\%(FileName)%(Extension)')" /> + + + + + + + + + + + + + + + <_MultipleQualifiersPerDimensionFound Condition="'$(_MultipleQualifiersPerDimensionFound)' != 'true'">false + + + false + + + $(_MultipleQualifiersPerDimensionFound) + false + true + + + $(TargetName) + $(TargetDir)$(AppxPackageName)$(AppxPackageExtension) + + + $(AppxPackageName) + + + $(ProjectName)_$(AppxManifestIdentityVersion) + <_AppxPackageConfiguration Condition="'$(Configuration)' != 'Release'">_$(Configuration) + <_AppxPackagePlatform>$(Platform) + <_AppxPackagePlatform Condition="'$(RuntimeIdentifier)'!=''">@(_ProjectArchitectureItem) + $(AppxPackageNameNeutral)_$(_AppxPackagePlatform)$(_AppxPackageConfiguration) + + + $(AppxPackageDir)$(AppxPackageName)$(AppxStoreContainerExtension) + + + $(AppxPackageDir)$(AppxPackageName)_Test\ + $(AppxPackageDir)$(AppxPackageNameNeutral)$(_AppxPackageConfiguration)_Test\ + + + $(AppxPackageDir)$(AppxPackageName)_Test\$(ExternalPackagesDir) + $(AppxPackageDir)$(AppxPackageNameNeutral)$(_AppxPackageConfiguration)_Test\$(ExternalPackagesDir) + + + $(AppxPackageTestDir)$(AppxPackageName)$(AppxPackageExtension) + $(AppxPackageTestDir)$(AppxPackageName)$(AppxPackageEncryptedExtension) + + + $(AppxPackageTestDir)$(AppxPackageName)$(AppxSymbolPackageExtension) + + + $(IntermediateOutputPath)$(AppxPackageNameNeutral)$(AppxBundleFolderSuffix)\ + $(AppxBundleDir)\ + + + $(TargetDir)$(AppxPackageName)$(AppxPackageExtension) + + + $(TargetDir)$(AppxPackageNameNeutral) + + + + <_GenerateAppxManifestDependsOn> + BeforeGenerateAppxManifest; + $(_GenerateAppxManifestDependsOn); + _GetAppxManifestSchemaItems; + _GenerateAdditionalFrameworkSDKReference; + _GetRecursiveResolvedSDKReferences; + _CalculateInputsForGenerateCurrentProjectAppxManifest; + _GenerateCurrentProjectAppxManifest; + _CreateFinalAppxManifestItem; + AfterGenerateAppxManifest + + + + <_GenerateAppxPackageRecipeDependsOn> + BeforeGenerateAppxPackageRecipe; + $(_GenerateAppxPackageRecipeDependsOn); + _CalculateInputsForGenerateAppxPackageRecipe; + _GenerateAppxPackageRecipeFile + + + + + $(AllOutputGroupsDependsOn); + BuildOnlySettings; + PrepareForBuild; + AssignTargetPaths; + ResolveReferences + + + + + $(CopyLocalFilesOutputGroupDependsOn); + $(AllOutputGroupsDependsOn) + + + + + $(GetCopyToOutputDirectoryItemsOutputGroupDependsOn); + GetCopyToOutputDirectoryItems; + $(AllOutputGroupsDependsOn) + + + + + $(ComFilesOutputGroupDependsOn); + $(AllOutputGroupsDependsOn) + + + + + $(CopyWinmdArtifactsOutputGroupDependsOn); + GetResolvedWinMD; + $(AllOutputGroupsDependsOn) + + + + + $(GetPackagingOutputsDependsOn); + AssignProjectConfiguration; + _SplitProjectReferencesByFileExistence; + GetPriOutputs; + + + + <_GetPackagePropertiesDependsOn> + $(_GetPackagePropertiesDependsOn); + _GetProjectArchitecture; + _GetRecursiveProjectArchitecture; + _GetPackageArchitecture; + _CalculateAppxBundleProperties; + + + + + + + Windows + 8.0 + Windows 8.0 + 6.2.1 + 6.2 + + + Windows + 8.1 + Windows 8.1 + 6.3.0 + 6.3 + + + Windows + 8.2 + Windows 8.2 + 6.3.0 + 6.3 + + + UAP + 0.8.0.0 + Windows 10.0 + 10.0.0 + 10.0 + + + Windows + 7.0 + 7.0 + Windows 10.0 + 10.0.0 + 10.0 + + + Windows + 10.0.17134.0 + 10.0.17134.0 + Windows 10.0 + 10.0.0 + 10.0 + + + Windows + 10.0.17763.0 + 10.0.17134.0 + Windows 10.0 + 10.0.0 + 10.0 + + + Windows + 10.0.18362.0 + 10.0.17134.0 + Windows 10.0 + 10.0.0 + 10.0 + + + Windows + 10.0.19041.0 + 10.0.17134.0 + Windows 10.0 + 10.0.0 + 10.0 + + + + + <_IntermediateFrameworkSdkReference Include="@(AppxPackageRegistration)" Condition="'@(AppxPackageRegistration)' != '' AND ('$(Configuration)' == '%(AppxPackageRegistration.Configuration)' OR '%(AppxPackageRegistration.Configuration)' == '') AND ('$(Platform)' == '%(AppxPackageRegistration.Architecture)' OR '%(AppxPackageRegistration.Configuration)' == '')"> + %(AppxPackageRegistration.Name) + %(AppxPackageRegistration.Filename) + %(AppxPackageRegistration.Configuration) + %(AppxPackageRegistration.Architecture) + %(AppxPackageRegistration.Identity) + + + Name = %(_IntermediateFrameworkSdkReference.SDKName), MinVersion = %(_IntermediateFrameworkSdkReference.Version), Publisher = %(_IntermediateFrameworkSdkReference.Publisher) + + + + + + + + + <_UnfilteredRecursiveResolvedSDKReference Include="@(PackagingOutputs)" Condition="'%(OutputGroup)' == 'GetResolvedSDKReferences'" /> + + + + + + + + + + + + + + %(NonFrameworkSdkReference.SimpleName) + %(NonFrameworkSdkReference.Version) + + + + + + + + + <_WinmdFilesFromWinmdArtifacts Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.Extension)' == '.winmd' and '%(PackagingOutputs.OutputGroup)' == 'CopyWinmdArtifactsOutputGroup' and '%(PackagingOutputs.ProjectName)' != '$(ProjectName)' and '%(PackagingOutputs.SkipHarvestingWinmdRegistration)' != 'true'" /> + <_WinmdFilesFromReferences Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.Extension)' == '.winmd' and '%(PackagingOutputs.OutputGroup)' == 'CopyLocalFilesOutputGroup' and '%(PackagingOutputs.SkipHarvestingWinmdRegistration)' != 'true'" /> + <_WinmdFilesFromOtherGroups Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.Extension)' == '.winmd' and '%(PackagingOutputs.OutputGroup)' != 'CopyWinmdArtifactsOutputGroup' and '%(PackagingOutputs.OutputGroup)' != 'CopyLocalFilesOutputGroup' and '%(PackagingOutputs.ResolvedFrom)' != 'GetSDKReferenceFiles' and '%(PackagingOutputs.SkipHarvestingWinmdRegistration)' != 'true'" /> + <_WinmdFilesFromSDKs Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.Extension)' == '.winmd' and '%(PackagingOutputs.ResolvedFrom)' == 'GetSDKReferenceFiles' and '%(PackagingOutputs.SkipHarvestingWinmdRegistration)' != 'true'" /> + + + + + + <_GenerateCurrentProjectAppxManifestInput Include="@(AppxManifest);@(AppxManifestSchema);$(PackageCertificateKeyFile);@(_AppxWinmdFilesToHarvest);$(_QualifiersPath)" /> + + + + + Windows.FullTrustApplication + + + + + + + + $(TargetPlatformMinVersion) + $(TargetPlatformVersion) + + + $(TargetPlatformMinVersion) + $(TargetPlatformVersion) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + m + http://schemas.microsoft.com/appx/manifest/foundation/windows10 + + + uap + http://schemas.microsoft.com/appx/manifest/uap/windows10 + + + + + true + + + http://schemas.microsoft.com/developer/appx/2015/build + http://schemas.microsoft.com/developer/appx/2012/build + http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities + http://schemas.microsoft.com/appx/manifest/desktop/windows10 + http://schemas.microsoft.com/appx/manifest/uap/windows10/10 + + + + + + <_ProjectArchitectureOutput>Invalid + <_ProjectArchitectureOutput Condition="'$(Platform)' == 'x86'">x86 + <_ProjectArchitectureOutput Condition="'$(Platform)' == 'Win32'">x86 + <_ProjectArchitectureOutput Condition="'$(Platform)' == 'x64'">x64 + <_ProjectArchitectureOutput Condition="'$(Platform)' == 'arm'">arm + <_ProjectArchitectureOutput Condition="'$(Platform)' == 'arm64'">arm64 + + + <_ProjectArchitectureOutput>neutral + <_ProjectArchitectureOutput Condition="'$(RuntimeIdentifier)' == 'win-x64' or '$(RuntimeIdentifier)' == 'win10-x64'">x64 + <_ProjectArchitectureOutput Condition="'$(RuntimeIdentifier)' == 'win-x86' or '$(RuntimeIdentifier)' == 'win10-x86'">x86 + <_ProjectArchitectureOutput Condition="'$(RuntimeIdentifier)' == 'win-arm64' or '$(RuntimeIdentifier)' == 'win10-arm64'">arm64 + <_ProjectArchitectureOutput Condition="'$(RuntimeIdentifier)' == 'win10-arm'">arm + + + + + + + + + + %(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension) + + + + + <_WinmdWithImplementation Include="@(CopyLocalFilesOutputGroupOutput)" Condition="'%(CopyLocalFilesOutputGroupOutput.Extension)' == '.winmd' AND '%(CopyLocalFilesOutputGroupOutput.Filename)' != 'platform' AND '%(CopyLocalFilesOutputGroupOutput.Implementation)' != ''" /> + + <_WinmdWithImplementationTargetPath Include="@(_WinmdWithImplementation->'%(DestinationSubDirectory)%(Implementation)')"> + %(Identity) + + <_CopyLocalFilesOutputGroupOutputTargetPath Include="@(CopyLocalFilesOutputGroupOutput->'%(TargetPath)')" /> + + <_WinmdSatifiedImplementation Include="@(_WinmdWithImplementationTargetPath)" Condition="'@(_WinmdWithImplementationTargetPath)' == '@(_CopyLocalFilesOutputGroupOutputTargetPath)' AND '%(Identity)' != ''" /> + <_WinmdWithImplementation Remove="@(_WinmdSatifiedImplementation->'%(OriginalItemSpec)')" /> + + + + %(_WinmdWithImplementation.DestinationSubDirectory)%(_WinmdWithImplementation.Implementation) + + + + + + + + + + + + %(ReferenceComWrappersToCopyLocal.Filename)%(ReferenceComWrappersToCopyLocal.Extension) + + + %(ResolvedIsolatedComModules.Filename)%(ResolvedIsolatedComModules.Extension) + + + %(NativeReferenceFile.Filename)%(NativeReferenceFile.Extension) + + + + + + + %(Filename)%(Extension) + + + + + + true + false + + + + + + + PreserveNewest + + + <_NoneWithTargetPath Remove="@(CurrentNoneWithTargetPath )" /> + <_NoneWithTargetPath Include="@(CurrentNoneWithTargetPath )"> + PreserveNewest + + + + + + <_PublishItem Include="@(ResolvedFileToPublish->'%(FullPath)')" TargetPath="%(ResolvedFileToPublish.RelativePath)" OutputGroup="__GetPublishItems" /> + + + + + + <_BeforeOptimizationImagesSnapshot Remove="@(_BeforeOptimizationImagesSnapshot)" /> + <_BeforeOptimizationImagesSnapshot Include="@(ResolvedFileToPublish->'%(FullPath)')" /> + + + + + <_AfterOptimizationImagesSnapshot Remove="@(_AfterOptimizationImagesSnapshot)" /> + <_AfterOptimizationImagesSnapshot Include="@(ResolvedFileToPublish->'%(FullPath)')" /> + + + + + <_OptimizationInputAssemblies Include="@(_BeforeOptimizationImagesSnapshot)" /> + <_OptimizationInputAssemblies Remove="@(_AfterOptimizationImagesSnapshot)" /> + + + + + + + true + true + true + true + true + false + false + false + false + true + true + false + false + true + true + true + + + + + + <_PackagingOutputsUnexpanded Include="%(_BuiltProjectOutputGroupOutput.FinalOutputPath)"> + %(_BuiltProjectOutputGroupOutput.TargetPath) + BuiltProjectOutputGroup + $(ProjectName) + + + + + + + <_PackagingOutputsUnexpanded Include="@(_PublishItemsOutputGroupOutput)"> + PublishItemsOutputGroupOutput + $(ProjectName) + + + + + + + <_PackagingOutputsUnexpanded Include="%(_DebugSymbolsProjectOutputGroupOutput.FinalOutputPath)"> + DebugSymbolsProjectOutputGroup + $(ProjectName) + + + + + + + <_PackagingOutputsUnexpanded Include="@(_DocumentationProjectOutputGroupOutput)"> + DocumentationProjectOutputGroup + $(ProjectName) + + + + + + + <_PackagingOutputsUnexpanded Include="@(_SatelliteDllsProjectOutputGroupOutput)"> + SatelliteDllsProjectOutputGroup + $(ProjectName) + + + + + + + <_PackagingOutputsUnexpanded Include="@(_SourceFilesProjectOutputGroupOutput)"> + SourceFilesProjectOutputGroup + $(ProjectName) + + + + + + + <_PackagingOutputsUnexpanded Include="@(_SGenFilesOutputGroupOutput)"> + SGenFilesOutputGroup + $(ProjectName) + + + + + + + <_PackagingOutputsUnexpanded Include="@(_CopyLocalFilesOutputGroupOutput)" Condition="'%(Extension)'!='.pri'"> + CopyLocalFilesOutputGroup + $(ProjectName) + + + + + + + + + <_RedundantXaml Include="@(_GetCopyToOutputDirectoryItemsOutputGroupOutput->'%(RootDir)%(Directory)%(Filename).xaml')" Condition="'%(Extension)'=='.xbf'" /> + <_GetCopyToOutputDirectoryItemsOutputGroupOutput Remove="@(_RedundantXaml)" /> + <_PackagingOutputsUnexpanded Include="@(_GetCopyToOutputDirectoryItemsOutputGroupOutput)"> + GetCopyToOutputDirectoryItemsOutputGroup + $(ProjectName) + + + + + + + <_PackagingOutputsUnexpanded Include="@(_ComFilesOutputGroupOutput)"> + ComFilesOutputGroup + $(ProjectName) + + + + + + + <_PackagingOutputsUnexpanded Include="@(_CopyWinmdArtifactsOutputGroupOutput)"> + CopyWinmdArtifactsOutputGroup + $(ProjectName) + + + + + + + + <_SDKRedistRedundantXBF Include="@(_SDKRedistOutputGroupOutput->'%(RootDir)%(Directory)%(Filename).xbf')" Condition="'%(Extension)'=='.xaml'" /> + <_SDKRedistOutputGroupOutput Remove="@(_SDKRedistRedundantXBF)" /> + + + <_PackagingOutputsUnexpanded Include="@(_SDKRedistOutputGroupOutput)"> + SDKRedistOutputGroup + $(ProjectName) + + <_PackagingOutputsUnexpanded Remove="@(RemoveSdkFilesFromAppxPackage)" /> + + + <_PackagingOutputsUnexpanded Include="@(_CustomOutputGroupForPackagingOutput)" Condition="'%(_CustomOutputGroupForPackagingOutput.ReferenceSourceTarget)' == 'ExpandSDKReference'"> + SDKRedistOutputGroup + $(ProjectName) + $(AppxPriInitialPath)\%(_CustomOutputGroupForPackagingOutput.TargetPath) + + <_CustomOutputGroupForPackagingOutput Remove="@(_CustomOutputGroupForPackagingOutput)" Condition="'%(_CustomOutputGroupForPackagingOutput.ReferenceSourceTarget)' == 'ExpandSDKReference'" /> + + + + + + + <_PackagingOutputsUnexpanded Remove="@(_OptimizationInputsToRemove)" /> + + <_OutputGroupOutputs Include="@(_BuiltProjectOutputGroupOutput);@(_DebugSymbolsProjectOutputGroupOutput)" /> + <_OutputGroupOutputsNotOptimized Include="@(_OutputGroupOutputs)" Exclude="@(_OptimizationInputsToRemove)" /> + <_OutputGroupOutputsOptimized Include="@(_OutputGroupOutputs)" Exclude="@(_OutputGroupOutputsNotOptimized)" /> + <_PackagingOutputsUnexpanded Remove="@(_OutputGroupOutputsOptimized->'%(FinalOutputPath)')" /> + + + + + + + + + <_GetResolvedSDKReferencesOutput Include="@(_GetResolvedSDKReferencesOutputWithoutMetadata)"> + GetResolvedSDKReferences + $(ProjectName) + + + + + + + <_ProjectArchitectureItem Include="@(_ProjectArchitecture)"> + _GetProjectArchitecture + $(ProjectName) + + + + <_ContinueOnError Condition="'$(BuildingProject)' == 'true'">false + <_ContinueOnError Condition="'$(BuildingProject)' != 'true'">true + + + + + + + + + + <_PackagingOutputsOutsideLayout Include="@(ProjectPriFile)" /> + <_PackagingOutputsOutsideLayout Include="@(_PackagingOutputsExpanded)" /> + <_PackagingOutputsOutsideLayout Include="@(PriOutputs)" /> + <_PackagingOutputsOutsideLayout Include="@(_GetResolvedSDKReferencesOutput)" /> + + <_PackagingOutputsOutsideLayout Include="@(_PackagingOutputsFromOtherProjects)" Exclude="@(PriOutputs)" /> + <_PackagingOutputsOutsideLayout Include="@(_PackagingOutputsFromOtherMrtCoreProjects)" Exclude="@(PriOutputs)" /> + + + + <_PackagingOutputsOutsideLayout Remove="@(_OptimizationInputsToRemove);@(_OutputGroupOutputsOptimized->'%(FinalOutputPath)')" /> + + + + + + + + + + + + + + + + $(ProjectName) + LayoutOutputGroup + + + + + + + <_PublishPackagingOutputs Include="@(PackagingOutputs->HasMetadata('CopyToPublishDirectory'))" /> + <_PublishDepsJsonFiles Include="@(_PublishPackagingOutputs)" Condition="'@(_PublishPackagingOutputs)' != '' and $([System.String]::Copy(%(FileName)%(Extension)).EndsWith('.deps.json'))" /> + + + + + + <_PackagingOutputsXbfXaml Include="$([System.IO.Path]::ChangeExtension('%(PackagingOutputs.Identity)','.xaml'))" Condition="'%(Extension)' == '.xbf'" /> + + + + + + + + + + + + + + + <_NoneWithTargetPath Remove="$(AppHostIntermediatePath)" /> + + + + + false + + true + <_GenerateAppxPackageDependsOn>EnableIncludePublishItemsOutputGroup;$(_GenerateAppxPackageDependsOn) + + + + true + + + + + + + <_UnfilteredAppxPackagePayload Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.OutputGroup)' != 'GetResolvedSDKReferences' AND '%(PackagingOutputs.OutputGroup)' != '_GetProjectArchitecture' AND '%(PackagingOutputs.OutputGroup)' != 'EmbedOutputGroupForPackaging'" /> + <_UnfilteredAppxPackagePayload Include="@(ProjectPriFile)" /> + + <_XamlFilesFromProjectReferences Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.OutputGroup)'=='BuiltProjectOutputGroup' AND '%(PackagingOutputs.ReferenceSourceTarget)'=='ProjectReference' AND '%(PackagingOutputs.Extension)'=='.xaml'" /> + <_UnfilteredAppxPackagePayload Remove="@(_XamlFilesFromProjectReferences)" /> + <_TestContainerProjectCapability Include="@(ProjectCapability)" Condition="'%(ProjectCapability.Identity)' == 'TestContainer'" /> + + + + true + + + <_ProjectPriFilesFromProjectReferences Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.OutputGroup)' == 'ProjectPriFile' AND '%(PackagingOutputs.ReferenceSourceTarget)' == 'ProjectReference' AND '%(PackagingOutputs.TargetPath)' == 'resources.pri'" /> + <_UnfilteredAppxPackagePayload Remove="@(_ProjectPriFilesFromProjectReferences)" /> + + + + + <_UnfilteredAppxUploadPackagePayload Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.OutputGroup)' != 'GetResolvedSDKReferences' AND '%(PackagingOutputs.OutputGroup)' != '_GetProjectArchitecture'AND '%(PackagingOutputs.OutputGroup)' != 'EmbedOutputGroupForPackaging'" /> + <_UnfilteredAppxUploadPackagePayload Include="@(ProjectPriUploadFile)" /> + + + + + <_UnfilteredAppxPackagePayload Condition="$([System.IO.Path]::IsPathRooted('%(Identity)')) == 'true'" Include="@(AppxPackagePayload->'%(Identity)')"> + $([System.String]::Copy('%(AppxPackagePayload..TargetPath)').Replace('\\','\')) + + + <_UnfilteredAppxPackagePayload Condition="$([System.IO.Path]::IsPathRooted('%(Identity)')) == 'false'" Include="@(AppxPackagePayload->'$(MSBuildProjectDirectory)\%(Identity)')"> + $([System.String]::Copy('%(AppxPackagePayload..TargetPath)').Replace('\\','\')) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectArchitectureFromPayload Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.OutputGroup)' == '_GetProjectArchitecture' AND '%(PackagingOutputs.MSBuildSourceProjectFile)' != ''" /> + <_ProjectArchitectureFromPayload Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.OutputGroup)' == '_GetProjectArchitecture' AND '%(PackagingOutputs.MSBuildSourceProjectFile)' == ''"> + $(MSBuildProjectFullPath) + + + + + + + + + + + + + <_GenerateAppxPackageRecipeInput Include="@(FinalAppxManifest)" /> + <_GenerateAppxPackageRecipeInput Include="@(AppxPackagePayload)" /> + <_GenerateAppxPackageRecipeInput Include="$(_ProjectArchitecturesFilePath)" /> + <_GenerateAppxPackageRecipeInput Include="$(MSBuildProjectFullPath).user" Condition="Exists('$(MSBuildProjectFullPath).user')" /> + + + + + + + + + + + + + + $(AppxContentGroupMapFullPath) + + + + + + + + + + + + + + + + + + + <_RecursiveProjectArchitecture Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.OutputGroup)' == '_GetProjectArchitecture'" /> + <_RecursiveProjectArchitecture Remove="@(_RecursiveProjectArchitecture)" Condition="'%(PackagingOutputs.ProjectName)' == '$(ProjectName)'" /> + + + + + + + + + + $(PackageArchitecture) + + + + + + + + + + + <_AppxBundlePlatformsForNamingIntermediate>@(AppxBundlePlatformWithAnyCPU) + + + $(_AppxBundlePlatformsForNamingIntermediate.Replace(';','_')) + + + $(AppxBundleLastPlatform) + $(AppxBundleLastPlatform) + + + $(PlatformSpecificBundleArtifactsListDir)$(PackageArchitecture).txt + + + $(PlatformSpecificUploadBundleArtifactsListDir)$(PackageArchitecture).txt + + + Always + Auto + + + + + + GenerateAppInstallerFileForPackage; + CreateAppInstallerPublishMeta; + GeneratePublishHtmlForAppInstaller + + + + + + + %(AppInstallerPublishMeta.LogoPath) + + + + + + + + + + + + + + + + + + + + + + <_GenerateAppInstallerFileForPackageDependsOn> + $(_GenerateAppInstallerFileForPackageDependsOn); + _FindAppInstallerTemplateFile + + <_GenerateAppInstallerFileForPackageDependsOn Condition="'$(AppxPackagingComponentManifestPath)'==''"> + $(_GenerateAppInstallerFileForPackageDependsOn); + _GetAppxPackagingComponentManifestPath + + + + + $(AppxPackageOutput) + $(AppxBundleOutput) + + + + + + + + + + + + + + + + 200 + $(UapDefaultAssetScale) + {DefaultResourceLanguage} + standard + 001 + 256 + LTR + DX9 + UAP + false + true + false + embed + true + Language=$(AppxDefaultResourceQualifierUAP_Language)|Contrast=$(AppxDefaultResourceQualifierUAP_Contrast)|Scale=$(AppxDefaultResourceQualifierUAP_Scale)|HomeRegion=$(AppxDefaultResourceQualifierUAP_HomeRegion)|TargetSize=$(AppxDefaultResourceQualifierUAP_TargetSize)|LayoutDirection=$(AppxDefaultResourceQualifierUAP_LayoutDirection)|DXFeatureLevel=$(AppxDefaultResourceQualifierUAP_DxFeatureLevel)|Configuration=$(AppxDefaultResourceQualifierUAP_Configuration)|AlternateForm=$(AppxDefaultResourceQualifierUAP_AlternateForm)|Platform=$(AppxDefaultResourceQualifierUAP_Platform) + true + true + + true + false + + + $(AppxDefaultResourceQualifiers_UAP) + + + + + + + + + + + $(GenerateProjectPriFileDependsOn); + CopyFilesToOutputDirectory; + BeforeGenerateProjectPriFile; + + + $(GenerateProjectPriFileDependsOn); + _GetMakePriToolPath + + + $(GenerateProjectPriFileDependsOn); + _GetMrmSupportLibraryPath + + + $(GenerateProjectPriFileDependsOn); + GetPriOutputs; + _GetPriFilesFromPayload; + _ComputeInputPriFiles; + _GenerateProjectPriConfigurationFiles; + _GenerateProjectPriFileCore; + _AddFileReadsAndFileWritesForProjectPri; + _CalculateUseResourceIndexerApi; + _ExpandProjectPriFile; + AfterGenerateProjectPriFile + + + + + GenerateProjectPriFile; + $(PrepareMsixPackageDependsOn); + + + + + + <_XamlItemsFiltered Include="@(Page)" Condition="'%(Page.XamlRuntime)'!='Wpf'" /> + <_XamlItemsFiltered Include="@(ApplicationDefinition)" Condition="'%(ApplicationDefinition.XamlRuntime)'!='Wpf'" /> + + + true + true + true + false + + + + $(AppxManifestIdentityName) + $(TargetName) + $(TargetName) + $(AppxPriInitialPath) + resources.pri + $(ProjectPriIndexName).pri + $(TargetDir)$(AppxPackageArtifactsDir)$(ProjectPriFileName) + + + + + GenerateProjectPriFile; + $(PrepareForRunDependsOn); + + + + + + + Language|Scale|DXFeatureLevel + + <_GenMainResourcePri Condition="'$(AppxPackage)' == 'true' or '$(OutputType)'== 'WinExe' or '$(OutputType)' == 'Exe'">true + <_GenMainResourcePri Condition="'$(_GenMainResourcePri)' == ''">false + false + true + $(TargetPlatformMinVersion) + <_SupportEmbedFileResources Condition="'$(_SupportEmbedFileResources)' ==''">true + <_PriConfigXmlPath>$(IntermediateOutputPath)priconfig.xml + <_UnfilteredLayoutResfilesPath>$(IntermediateOutputPath)unfiltered.layout.resfiles + <_FilteredLayoutResfilesPath>$(IntermediateOutputPath)filtered.layout.resfiles + <_ExcludedLayoutResfilesPath>$(IntermediateOutputPath)excluded.layout.resfiles + <_ResourcesResfilesPath>$(IntermediateOutputPath)resources.resfiles + <_PriResfilesPath>$(IntermediateOutputPath)pri.resfiles + <_EmbedFileResfilePath Condition="'$(_SupportEmbedFileResources)' == 'true'">$(IntermediateOutputPath)$(AppxSubfolderWithFilesToBeEmbedded)\embed.resfiles + <_QualifiersPath>$(IntermediateOutputPath)qualifiers.txt + <_MultipleQualifiersPerDimensionFoundPath>$(IntermediateOutputPath)MultipleQualifiersPerDimensionFound.txt + + + + <_PriFilesFromPayloadRaw Include="@(PriOutputs)" Condition="'%(Extension)' == '.pri' and '%(PriOutputs.ProjectName)' != '$(ProjectName)'" /> + <_PriFilesFromPayloadRaw Include="@(PriOutputs)" Condition="'%(Extension)' == '.pri' and '%(PriOutputs.ProjectName)' == '$(ProjectName)' and '%(PriOutputs.OutputGroup)' != 'ProjectPriFile'" /> + + + + + + + + <_PriFile Include="@(_PriFilesFromPayload)" /> + <_PriFile Include="@(_PortableLibraryCreatedPriFiles)" /> + + + + + + + + + + <_LayoutFileSource Include="@(PriOutputs)" Condition="'%(PriOutputs.OutputGroup)' == 'ContentFilesProjectOutputGroup' and '%(PriOutputs.ProjectName)' == '$(ProjectName)'" /> + <_LayoutFileSource Include="@(PriOutputs)" Condition="'%(PriOutputs.OutputGroup)' == 'CustomOutputGroupForPackaging' and '%(PriOutputs.ProjectName)' == '$(ProjectName)'" /> + <_LayoutFile Include="@(_LayoutFileSource)" Exclude="@(_AppxLayoutAssetPackageFiles)" /> + <_EmbedFile Include="@(PriOutputs)" Condition="'%(PriOutputs.OutputGroup)' == 'EmbedOutputGroupForPackaging' and '%(PriOutputs.ProjectName)' == '$(ProjectName)'" /> + <_EmbedFileCopy Include="@(_EmbedFile->'$(IntermediateOutputPath)$(AppxSubfolderWithFilesToBeEmbedded)\%(TargetPath)')" /> + + <_LayoutFileXbfXaml Include="$([System.IO.Path]::ChangeExtension('%(_EmbedFile.Identity)','.xaml'))" Condition="'%(Extension)' == '.xbf'" /> + <_LayoutFile Remove="@(_LayoutFileXbfXaml)" /> + + + + + + + + + + + + + + + + + + + <_GenerateProjectPriFileCoreInput Include="$(_PriConfigXmlPath)" /> + <_GenerateProjectPriFileCoreInput Include="$(_FilteredLayoutResfilesPath)" /> + <_GenerateProjectPriFileCoreInput Include="$(_ResourcesResfilesPath)" /> + <_GenerateProjectPriFileCoreInput Include="$(_PriResfilesPath)" /> + <_GenerateProjectPriFileCoreInput Include="@(PRIResource)" /> + <_GenerateProjectPriFileCoreInput Include="@(_PriFile)" /> + <_GenerateProjectPriFileCoreInput Include="@(SourceAppxManifest)" /> + <_GenerateProjectPriFileCoreInput Include="$(_EmbedFileResfilePath)" /> + <_GenerateProjectPriFileCoreInput Include="@(_EmbedFile)" /> + <_GenerateProjectPriFileCoreInput Include="@(_AdditionalResourceResFiles)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion@CurrentVersion) + + + false + + + true + + + + + + + + + + + + + + + + + + + + + + + + <_SupportXbfAsEmbedFileResources Condition="'$(_SupportEmbedFileResources)' == 'true' and '$(DisableEmbeddedXbf)' == 'false'">true + <_SupportXbfAsEmbedFileResources Condition="'$(DisableEmbeddedXbf)' == 'true'">false + <_SupportXbfAsEmbedFileResources Condition="'$(_SupportXbfAsEmbedFileResources)' == '' AND '$(_SupportEmbedFileResources)' == 'true'">true + + + + + + GetPriOutputs; + $(GetCopyToOutputDirectoryItemsDependsOn); + + + + AddProcessedXamlFilesToCopyLocal; + $(GetCopyToOutputDirectoryItemsDependsOn); + + + + + $(GetPriOutputsDependsOn); + AssignProjectConfiguration; + _CalculateXbfSupport; + + + + + + true + true + true + true + false + + + + + + <_PriOutputsUnexpanded Include="@(_PriFilesOutputGroupOutput)"> + PriFilesOutputGroup + $(ProjectName) + + + + + + + <_PriOutputsUnexpanded Include="@(_CopyLocalFilesOutputGroupOutput)" Condition="'%(Extension)'=='.pri'"> + CopyLocalFilesOutputGroup + $(ProjectName) + + + + + + + <_PriOutputsUnexpanded Include="@(_ContentFilesProjectOutputGroupOutput)"> + ContentFilesProjectOutputGroup + $(ProjectName) + $(AppxPriInitialPath)\%(_ContentFilesProjectOutputGroupOutput.TargetPath) + + + + + + + <_PriOutputsUnexpanded Include="@(_CustomOutputGroupForPackagingOutput)" Condition="'%(Extension)' != '.xbf'"> + CustomOutputGroupForPackaging + $(ProjectName) + $(AppxPriInitialPath)\%(_CustomOutputGroupForPackagingOutput.TargetPath) + + <_PriOutputsUnexpanded Include="@(_CustomOutputGroupForPackagingOutput)" Condition="'%(Extension)' == '.xbf' AND '$(_SupportXbfAsEmbedFileResources)' != 'true'"> + CustomOutputGroupForPackaging + $(ProjectName) + $(AppxPriInitialPath)\%(_CustomOutputGroupForPackagingOutput.TargetPath) + + <_PriOutputsUnexpanded Include="@(_CustomOutputGroupForPackagingOutput)" Condition="'%(Extension)' == '.xbf' AND '$(_SupportXbfAsEmbedFileResources)' == 'true'"> + EmbedOutputGroupForPackaging + $(ProjectName) + $(AppxPriInitialPath)\%(_CustomOutputGroupForPackagingOutput.TargetPath) + + + + + + + + ProjectPriFile + $(ProjectName) + $(ProjectPriFileName) + + + + + ProjectPriUploadFile + $(ProjectName) + $(ProjectPriFileName) + + + + <_ContinueOnError Condition="'$(BuildingProject)' == 'true'">false + <_ContinueOnError Condition="'$(BuildingProject)' != 'true'">true + + + + + + + + + + + + + + + + + + + <_PriOutputsXbfXaml Include="$([System.IO.Path]::ChangeExtension('%(PriOutputs.Identity)','.xaml'))" Condition="'%(Extension)' == '.xbf'" /> + + + + + + + + <_PriInputs Include="@(PriOutputs)" /> + + <_SourceItemsToCopyToOutputDirectoryRemoved Include="@(PriOutputs)" Condition="'%(PriOutputs.ProjectName)'!='$(ProjectName)'" /> + <_SourceItemsToCopyToOutputDirectory Remove="@(_SourceItemsToCopyToOutputDirectoryRemoved)" /> + + <_SourceItemsToCopyToOutputDirectory Include="@(_SourceItemsToCopyToOutputDirectoryRemoved)" Condition="'%(_SourceItemsToCopyToOutputDirectoryRemoved.OutputGroup)'=='ContentFilesProjectOutputGroup' or '%(_SourceItemsToCopyToOutputDirectoryRemoved.OutputGroup)'=='CustomOutputGroupForPackaging'" KeepMetadata="false"> + %(TargetPath) + PreserveNewest + + + + + + + + + + + + + + + + + + $(ProjectPriFileName) + PreserveNewest + + + + + + + + + + + + + + + + + <_MicrosoftBuildMsixProjRulesDir>$(MSBuildThisFileDirectory)Rules\ + + + + $(_MicrosoftBuildMsixProjRulesDir) + + + + + $(_MicrosoftBuildMsixProjRulesDir)$(LangName) + + $(_MicrosoftBuildMsixProjRulesDir)zh-Hans + $(_MicrosoftBuildMsixProjRulesDir)zh-Hant + + $(_MicrosoftBuildMsixProjRulesDir)$(LangName.Split('-')[0]) + + $(MicrosoftBuildMsixXamlNeutralResourcesDirectory) + + + $(MicrosoftBuildMsixXamlResourcesDirectory)\ + + + + + + + + + + + + Project + + + Project + + + + + + + + + + + + + + win10-x64 + + win10-x86 + win10-$(Platform) + + + + uap10.0.17763 + uap10.0.18362 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + $(ProjectDir)Properties\launchSettings.json + .*"commandName" *: *"MsixPackage".* + + + + + + + + + + + + + + + + + + + false + + false + + false + $(MSBuildThisFileDirectory)\..\tools\mt.exe + $(WindowsSDKBuildToolsBinVersionedArchFolder)\mt.exe + $(WindowsSdkDir)bin\$(Platform)\mt.exe + mt.exe + + + $(GetCopyToOutputDirectoryItemsDependsOn); + AddMicrosoftWindowsAppSDKPayloadFiles + + true + true + + $([MSBuild]::NormalizeDirectory('$(MSBuildProjectDirectory)','$(IntermediateOutputPath)')) + $(IntermediateOutputPath) + + + + + + + + + + + $(ApplicationManifest) + @(Manifest) + $(SelfContainedIntermediateOutputPath)Manifests\app.manifest + + + + + + + + $(SelfContainedIntermediateOutputPath)MsixContent + $(MicrosoftWindowsAppSDKMsixContent)\AppxManifest.xml + Invalid + x86 + x86 + x64 + arm64 + arm64ec + + + x64 + x86 + arm64 + arm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +"; + var sb = new StringBuilder(); + sb.AppendLine(headerF); + + var dllFileFormat = RedirectDlls ? + @" " : + @" "; + + if (!string.IsNullOrEmpty(InAppxManifest)) + { + XmlDocument doc = new XmlDocument(); + doc.Load(InAppxManifest); + var nsmgr = new XmlNamespaceManager(doc.NameTable); + nsmgr.AddNamespace("m", "http://schemas.microsoft.com/appx/manifest/foundation/windows10"); + + // Add InProcessServer elements to the generated appxmanifest + var xQuery = "./m:Package/m:Extensions/m:Extension/m:InProcessServer"; + var dllFiles = (from di in (new DirectoryInfo(MsixContentDir).EnumerateFiles("*.dll")) select di.Name).ToList(); + foreach (XmlNode winRTFactory in doc.SelectNodes(xQuery, nsmgr)) + { + var dllFileNode = winRTFactory.SelectSingleNode("./m:Path", nsmgr); + var dllFile = dllFileNode.InnerText; + var typesNames = winRTFactory.SelectNodes("./m:ActivatableClass", nsmgr).OfType(); + sb.AppendFormat(dllFileFormat, dllFile); + sb.AppendLine(); + foreach (var typeNode in typesNames) + { + var attribs = typeNode.Attributes.OfType().ToArray(); + var typeName = attribs + .OfType() + .SingleOrDefault(x => x.Name == "ActivatableClassId") + .InnerText; + var xmlEntryFormat = +@" "; + sb.AppendFormat(xmlEntryFormat, typeName); + sb.AppendLine(); + dllFiles.RemoveAll(e => e.Equals(dllFile, StringComparison.OrdinalIgnoreCase)); + } + sb.AppendLine(@" "); + } + if(RedirectDlls) + { + foreach (var dllFile in dllFiles) + { + sb.AppendFormat(dllFileFormat, dllFile); + sb.AppendLine(@""); + } + } + // Add ProxyStub elements to the generated appxmanifest + xQuery = "./m:Package/m:Extensions/m:Extension/m:ProxyStub"; + dllFiles = (from di in (new DirectoryInfo(MsixContentDir).EnumerateFiles("*.dll")) select di.Name).ToList(); + foreach (XmlNode proxystub in doc.SelectNodes(xQuery, nsmgr)) + { + var classIDAdded = false; + + var dllFileNode = proxystub.SelectSingleNode("./m:Path", nsmgr); + var dllFile = dllFileNode.InnerText; + // exclude PushNotificationsLongRunningTask, which requires the Singleton (which is unavailable for self-contained apps) + // exclude Widgets entries unless/until they have been tested and verified by the Widgets team + if (dllFile == "PushNotificationsLongRunningTask.ProxyStub.dll" || dllFile == "Microsoft.Windows.Widgets.dll") + { + continue; + } + var typesNamesForProxy = proxystub.SelectNodes("./m:Interface", nsmgr).OfType(); + sb.AppendFormat(dllFileFormat, dllFile); + sb.AppendLine(); + foreach (var typeNode in typesNamesForProxy) + { + if(!classIDAdded) + { + var classIdAttribute = proxystub.Attributes.OfType().ToArray(); + var classID = classIdAttribute + .OfType() + .SingleOrDefault(x => x.Name == "ClassId") + .InnerText; + + var xmlEntryFormat = @" "; + sb.AppendFormat(xmlEntryFormat, classID); + classIDAdded = true; + } + var attribs = typeNode.Attributes.OfType().ToArray(); + var typeID = attribs + .OfType() + .SingleOrDefault(x => x.Name == "InterfaceId") + .InnerText; + var typeNames = attribs + .OfType() + .SingleOrDefault(x => x.Name == "Name") + .InnerText; + var xmlEntryFormatForStubs = @" "; + sb.AppendFormat(xmlEntryFormatForStubs, typeNames, typeID); + sb.AppendLine(); + dllFiles.RemoveAll(e => e.Equals(dllFile, StringComparison.OrdinalIgnoreCase)); + } + sb.AppendLine(@" "); + } + if(RedirectDlls) + { + foreach (var dllFile in dllFiles) + { + sb.AppendFormat(dllFileFormat, dllFile); + sb.AppendLine(@""); + } + } + } + sb.AppendLine(@""); + var manifestContent = sb.ToString(); + File.WriteAllText(OutAppManifest, manifestContent, Encoding.UTF8); +]]> + + + + + + $(SelfContainedIntermediateOutputPath)Manifests\WindowsAppSDK.manifest + false + true + + + + + + + + + + + + + + + <_TemporaryFilteredWapProjOutput Include="@(_FilteredNonWapProjProjectOutput)" /> + <_FilteredNonWapProjProjectOutput Remove="@(_TemporaryFilteredWapProjOutput)" /> + <_FilteredNonWapProjProjectOutput Include="@(_TemporaryFilteredWapProjOutput)"> + + + + + <_DetailedPriXml Remove="@(_DetailedPriXml)" /> + + + + + + <_SavedProjectReferenceWithConfiguration Include="@(ProjectReferenceWithConfiguration)"> + $(Configuration) + $(Platform) + + + + + + + + <_AppxWinmdFilesToHarvest Remove="@(_AppxWinmdFilesToHarvest)" /> + + + + + + + %(PreprocessorDefinitions);MICROSOFT_WINDOWSAPPSDK_SELFCONTAINED=1 + + + + + $(DefineConstants);MICROSOFT_WINDOWSAPPSDK_SELFCONTAINED + + + + + + + + %(PreprocessorDefinitions);MICROSOFT_WINDOWSAPPSDK_BOOTSTRAP_AUTO_INITIALIZE=1 + + + + + + $(DefineConstants);MICROSOFT_WINDOWSAPPSDK_BOOTSTRAP_AUTO_INITIALIZE + + + + + + + + x86 + $(Platform) + $([MSBuild]::NormalizeDirectory('$(ProjectDir)','$(OutDir)'))AppxContent + + + + + + + + + + + + + + + + + + + + + + $(ResolveReferencesDependsOn);WindowsAppSDKVerifyCsWinRtVersions + + + + + <_TargetFrameworkRequired>6.0 + <_TargetFrameworkCompatible Condition="$([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '$(_TargetFrameworkRequired)'))">True + + + <_WindowsSdkPackage Include="$(WindowsSdkPackageVersion)" Condition="'$(WindowsSdkPackageVersion)' != ''"> + $(WindowsSdkPackageVersion) + 10.0.$([System.Version]::Parse("$(WindowsSdkPackageVersion.Split('-')[0])").Build).38 + + <_WindowsSdkPackage Include="@(ResolvedFrameworkReference)" Condition="'$(WindowsSdkPackageVersion)' == '' and '@(ResolvedFrameworkReference)' != '' and ('%(Identity)' == 'Microsoft.Windows.SDK.NET.Ref' or '%(Identity)' == 'Microsoft.Windows.SDK.NET.Ref.Windows')"> + %(ResolvedFrameworkReference.TargetingPackVersion) + 10.0.$([System.Version]::Parse("%(ResolvedFrameworkReference.TargetingPackVersion)").Build).38 + + <_WindowsSdkCompatible Include="@(_WindowsSdkPackage)" Condition="'@(_WindowsSdkPackage)' != '' and $([MSBuild]::VersionGreaterThanOrEquals(%(Referenced), %(Required)))" /> + + + <_WindowsSdkPackageRequired>@(_WindowsSdkPackage->'%(Required)') + + + + + + + + + + + + <_Microsoft_Extensions_OptionsAnalyzer Include="@(Analyzer)" Condition="'%(Analyzer.NuGetPackageId)' == 'Microsoft.Extensions.Options'" /> + + + + + + + + + + + + + + + + + + + <_Microsoft_Extensions_Logging_AbstractionsAnalyzer Include="@(Analyzer)" Condition="'%(Analyzer.NuGetPackageId)' == 'Microsoft.Extensions.Logging.Abstractions'" /> + + + + + + + + + + + + + + + + + + true + + + + + $(AfterMicrosoftNETSdkTargets);$(MSBuildThisFileDirectory)Microsoft.Maui.Resizetizer.After.targets + + + + + + x64 + x86 + arm64 + + + + x86 + $(Platform) + + + + true + + + + + + + + + + + + + + true + + + + + true + + + + $(AfterMicrosoftNETSdkTargets);$(MSBuildThisFileDirectory)Microsoft.Maui.Core.After.targets + + + + + + + + true + + + + + <_IsHotRestartDefined>$([System.Text.RegularExpressions.Regex]::IsMatch('$(DefineConstants.Trim())', '(^|;)HOTRESTART($|;)')) + HOTRESTART;$(DefineConstants) + True + + + + false + true + + + + + + + + + + + + + + + + + + + + Platforms\ + $([MSBuild]::EnsureTrailingSlash('$(PlatformsProjectFolder)')) + + <_KeepLaunchProfiles>true + + false + $(PlatformsProjectFolder)Android\ + $([MSBuild]::EnsureTrailingSlash('$(AndroidProjectFolder)')) + + false + $(PlatformsProjectFolder)iOS\ + $([MSBuild]::EnsureTrailingSlash('$(iOSProjectFolder)')) + + false + $(PlatformsProjectFolder)MacCatalyst\ + $([MSBuild]::EnsureTrailingSlash('$(MacCatalystProjectFolder)')) + + false + $(PlatformsProjectFolder)Windows\ + $([MSBuild]::EnsureTrailingSlash('$(WindowsProjectFolder)')) + + false + $(PlatformsProjectFolder)Tizen\ + $([MSBuild]::EnsureTrailingSlash('$(TizenProjectFolder)')) + + + + + + + + + + $(AndroidProjectFolder)AndroidManifest.xml + $(AndroidProjectFolder)Resources + $(AndroidProjectFolder)Assets + + + $(iOSProjectFolder)Resources + $(iOSProjectFolder)Entitlements.plist + <_SingleProjectiOSExcludes>$(iOSProjectFolder)/**/.*/** + + + $(MacCatalystProjectFolder)Resources + $(MacCatalystProjectFolder)Entitlements.plist + <_SingleProjectMacCatalystExcludes>$(MacCatalystProjectFolder)/**/.*/** + + + $(WindowsProjectFolder)app.manifest + $(WindowsProjectFolder)Package.appxmanifest + False + False + <_SingleProjectWindowsExcludes>$(WindowsProjectFolder)/**/.*/** + + + $(TizenProjectFolder)tizen-manifest.xml + $(TizenProjectFolder)res + $(TizenProjectFolder)shared + + + + + + $(AfterMicrosoftNETSdkTargets);$(MSBuildThisFileDirectory)Microsoft.Maui.Controls.Build.Tasks.After.targets + + + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + grpc_csharp_plugin + + + + + File;BrowseObject + + + + + Both + + + + + + + $(GRPC_PROTOC_PLUGIN) + $(Protobuf_PackagedToolsPath)\$(Protobuf_ToolsOs)_$(Protobuf_ToolsCpu)\$(gRPC_PluginFileName).exe + $(Protobuf_PackagedToolsPath)/$(Protobuf_ToolsOs)_$(Protobuf_ToolsCpu)/$(gRPC_PluginFileName) + + + + + + $(gRPC_PluginFullPath) + %(Protobuf_Compile.OutputDir) + <_GrpcOutputOptions Condition=" '%(Protobuf_Compile.Access)' == 'Internal' ">%(Protobuf_Compile._GrpcOutputOptions);internal_access + + + <_GrpcOutputOptions>%(Protobuf_Compile._GrpcOutputOptions);no_server + + + <_GrpcOutputOptions>%(Protobuf_Compile._GrpcOutputOptions);no_client + + + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + CSharp + + true + + <_Protobuf_MsBuildAssembly Condition=" '$(_Protobuf_MsBuildAssembly)' == '' and '$(MSBuildRuntimeType)' == 'Core' ">netstandard1.3\Protobuf.MSBuild.dll + <_Protobuf_MsBuildAssembly Condition=" '$(_Protobuf_MsBuildAssembly)' == '' and '$(MSBuildRuntimeType)' != 'Core' ">net45\Protobuf.MSBuild.dll + + + + + + + $(IntermediateOutputPath) + $(Protobuf_IntermediatePath) + $(Protobuf_IntermediatePath) + + + + Public + True + + True + $(Protobuf_OutputPath) + MSBuild:Compile + + + + + File;BrowseObject + + + + + + false + + + + + + + + + + + + + + + $(PROTOBUF_TOOLS_OS) + $(PROTOBUF_TOOLS_CPU) + $(PROTOBUF_PROTOC) + + $(_Protobuf_ToolsOs) + $(_Protobuf_ToolsCpu) + $(Protobuf_PackagedToolsPath)\$(Protobuf_ToolsOs)_$(Protobuf_ToolsCpu)\protoc.exe + $(Protobuf_PackagedToolsPath)/$(Protobuf_ToolsOs)_$(Protobuf_ToolsCpu)/protoc + + + + + + + + + + + + + + + + + + + + + + + . + + + + %(RelativeDir) + $(Protobuf_ProtoRoot) + + + + + + + + + + + + + + $([MSBuild]::Unescape(%(Identity))) + + + + + + + + + + + + + + + + + + + + + + + + <_Protobuf_CodeCompile Include="@(Protobuf_ExpectedOutputs->Distinct())" Condition=" '%(Source)' != '' and '@(Protobuf_Compile->WithMetadataValue('CompileOutputs', 'true'))' != '' " /> + + + + + + + + + + + $([MSBuild]::Unescape(%(Identity))) + + + + + + + + + + + + + + + <_Protobuf_OutOfDateProto Remove="@(_Protobuf_OutOfDateProto->WithMetadataValue('_Exec',''))" /> + + + + + + <_Protobuf_OutOfDateProto Include="@(Protobuf_Compile)" Condition=" '%(Source)' != '' and '@(Protobuf_ExpectedOutputs)' == '' "> + <_Exec>true + + + + + + + + + + + + + + + + <_OutputOptions Condition=" '%(Protobuf_Compile.Access)' == 'Internal' ">%(Protobuf_Compile._OutputOptions);internal_access + + + + + + + + + + + <_Protobuf_OutOfDateProto> + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_Protobuf_Protodep Include="$(Protobuf_DepFilesPath)*.protodep" /> + + + + + + + + + + + + + + + + true + + + + <_DirectoryBuildTargetsFile Condition="'$(_DirectoryBuildTargetsFile)' == ''">Directory.Build.targets + <_DirectoryBuildTargetsBasePath Condition="'$(_DirectoryBuildTargetsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), '$(_DirectoryBuildTargetsFile)')) + $([System.IO.Path]::Combine('$(_DirectoryBuildTargetsBasePath)', '$(_DirectoryBuildTargetsFile)')) + + + + + + + + + +// <autogenerated /> +using System%3b +using System.Reflection%3b +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute("$(TargetFrameworkMoniker)", FrameworkDisplayName = "$(TargetFrameworkMonikerDisplayName)")] + + + + + true + + true + true + + $([System.Globalization.CultureInfo]::CurrentUICulture.Name) + + + + + <_ExplicitReference Include="$(FrameworkPathOverride)\mscorlib.dll" /> + + + + + + + + + + + TargetFramework + TargetFrameworks + + + true + + + + + + + + + <_MainReferenceTargetForBuild Condition="'$(BuildProjectReferences)' == '' or '$(BuildProjectReferences)' == 'true'">.projectReferenceTargetsOrDefaultTargets + <_MainReferenceTargetForBuild Condition="'$(_MainReferenceTargetForBuild)' == ''">GetTargetPath + $(_MainReferenceTargetForBuild);GetNativeManifest;$(_RecursiveTargetForContentCopying);$(ProjectReferenceTargetsForBuild) + + <_MainReferenceTargetForPublish Condition="'$(NoBuild)' == 'true'">GetTargetPath + <_MainReferenceTargetForPublish Condition="'$(NoBuild)' != 'true'">$(_MainReferenceTargetForBuild) + GetTargetFrameworks;$(_MainReferenceTargetForPublish);GetNativeManifest;GetCopyToPublishDirectoryItems;$(ProjectReferenceTargetsForPublish) + + $(ProjectReferenceTargetsForBuild);$(ProjectReferenceTargetsForPublish) + $(ProjectReferenceTargetsForRebuild);$(ProjectReferenceTargetsForPublish) + GetCopyToPublishDirectoryItems;$(ProjectReferenceTargetsForGetCopyToPublishDirectoryItems) + + + .default;$(ProjectReferenceTargetsForBuild) + + + Clean;$(ProjectReferenceTargetsForClean) + $(ProjectReferenceTargetsForClean);$(ProjectReferenceTargetsForBuild);$(ProjectReferenceTargetsForRebuild) + + + + + + + + + + + + + + + + + + + + + + + + + + $(MSBuildThisFileDirectory)..\tools\ + net10.0 + net472 + $(MicrosoftNETBuildTasksDirectoryRoot)$(MicrosoftNETBuildTasksTFM)\ + $(MicrosoftNETBuildTasksDirectory)Microsoft.NET.Build.Tasks.dll + + Microsoft.NETCore.App;NETStandard.Library + + + + <_IsExecutable Condition="'$(OutputType)' == 'Exe' or '$(OutputType)'=='WinExe'">true + $(_IsExecutable) + + + + netcoreapp2.2 + + + Preview + + + + + + + $(NuGetPackageRoot)\microsoft.net.sdk.compilers.toolset\$(NETCoreSdkVersion) + $(RoslynTargetsPath)\Microsoft.Build.Tasks.CodeAnalysis.dll + <_NeedToDownloadMicrosoftNetSdkCompilersToolsetPackage>true + <_MicrosoftNetSdkCompilersToolsetPackageRootEmpty Condition="'$(NuGetPackageRoot)' == ''">true + + + + true + + + + + + + + $(MSBuildProjectExtensionsPath)/project.assets.json + $([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(ProjectAssetsFile))) + + $(IntermediateOutputPath)$(MSBuildProjectName).assets.cache + $([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(ProjectAssetsCacheFile))) + + false + + false + + true + $(IntermediateOutputPath)NuGet\ + true + $(TargetPlatformIdentifier),Version=v$([System.Version]::Parse('$(TargetPlatformMinVersion)').ToString(3)) + $(TargetFrameworkMoniker) + true + + false + + true + + + + <_NugetTargetMonikerAndRID Condition="'$(RuntimeIdentifier)' == ''">$(NuGetTargetMoniker) + <_NugetTargetMonikerAndRID Condition="'$(RuntimeIdentifier)' != ''">$(NuGetTargetMoniker)/$(RuntimeIdentifier) + + + + + + + + + $(ResolveAssemblyReferencesDependsOn); + ResolvePackageDependenciesForBuild; + _HandlePackageFileConflicts; + + + ResolvePackageDependenciesForBuild; + _HandlePackageFileConflicts; + $(PrepareResourcesDependsOn) + + + + + + $(RootNamespace) + + + $(AssemblyName) + + + $(MSBuildProjectDirectory) + + + $(TargetFileName) + + + $(MSBuildProjectFile) + + + + + + true + + + + + + ResolveLockFileReferences; + ResolveLockFileAnalyzers; + ResolveLockFileCopyLocalFiles; + ResolveRuntimePackAssets; + RunProduceContentAssets; + IncludeTransitiveProjectReferences + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_RoslynApiVersion>$([System.Version]::Parse(%(_CodeAnalysisIdentity.Version)).Major).$([System.Version]::Parse(%(_CodeAnalysisIdentity.Version)).Minor) + roslyn$(_RoslynApiVersion) + + + + + + false + + + true + + + true + + + + true + + + <_PackAsToolShimRuntimeIdentifiers Condition="@(_PackAsToolShimRuntimeIdentifiers) ==''" Include="$(PackAsToolShimRuntimeIdentifiers)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_NativeRestoredAppHostNETCore Include="@(NativeCopyLocalItems)" Condition="'%(NativeCopyLocalItems.FileName)%(NativeCopyLocalItems.Extension)' == '$(_DotNetAppHostExecutableName)'" /> + + + <_ApphostsForShimRuntimeIdentifiers Include="@(_ApphostsForShimRuntimeIdentifiersResolvePackageAssets)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ResolvedCopyLocalBuildAssets Include="@(RuntimeCopyLocalItems)" Condition="'%(RuntimeCopyLocalItems.CopyLocal)' == 'true'" /> + <_ResolvedCopyLocalBuildAssets Include="@(ResourceCopyLocalItems)" Condition="'%(ResourceCopyLocalItems.CopyLocal)' == 'true'" /> + + <_ResolvedCopyLocalBuildAssets Include="@(NativeCopyLocalItems)" Exclude="@(_NativeRestoredAppHostNETCore)" Condition="'%(NativeCopyLocalItems.CopyLocal)' == 'true'" /> + <_ResolvedCopyLocalBuildAssets Include="@(RuntimeTargetsCopyLocalItems)" Condition="'%(RuntimeTargetsCopyLocalItems.CopyLocal)' == 'true'" /> + + + + + + + + + + + + + + + false + true + true + true + true + + + + + $(DefaultItemExcludes);$(BaseOutputPath)/** + + $(DefaultItemExcludes);$(BaseIntermediateOutputPath)/** + + $(DefaultItemExcludes);**/*.user + $(DefaultItemExcludes);**/*.*proj + $(DefaultItemExcludes);**/*.sln + $(DefaultItemExcludes);**/*.slnx + $(DefaultItemExcludes);**/*.vssscc + $(DefaultItemExcludes);**/.DS_Store + + $(DefaultExcludesInProjectFolder);$(DefaultItemExcludesInProjectFolder);**/.*/** + + + + + 1.6.1 + + 2.0.3 + + + + + + true + false + <_TargetLatestRuntimePatchIsDefault>true + + + true + + + + + all + true + + + all + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(_TargetFrameworkVersionWithoutV) + + + + + + + + https://aka.ms/sdkimplicitrefs + + + + + + + + + + + <_PackageReferenceToAdd Remove="@(_PackageReferenceToAdd)" /> + + + + false + + + + + + https://aka.ms/sdkimplicititems + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_WindowsDesktopTransitiveFrameworkReference Include="@(TransitiveFrameworkReference)" Condition="'%(Identity)' == 'Microsoft.WindowsDesktop.App' Or '%(Identity)' == 'Microsoft.WindowsDesktop.App.WPF' Or '%(Identity)' == 'Microsoft.WindowsDesktop.App.WindowsForms'" /> + + + + + + + + + + + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + $([MSBuild]::EnsureTrailingSlash(%(LinkBase))) + %(LinkBase)%(RecursiveDir)%(Filename)%(Extension) + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + $(ResolveAssemblyReferencesDependsOn); + ResolveTargetingPackAssets; + + + + + + + + + + + + + + + + + + + + + + + $(NetCoreRoot)\sdk\$(NETCoreSdkVersion)\PrunePackageData\ + $(NetCoreTargetingPackRoot) + false + + + + + + + + + + + + + + + + + true + true + false + + + <_NuGetRestoreSupported Condition="('$(Language)' == 'C++' and '$(_EnablePackageReferencesInVCProjects)' != 'true')">false + + + <_PackAsToolShimRuntimeIdentifiers Condition="@(_PackAsToolShimRuntimeIdentifiers) ==''" Include="$(PackAsToolShimRuntimeIdentifiers)" /> + + + + + + + + + + + + + + + $(RuntimeIdentifier) + $(DefaultAppHostRuntimeIdentifier) + + + + + + + + + + + true + true + false + + + + [%(_PackageToDownload.Version)] + + + + + + + + <_ImplicitPackageReference Remove="@(PackageReference)" /> + + + + + + + + + + + + + + + + + + %(ResolvedTargetingPack.PackageDirectory) + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ApphostsForShimRuntimeIdentifiers Include="%(_ApphostsForShimRuntimeIdentifiersGetPackageDirectory.PackageDirectory)\%(_ApphostsForShimRuntimeIdentifiersGetPackageDirectory.PathInPackage)"> + %(_ApphostsForShimRuntimeIdentifiersGetPackageDirectory.RuntimeIdentifier) + + + + + %(ResolvedAppHostPack.PackageDirectory)\%(ResolvedAppHostPack.PathInPackage) + + + + @(ResolvedAppHostPack->'%(Path)') + + + + %(ResolvedSingleFileHostPack.PackageDirectory)\%(ResolvedSingleFileHostPack.PathInPackage) + + + + @(ResolvedSingleFileHostPack->'%(Path)') + + + + %(ResolvedComHostPack.PackageDirectory)\%(ResolvedComHostPack.PathInPackage) + + + + @(ResolvedComHostPack->'%(Path)') + + + + %(ResolvedIjwHostPack.PackageDirectory)\%(ResolvedIjwHostPack.PathInPackage) + + + + @(ResolvedIjwHostPack->'%(Path)') + + + + + + + + + + + + + + + true + false + + + + + + + + + + + + $([MSBuild]::Unescape($(PackageConflictPreferredPackages))) + + + + + + + + + + + + + true + true + + + + $(InterceptorsPreviewNamespaces);Microsoft.AspNetCore.Http.Generated + + $(InterceptorsPreviewNamespaces);Microsoft.Extensions.Configuration.Binder.SourceGeneration + + $(InterceptorsPreviewNamespaces);Microsoft.Extensions.Validation.Generated + + + + + + + + + + + + + + + + + + <_ExistingReferenceAssembliesPackageReference Include="@(PackageReference)" Condition="'%(PackageReference.Identity)' == 'Microsoft.NETFramework.ReferenceAssemblies'" /> + + + + + + + + + + + + + + + + + + <_Parameter1>$(UserSecretsId.Trim()) + + + + + + + + + + $(_IsNETCoreOrNETStandard) + + + true + false + true + $(MSBuildProjectDirectory)/runtimeconfig.template.json + true + true + <_GenerateRuntimeConfigurationPropertyInputsCache Condition="'$(_GenerateRuntimeConfigurationPropertyInputsCache)' == ''">$(IntermediateOutputPath)$(MSBuildProjectName).genruntimeconfig.cache + <_GenerateRuntimeConfigurationPropertyInputsCache>$([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(_GenerateRuntimeConfigurationPropertyInputsCache))) + <_GeneratePublishDependencyFilePropertyInputsCache Condition="'$(_GeneratePublishDependencyFilePropertyInputsCache)' == ''">$(IntermediateOutputPath)$(MSBuildProjectName).genpublishdeps.cache + <_GeneratePublishDependencyFilePropertyInputsCache>$([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(_GeneratePublishDependencyFilePropertyInputsCache))) + <_GenerateSingleFileBundlePropertyInputsCache Condition="'$(_GenerateSingleFileBundlePropertyInputsCache)' == ''">$(IntermediateOutputPath)$(MSBuildProjectName).genbundle.cache + <_GenerateSingleFileBundlePropertyInputsCache>$([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(_GenerateSingleFileBundlePropertyInputsCache))) + + + + <_UseRidGraphWasSpecified Condition="'$(UseRidGraph)' != ''">true + + + false + true + + + $(BundledRuntimeIdentifierGraphFile) + + $([System.IO.Path]::GetDirectoryName($(BundledRuntimeIdentifierGraphFile)))/PortableRuntimeIdentifierGraph.json + + + + + + + + + + + true + + + false + + + $(AssemblyName).deps.json + $(TargetDir)$(ProjectDepsFileName) + $(AssemblyName).runtimeconfig.json + $(TargetDir)$(ProjectRuntimeConfigFileName) + $(TargetDir)$(AssemblyName).runtimeconfig.dev.json + true + true + + + + + + true + true + + + + CurrentArchitecture + CurrentRuntime + + + <_NativeLibraryPrefix Condition="'$(_NativeLibraryPrefix)' == '' and !$(RuntimeIdentifier.StartsWith('win'))">lib + <_NativeLibraryExtension Condition="'$(_NativeLibraryExtension)' == '' and $(RuntimeIdentifier.StartsWith('win'))">.dll + <_NativeLibraryExtension Condition="'$(_NativeLibraryExtension)' == '' and $(RuntimeIdentifier.StartsWith('osx'))">.dylib + <_NativeLibraryExtension Condition="'$(_NativeLibraryExtension)' == ''">.so + <_NativeExecutableExtension Condition="'$(_NativeExecutableExtension)' == '' and ($(RuntimeIdentifier.StartsWith('win')) or $(DefaultAppHostRuntimeIdentifier.StartsWith('win')))">.exe + <_ComHostLibraryExtension Condition="'$(_ComHostLibraryExtension)' == '' and ($(RuntimeIdentifier.StartsWith('win')) or $(DefaultAppHostRuntimeIdentifier.StartsWith('win')))">.dll + <_IjwHostLibraryExtension Condition="'$(_IjwHostLibraryExtension)' == '' and ($(RuntimeIdentifier.StartsWith('win')) or $(DefaultAppHostRuntimeIdentifier.StartsWith('win')))">.dll + <_DotNetHostExecutableName>dotnet$(_NativeExecutableExtension) + <_DotNetAppHostExecutableNameWithoutExtension>apphost + <_DotNetAppHostExecutableName>$(_DotNetAppHostExecutableNameWithoutExtension)$(_NativeExecutableExtension) + <_DotNetSingleFileHostExecutableNameWithoutExtension>singlefilehost + <_DotNetComHostLibraryNameWithoutExtension>comhost + <_DotNetComHostLibraryName>$(_DotNetComHostLibraryNameWithoutExtension)$(_ComHostLibraryExtension) + <_DotNetIjwHostLibraryNameWithoutExtension>Ijwhost + <_DotNetIjwHostLibraryName>$(_DotNetIjwHostLibraryNameWithoutExtension)$(_IjwHostLibraryExtension) + <_DotNetHostPolicyLibraryName>$(_NativeLibraryPrefix)hostpolicy$(_NativeLibraryExtension) + <_DotNetHostFxrLibraryName>$(_NativeLibraryPrefix)hostfxr$(_NativeLibraryExtension) + + + + + + <_ExcludeFromPublishPackageReference Include="@(PackageReference)" Condition="('%(PackageReference.Publish)' == 'false')" /> + + + + + + Microsoft.NETCore.App + + + + + <_DefaultUserProfileRuntimeStorePath>$(HOME) + <_DefaultUserProfileRuntimeStorePath Condition="$([MSBuild]::IsOSPlatform(`Windows`))">$(USERPROFILE) + <_DefaultUserProfileRuntimeStorePath>$([System.IO.Path]::Combine($(_DefaultUserProfileRuntimeStorePath), '.dotnet', 'store')) + $(_DefaultUserProfileRuntimeStorePath) + + + true + + + true + + + true + + + + + + + false + true + + + + true + + + true + + + $(AvailablePlatforms),ARM32 + + + $(AvailablePlatforms),ARM64 + + + $(AvailablePlatforms),ARM64 + + + + false + + + + true + + + + + <_ProjectTypeRequiresBinaryFormatter Condition="'$(UseWindowsForms)' == 'true' AND $([MSBuild]::VersionLessThanOrEquals($(TargetFrameworkVersion), '8.0'))">true + <_ProjectTypeRequiresBinaryFormatter Condition="'$(UseWPF)' == 'true' AND $([MSBuild]::VersionLessThanOrEquals($(TargetFrameworkVersion), '8.0'))">true + + <_BinaryFormatterObsoleteAsError>true + + false + + + + _CheckForBuildWithNoBuild; + $(CoreBuildDependsOn); + GenerateBuildDependencyFile; + GenerateBuildRuntimeConfigurationFiles + + + + + _SdkBeforeClean; + $(CoreCleanDependsOn) + + + + + _SdkBeforeRebuild; + $(RebuildDependsOn) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.0.0 + + + + + + + + + + + + + <_ValidRuntimeIdentifierPlatformsForAssets Include="@(_KnownRuntimeIdentiferPlatforms)" /> + + <_ValidRuntimeIdentifierPlatformsForAssets Include="@(_KnownRuntimeIdentifierPlatformsForTargetFramework)" Exclude="@(_ExcludedKnownRuntimeIdentiferPlatforms)" /> + + + + + + + + + + + + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="@(AdditionalProbingPath->'%(Identity)')" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(EnableDynamicLoading)" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(RollForward)" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="@(RuntimeHostConfigurationOption->'%(Identity)%(Value)')" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(RuntimeIdentifier)" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(SelfContained)" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(TargetFramework)" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(UserRuntimeConfig)" /> + <_GenerateRuntimeConfigurationPropertyInputsCacheToHash Include="$(_WriteIncludedFrameworks)" /> + + + + + + + + + + + + + <_IsRollForwardSupported Condition="'$(_TargetFrameworkVersionWithoutV)' >= '3.0'">true + LatestMinor + + + + + <_WriteIncludedFrameworks Condition="'$(SelfContained)' == 'true' and '$(_TargetFrameworkVersionWithoutV)' >= '3.1'">true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_CleaningWithoutRebuilding>true + false + + + + + <_CleaningWithoutRebuilding>false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(CompileDependsOn); + _CreateAppHost; + _CreateComHost; + _GetIjwHostPaths; + + + + + + <_UseWindowsGraphicalUserInterface Condition="($(RuntimeIdentifier.StartsWith('win')) or $(DefaultAppHostRuntimeIdentifier.StartsWith('win'))) and '$(OutputType)'=='WinExe'">true + <_EnableMacOSCodeSign Condition="'$(_EnableMacOSCodeSign)' == '' and ($(RuntimeIdentifier.StartsWith('osx')) or $(AppHostRuntimeIdentifier.StartsWith('osx')))">true + <_UseSingleFileHostForPublish Condition="'$(PublishSingleFile)' == 'true' and '$(SelfContained)' == 'true' and '$(SingleFileHostSourcePath)' != '' and '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), 5.0))">true + <_DisableCetCompat Condition="'$(CetCompat)' == 'false'">true + + AppRelative + <_UpdateAppHostForPublish Condition="'$(_UseSingleFileHostForPublish)' != 'true' and ('$(AppHostRelativeDotNet)' != '' or '$(AppHostDotNetSearch)' != '')">true + + + + + + + + + + + + + @(_NativeRestoredAppHostNETCore) + + + $([System.IO.Path]::GetFullPath('$(IntermediateOutputPath)apphost$(_NativeExecutableExtension)')) + $([System.IO.Path]::GetFullPath('$(IntermediateOutputPath)apphost_publish$(_NativeExecutableExtension)')) + $([System.IO.Path]::GetFullPath('$(IntermediateOutputPath)singlefilehost$(_NativeExecutableExtension)')) + + + + + + + + + + + + + + + + + + + + + + + + + $(AssemblyName).comhost$(_ComHostLibraryExtension) + $([System.IO.Path]::GetFullPath('$(IntermediateOutputPath)$(ComHostFileName)')) + + + + + + + + + + + + <_CopyAndRenameDotnetHost Condition="'$(_CopyAndRenameDotnetHost)' == ''">true + + + + $(AssemblyName)$(_NativeExecutableExtension) + PreserveNewest + PreserveNewest + + + + + + PreserveNewest + Never + + + + + $(AssemblyName)$(_NativeExecutableExtension) + PreserveNewest + + Always + + + + + $(AssemblyName).$(_DotNetComHostLibraryName) + PreserveNewest + PreserveNewest + + + %(FileName)%(Extension) + PreserveNewest + PreserveNewest + + + + + $(_DotNetIjwHostLibraryName) + PreserveNewest + PreserveNewest + + + + + + + <_FrameworkReferenceAssemblies Include="@(ReferencePath)" Condition="(%(ReferencePath.FrameworkFile) == 'true' or %(ReferencePath.ResolvedFrom) == 'ImplicitlyExpandDesignTimeFacades') and ('%(ReferencePath.NuGetSourceType)' == '' or '%(ReferencePath.NuGetIsFrameworkReference)' == 'true')" /> + + <_ReferenceOnlyAssemblies Include="@(ReferencePath)" Exclude="@(_FrameworkReferenceAssemblies)" Condition="%(ReferencePath.CopyLocal) != 'true' and %(ReferencePath.NuGetSourceType) == ''" /> + <_ReferenceAssemblies Include="@(_FrameworkReferenceAssemblies)" /> + <_ReferenceAssemblies Include="@(_ReferenceOnlyAssemblies)" /> + + + + + + + + true + + + true + + + + + + + + + $(CreateSatelliteAssembliesDependsOn); + CoreGenerateSatelliteAssemblies + + + + + + + <_AssemblyInfoFile>$(IntermediateOutputPath)%(_SatelliteAssemblyResourceInputs.Culture)\$(TargetName).resources.cs + <_OutputAssembly>$(IntermediateOutputPath)%(_SatelliteAssemblyResourceInputs.Culture)\$(TargetName).resources.dll + + + + <_Parameter1>%(_SatelliteAssemblyResourceInputs.Culture) + + + + + + + true + + + <_SatelliteAssemblyReferences Remove="@(_SatelliteAssemblyReferences)" /> + <_SatelliteAssemblyReferences Include="@(ReferencePath)" Condition="'%(Filename)' == 'mscorlib' or '%(Filename)' == 'netstandard' or '%(Filename)' == 'System.Runtime' " /> + + + + + + + + + + + + + + + + + + + + + + + + + $(TargetFrameworkIdentifier) + $(_TargetFrameworkVersionWithoutV) + + + + + + + + + + + + + + + + + + + + false + + + + <_UseAttributeForTargetFrameworkInfoPropertyNames Condition="$([MSBuild]::VersionGreaterThanOrEquals($(MSBuildVersion), '17.0'))">true + + + + + + <_IsVSTestTestProject Condition="'$(IsTestProject)' == 'true' and '$(IsTestingPlatformApplication)' != 'true'">true + <_IsVSTestTestProject Condition="'$(_IsVSTestTestProject)' == ''">false + + false + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_SourceLinkSdkSubDir>build + <_SourceLinkSdkSubDir Condition="'$(IsCrossTargetingBuild)' == 'true'">buildMultiTargeting + + true + + + + + + + + local + + + + + + + + + + + + git + + + + + + + + + + + + + + + + + + + + + + + + + + $(RepositoryUrl) + $(ScmRepositoryUrl) + + + + %(SourceRoot.ScmRepositoryUrl) + + + + + + + + <_SourceLinkFilePath>$(IntermediateOutputPath)$(MSBuildProjectName).sourcelink.json + + + + + + + + + <_GenerateSourceLinkFileBeforeTargets>Link + <_GenerateSourceLinkFileDependsOnTargets>ComputeLinkSwitches + + + <_GenerateSourceLinkFileBeforeTargets>CoreCompile + <_GenerateSourceLinkFileDependsOnTargets /> + + + + + + + + + + + + + + + + %(Link.AdditionalOptions) /sourcelink:"$(SourceLink)" + + + + + + + + + <_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.GitHub.dll + <_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.GitHub.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeGitHubSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateGitHubUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + <_SourceLinkGitLabAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.GitLab.dll + <_SourceLinkGitLabAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.GitLab.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeGitLabSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateGitLabUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + <_SourceLinkAzureReposGitAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.AzureRepos.Git.dll + <_SourceLinkAzureReposGitAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.AzureRepos.Git.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeAzureReposGitSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateAzureReposGitUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + <_SourceLinkBitbucketAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\netframework\Microsoft.SourceLink.Bitbucket.Git.dll + <_SourceLinkBitbucketAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\net\Microsoft.SourceLink.Bitbucket.Git.dll + + + + + $(SourceLinkUrlInitializerTargets);_InitializeBitbucketGitSourceLinkUrl + $(SourceControlManagerUrlTranslationTargets);TranslateBitbucketGitUrlsInSourceControlInformation + + + + + + + + + + + + + + + <_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" /> + + + + + + + + + + + + + + + + + + .NET Standard $(_TargetFrameworkVersionWithoutV) + .NET Core $(_TargetFrameworkVersionWithoutV) + .NET $(_TargetFrameworkVersionWithoutV) + <_TargetFrameworkDirectories /> + + + + true + + + + + + + $(CommonOutputGroupsDependsOn); + + + + + $(DesignerRuntimeImplementationProjectOutputGroupDependsOn); + _GenerateDesignerDepsFile; + _GenerateDesignerRuntimeConfigFile; + GetCopyToOutputDirectoryItems; + _GatherDesignerShadowCopyFiles; + + <_DesignerDepsFileName>$(AssemblyName).designer.deps.json + <_DesignerRuntimeConfigFileName>$(AssemblyName).designer.runtimeconfig.json + <_DesignerDepsFilePath>$(IntermediateOutputPath)$(_DesignerDepsFileName) + <_DesignerRuntimeConfigFilePath>$(IntermediateOutputPath)$(_DesignerRuntimeConfigFileName) + + + + + + + + + + + + + + <_DesignerHostConfigurationOption Include="Microsoft.NETCore.DotNetHostPolicy.SetAppPaths" Value="true" /> + + + + + + + + + + + <_DesignerShadowCopy Include="@(ReferenceCopyLocalPaths)" /> + + <_DesignerShadowCopy Remove="@(_ResolvedCopyLocalBuildAssets)" Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'" /> + + <_DesignerShadowCopy Remove="@(RuntimePackAsset)" Condition="'%(RuntimePackAsset.RuntimePackAlwaysCopyLocal)' != 'true'" /> + + + + + + + + + + + $(IntermediateOutputPath)$(MSBuildProjectName).AssemblyInfo$(DefaultLanguageSourceExtension) + true + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + + + + + <_InformationalVersionContainsPlus>false + <_InformationalVersionContainsPlus Condition="$(InformationalVersion.Contains('+'))">true + $(InformationalVersion)+$(SourceRevisionId) + $(InformationalVersion).$(SourceRevisionId) + + + + + + <_Parameter1>$(Company) + + + <_Parameter1>$(Configuration) + + + <_Parameter1>$(Copyright) + + + <_Parameter1>$(Description) + + + <_Parameter1>$(FileVersion) + + + <_Parameter1>$(InformationalVersion) + + + <_Parameter1>$(Product) + + + <_Parameter1>$(Trademark) + + + <_Parameter1>$(AssemblyTitle) + + + <_Parameter1>$(AssemblyVersion) + + + <_Parameter1>RepositoryUrl + <_Parameter2 Condition="'$(RepositoryUrl)' != ''">$(RepositoryUrl) + <_Parameter2 Condition="'$(RepositoryUrl)' == ''">$(PrivateRepositoryUrl) + + + <_Parameter1>$(NeutralLanguage) + + + %(InternalsVisibleTo.PublicKey) + + + <_Parameter1 Condition="'%(InternalsVisibleTo.Key)' != ''">%(InternalsVisibleTo.Identity), PublicKey=%(InternalsVisibleTo.Key) + <_Parameter1 Condition="'%(InternalsVisibleTo.Key)' == '' and '$(PublicKey)' != ''">%(InternalsVisibleTo.Identity), PublicKey=$(PublicKey) + <_Parameter1 Condition="'%(InternalsVisibleTo.Key)' == '' and '$(PublicKey)' == ''">%(InternalsVisibleTo.Identity) + + + <_Parameter1>%(AssemblyMetadata.Identity) + <_Parameter2>%(AssemblyMetadata.Value) + + + + + + <_Parameter1>$(TargetPlatformIdentifier)$(TargetPlatformVersion) + + + + + <_Parameter1>$(TargetPlatformIdentifier)$(SupportedOSPlatformVersion) + + + <_Parameter1>$(TargetPlatformIdentifier) + + + + + + + + + + $(IntermediateOutputPath)$(MSBuildProjectName).AssemblyInfoInputs.cache + + + + + + + + + + + + + + + + + + + + + + + + + + + $(AssemblyVersion) + $(Version) + + + + + + + + + $(IntermediateOutputPath)$(MSBuildProjectName).GlobalUsings.g$(DefaultLanguageSourceExtension) + + + + + + + + + + + + + + + + + + + <_GenerateSupportedRuntimeIntermediateAppConfig>$(IntermediateOutputPath)$(TargetFileName).withSupportedRuntime.config + + + + + + + + + + + + + + + + + + + + + + + + + + <_AllProjects Include="$(AdditionalProjects.Split('%3B'))" /> + <_AllProjects Include="$(MSBuildProjectFullPath)" /> + + + + + + + + + + %(PackageReference.Identity) + %(PackageReference.Version) + + StorePackageName=%(PackageReference.Identity); + StorePackageVersion=%(PackageReference.Version); + ComposeWorkingDir=$(ComposeWorkingDir); + PublishDir=$(PublishDir); + StoreStagingDir=$(StoreStagingDir); + TargetFramework=$(TargetFramework); + RuntimeIdentifier=$(RuntimeIdentifier); + JitPath=$(JitPath); + Crossgen=$(Crossgen); + SkipUnchangedFiles=$(SkipUnchangedFiles); + PreserveStoreLayout=$(PreserveStoreLayout); + CreateProfilingSymbols=$(CreateProfilingSymbols); + StoreSymbolsStagingDir=$(StoreSymbolsStagingDir); + DisableImplicitFrameworkReferences=false; + + + + + + + + + + + + + + + + + + + + + + + <_StoreArtifactContent> +@(ListOfPackageReference) + +]]> + + + + + + + + + + <_OptimizedResolvedFileToPublish Include="$(StoreStagingDir)\**\*.*" /> + <_OptimizedSymbolFileToPublish Include="$(StoreSymbolsStagingDir)\**\*.*" /> + + + + + + + + + + + + true + true + <_TFM Condition="'$(_TFM)' == ''">$(TargetFramework) + true + + + + + + $(UserProfileRuntimeStorePath) + <_ProfilingSymbolsDirectoryName>symbols + $([System.IO.Path]::Combine($(DefaultComposeDir), $(_ProfilingSymbolsDirectoryName))) + $([System.IO.Path]::Combine($(ComposeDir), $(_ProfilingSymbolsDirectoryName))) + $([System.IO.Path]::Combine($(ProfilingSymbolsDir), $(PlatformTarget))) + $(DefaultProfilingSymbolsDir) + $([System.IO.Path]::Combine($(ProfilingSymbolsDir), $(_TFM))) + $(ProfilingSymbolsDir)\ + $(DefaultComposeDir) + $([System.IO.Path]::Combine($(ComposeDir), $(PlatformTarget))) + $([System.IO.Path]::Combine($(ComposeDir), $(_TFM))) + $([System.IO.Path]::Combine($(ComposeDir),"artifact.xml")) + $([System.IO.Path]::GetFullPath($(ComposeDir))) + <_RandomFileName>$([System.IO.Path]::GetRandomFileName()) + $([System.IO.Path]::GetTempPath()) + $([System.IO.Path]::Combine($(TEMP), $(_RandomFileName))) + $([System.IO.Path]::GetFullPath($(ComposeWorkingDir))) + $([System.IO.Path]::Combine($(ComposeWorkingDir),"StagingDir")) + + $([System.IO.Path]::Combine($(ComposeWorkingDir),"SymbolsStagingDir")) + + $(PublishDir)\ + + + + false + true + + + + + + + + $(StorePackageVersion.Replace('*','-')) + $([System.IO.Path]::Combine($(ComposeWorkingDir),"$(StorePackageName)_$(StorePackageVersionForFolderName)")) + <_PackageProjFile>$([System.IO.Path]::Combine($(StoreWorkerWorkingDir), "Restore.csproj")) + $(StoreWorkerWorkingDir)\ + $(BaseIntermediateOutputPath)\project.assets.json + + + $(MicrosoftNETPlatformLibrary) + true + + + + + + + + + + + + + + + + + + + + + + + <_ManagedResolvedFileToPublishCandidates Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.AssetType)'=='runtime'" /> + <_UnOptimizedResolvedFileToPublish Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.AssetType)'!='runtime'" /> + + + true + + + + + + <_UnOptimizedResolvedFileToPublish Include="@(ResolvedFileToPublish)" /> + + + + + + + true + true + + + + + + + + + + + + + + + + + + + + + + true + true + false + true + false + true + 1 + + + + + + <_CoreclrResolvedPath Include="@(CrossgenResolvedAssembliesToPublish)" Condition="'%(CrossgenResolvedAssembliesToPublish.Filename)'=='coreclr'" /> + <_CoreclrResolvedPath Include="@(CrossgenResolvedAssembliesToPublish)" Condition="'%(CrossgenResolvedAssembliesToPublish.Filename)'=='libcoreclr'" /> + <_JitResolvedPath Include="@(CrossgenResolvedAssembliesToPublish)" Condition="'%(CrossgenResolvedAssembliesToPublish.Filename)'=='clrjit'" /> + <_JitResolvedPath Include="@(CrossgenResolvedAssembliesToPublish)" Condition="'%(CrossgenResolvedAssembliesToPublish.Filename)'=='libclrjit'" /> + + + + + + + + <_CoreclrPath>@(_CoreclrResolvedPath) + @(_JitResolvedPath) + <_CoreclrDir>$([System.IO.Path]::GetDirectoryName($(_CoreclrPath))) + <_CoreclrPkgDir>$([System.IO.Path]::Combine($(_CoreclrDir),"..\..\..\")) + $([System.IO.Path]::Combine($(_CoreclrPkgDir),"tools")) + + $([System.IO.Path]::Combine($(CrossgenDir),"crossgen")) + $([System.IO.Path]::Combine($(CrossgenDir),"crossgen.exe")) + + + + + + + + $([System.IO.Path]::GetFullPath($([System.IO.Path]::Combine($(_NetCoreRefDir), $([System.IO.Path]::GetFileName($(Crossgen))))))) + + + + + + + + CrossgenExe=$(Crossgen); + CrossgenJit=$(JitPath); + CrossgenInputAssembly=%(_ManagedResolvedFilesToOptimize.Fullpath); + CrossgenOutputAssembly=$(_RuntimeOptimizedDir)$(DirectorySeparatorChar)%(_ManagedResolvedFilesToOptimize.FileName)%(_ManagedResolvedFilesToOptimize.Extension); + CrossgenSubOutputPath=%(_ManagedResolvedFilesToOptimize.DestinationSubPath); + _RuntimeOptimizedDir=$(_RuntimeOptimizedDir); + PublishDir=$(StoreStagingDir); + CrossgenPlatformAssembliesPath=$(_RuntimeRefDir)$(PathSeparator)$(_NetCoreRefDir); + CreateProfilingSymbols=$(CreateProfilingSymbols); + StoreSymbolsStagingDir=$(StoreSymbolsStagingDir); + _RuntimeSymbolsDir=$(_RuntimeSymbolsDir) + + + + + + + + + + $([System.IO.Path]::GetDirectoryName($(_RuntimeSymbolsDir)\$(CrossgenSubOutputPath))) + $([System.IO.Path]::GetDirectoryName($(StoreSymbolsStagingDir)\$(CrossgenSubOutputPath))) + $(CrossgenExe) -nologo -readytorun -in "$(CrossgenInputAssembly)" -out "$(CrossgenOutputAssembly)" -jitpath "$(CrossgenJit)" -platform_assemblies_paths "$(CrossgenPlatformAssembliesPath)" + CreatePDB + CreatePerfMap + + + + + + + + + + + + <_ProfilingSymbols Include="$(CrossgenProfilingSymbolsOutputDirectory)\*" Condition="'$(CreateProfilingSymbols)' == 'true'" /> + + + + + + + + $([System.IO.Path]::PathSeparator) + $([System.IO.Path]::DirectorySeparatorChar) + + + + + + <_CrossProjFileDir>$([System.IO.Path]::Combine($(ComposeWorkingDir),"Optimize")) + <_NetCoreRefDir>$([System.IO.Path]::Combine($(_CrossProjFileDir), "netcoreapp")) + + + + + <_CrossProjAssetsFile>$([System.IO.Path]::Combine($(_CrossProjFileDir), project.assets.json)) + + + + + + <_RuntimeRefDir>$([System.IO.Path]::Combine($(StoreWorkerWorkingDir), "runtimeref")) + + <_RuntimeOptimizedDir>$([System.IO.Path]::Combine($(StoreWorkerWorkingDir), "runtimopt")) + + <_RuntimeSymbolsDir>$([System.IO.Path]::Combine($(StoreWorkerWorkingDir), "runtimesymbols")) + + + <_ManagedResolvedFilesToOptimize Include="@(_ManagedResolvedFileToPublishCandidates)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ReadyToRunOutputPath>$(IntermediateOutputPath)R2R + + + + <_ReadyToRunImplementationAssemblies Include="@(ResolvedFileToPublish->WithMetadataValue('PostprocessAssembly', 'true'))" /> + + + + <_ReadyToRunImplementationAssemblies Include="@(_ManagedRuntimePackAssembly)" ReferenceOnly="true" /> + + + + + + <_ReadyToRunImplementationAssemblies Remove="@(_ReadyToRunImplementationAssemblies)" /> + <_ReadyToRunImplementationAssemblies Include="@(_ReadyToRunImplementationAssembliesWithoutConflicts)" /> + + + <_ReadyToRunPgoFiles Include="@(PublishReadyToRunPgoFiles)" /> + <_ReadyToRunPgoFiles Include="@(RuntimePackAsset)" Condition="'%(RuntimePackAsset.AssetType)' == 'pgodata' and '%(RuntimePackAsset.Extension)' == '.mibc' and '$(PublishReadyToRunUseRuntimePackOptimizationData)' == 'true'" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ReadyToRunCompilerHasWarnings Condition="'$(_ReadyToRunWarningsDetected)' == 'true'">true + + + <_ReadyToRunCompilationFailures Condition="'$(_ReadyToRunCompilerExitCode)' != '' And $(_ReadyToRunCompilerExitCode) != 0" Include="@(_ReadyToRunCompileList)" /> + + + + + + + + + + + <_ReadyToRunCompilerHasWarnings Condition="'$(_ReadyToRunWarningsDetected)' == 'true'">true + + + <_ReadyToRunCompilationFailures Condition="'$(_ReadyToRunCompilerExitCode)' != '' And $(_ReadyToRunCompilerExitCode) != 0" Include="@(_ReadyToRunSymbolsCompileList)" /> + + + + + + + $(MSBuildThisFileDirectory)..\..\..\Microsoft.NETCoreSdk.BundledCliTools.props + + + + + + + <_ReferenceToObsoleteDotNetCliTool Include="@(DotNetCliToolReference)" /> + + <_ReferenceToObsoleteDotNetCliTool Remove="@(DotNetCliToolReference)" /> + + + + + + + + + true + <_GetChildProjectCopyToPublishDirectoryItems Condition="'$(_GetChildProjectCopyToPublishDirectoryItems)' == ''">true + true + + + + + true + true + <_FirstTargetFrameworkToSupportTrimming>net6.0 + <_FirstTargetFrameworkToSupportAot>net7.0 + <_FirstTargetFrameworkToSupportSingleFile>net6.0 + <_FirstTargetFrameworkVersionToSupportTrimAnalyzer>$([MSBuild]::GetTargetFrameworkVersion('$(_FirstTargetFrameworkToSupportTrimming)')) + <_FirstTargetFrameworkVersionToSupportAotAnalyzer>$([MSBuild]::GetTargetFrameworkVersion('$(_FirstTargetFrameworkToSupportAot)')) + <_FirstTargetFrameworkVersionToSupportSingleFileAnalyzer>$([MSBuild]::GetTargetFrameworkVersion('$(_FirstTargetFrameworkToSupportSingleFile)')) + + + + + + + + + + + + Always + + + + + + <_RequiresILLinkPack Condition="'$(_RequiresILLinkPack)' == '' And ( '$(PublishAot)' == 'true' Or '$(IsAotCompatible)' == 'true' Or '$(EnableAotAnalyzer)' == 'true' Or '$(PublishTrimmed)' == 'true' Or '$(IsTrimmable)' == 'true' Or '$(EnableTrimAnalyzer)' == 'true' Or '$(EnableSingleFileAnalyzer)' == 'true')">true + <_RequiresILLinkPack Condition="'$(_RequiresILLinkPack)' == ''">false + + + + + <_MinNonEolTargetFrameworkForTrimming>$(_MinimumNonEolSupportedNetCoreTargetFramework) + <_MinNonEolTargetFrameworkForSingleFile>$(_MinimumNonEolSupportedNetCoreTargetFramework) + + <_MinNonEolTargetFrameworkForAot>$(_MinimumNonEolSupportedNetCoreTargetFramework) + <_MinNonEolTargetFrameworkForAot Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(_FirstTargetFrameworkToSupportAot)', '$(_MinimumNonEolSupportedNetCoreTargetFramework)'))">$(_FirstTargetFrameworkToSupportAot) + + + <_TargetFramework Include="$(TargetFrameworks)" /> + <_DecomposedTargetFramework Include="@(_TargetFramework)"> + $([MSBuild]::IsTargetFrameworkCompatible('%(Identity)', '$(_FirstTargetFrameworkToSupportTrimming)')) + $([MSBuild]::IsTargetFrameworkCompatible('$(_MinNonEolTargetFrameworkForTrimming)', '%(Identity)')) + $([MSBuild]::IsTargetFrameworkCompatible('%(Identity)', '$(_FirstTargetFrameworkToSupportAot)')) + $([MSBuild]::IsTargetFrameworkCompatible('$(_MinNonEolTargetFrameworkForAot)', '%(Identity)')) + $([MSBuild]::IsTargetFrameworkCompatible('%(Identity)', '$(_FirstTargetFrameworkToSupportSingleFile)')) + $([MSBuild]::IsTargetFrameworkCompatible('$(_MinNonEolTargetFrameworkForSingleFile)', '%(Identity)')) + + <_TargetFrameworkToSilenceIsTrimmableUnsupportedWarning Include="@(_DecomposedTargetFramework)" Condition="'%(SupportsTrimming)' == 'true' And '%(SupportedByMinNonEolTargetFrameworkForTrimming)' == 'true'" /> + <_TargetFrameworkToSilenceIsAotCompatibleUnsupportedWarning Include="@(_DecomposedTargetFramework->'%(Identity)')" Condition="'%(SupportsAot)' == 'true' And '%(SupportedByMinNonEolTargetFrameworkForAot)' == 'true'" /> + <_TargetFrameworkToSilenceEnableSingleFileAnalyzerUnsupportedWarning Include="@(_DecomposedTargetFramework)" Condition="'%(SupportsSingleFile)' == 'true' And '%(SupportedByMinNonEolTargetFrameworkForSingleFile)' == 'true'" /> + + + + <_SilenceIsTrimmableUnsupportedWarning Condition="'$(_SilenceIsTrimmableUnsupportedWarning)' == '' And @(_TargetFrameworkToSilenceIsTrimmableUnsupportedWarning->Count()) > 0">true + <_SilenceIsAotCompatibleUnsupportedWarning Condition="'$(_SilenceIsAotCompatibleUnsupportedWarning)' == '' And @(_TargetFrameworkToSilenceIsAotCompatibleUnsupportedWarning->Count()) > 0">true + <_SilenceEnableSingleFileAnalyzerUnsupportedWarning Condition="'$(_SilenceEnableSingleFileAnalyzerUnsupportedWarning)' == '' And @(_TargetFrameworkToSilenceEnableSingleFileAnalyzerUnsupportedWarning->Count()) > 0">true + + + + + + + + <_BeforePublishNoBuildTargets> + BuildOnlySettings; + _PreventProjectReferencesFromBuilding; + ResolveReferences; + PrepareResourceNames; + ComputeIntermediateSatelliteAssemblies; + ComputeEmbeddedApphostPaths; + + <_CorePublishTargets> + PrepareForPublish; + ComputeAndCopyFilesToPublishDirectory; + $(PublishProtocolProviderTargets); + PublishItemsOutputGroup; + + <_PublishNoBuildAlternativeDependsOn>$(_BeforePublishNoBuildTargets);$(_CorePublishTargets) + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + $(PublishDir)\ + + + + + + + + + + + + <_OrphanPublishFileWrites Include="@(_PriorPublishFileWrites)" Exclude="@(_CurrentPublishFileWrites)" /> + + + + + + + + + + + + <_NormalizedPublishDir>$([MSBuild]::NormalizeDirectory($(PublishDir))) + + + + + + <_PublishCleanFile Condition="'$(PublishCleanFile)'==''">PublishOutputs.$(_NormalizedPublishDirHash.Substring(0, 10)).txt + + + + + + + + + + + + + + + + + + <_CurrentPublishFileWritesUnfiltered Include="@(ResolvedFileToPublish->'$(_NormalizedPublishDir)%(RelativePath)')" /> + <_CurrentPublishFileWritesUnfiltered Include="$(_NormalizedPublishDir)$(AssemblyName)$(_NativeExecutableExtension)" Condition="'$(UseAppHost)' == 'true'" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ResolvedFileToPublishPreserveNewest Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.CopyToPublishDirectory)'=='PreserveNewest'" /> + <_ResolvedFileToPublishAlways Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.CopyToPublishDirectory)'=='Always'" /> + + + <_ResolvedUnbundledFileToPublishPreserveNewest Include="@(_ResolvedFileToPublishPreserveNewest)" Condition="'$(PublishSingleFile)' != 'true' or '%(_ResolvedFileToPublishPreserveNewest.ExcludeFromSingleFile)'=='true'" /> + <_ResolvedUnbundledFileToPublishAlways Include="@(_ResolvedFileToPublishAlways)" Condition="'$(PublishSingleFile)' != 'true' or '%(_ResolvedFileToPublishAlways.ExcludeFromSingleFile)'=='true'" /> + + + + + + + + true + true + false + + + + + + + + @(IntermediateAssembly->'%(Filename)%(Extension)') + PreserveNewest + + + + $(ProjectDepsFileName) + PreserveNewest + + + + $(ProjectRuntimeConfigFileName) + PreserveNewest + + + + @(AppConfigWithTargetPath->'%(TargetPath)') + PreserveNewest + + + + @(_DebugSymbolsIntermediatePath->'%(Filename)%(Extension)') + PreserveNewest + true + + + + %(IntermediateSatelliteAssembliesWithTargetPath.Culture)\%(Filename)%(Extension) + PreserveNewest + + + + %(Filename)%(Extension) + PreserveNewest + + + + + + + + + <_ResolvedCopyLocalPublishAssets Remove="@(_ResolvedCopyLocalPublishAssetsRemoved)" /> + + + + %(_ResolvedCopyLocalPublishAssets.DestinationSubDirectory)%(Filename)%(Extension) + PreserveNewest + + + + @(FinalDocFile->'%(Filename)%(Extension)') + PreserveNewest + + + + shims/%(_EmbeddedApphostPaths.ShimRuntimeIdentifier)/%(_EmbeddedApphostPaths.Filename)%(_EmbeddedApphostPaths.Extension) + PreserveNewest + + + <_FilesToDrop Include="@(ResolvedFileToPublish)" Condition="'$(PublishSingleFile)' == 'true' and '%(ResolvedFileToPublish.DropFromSingleFile)' == 'true'" /> + + + + + + + + + + + + <_ResolvedCopyLocalPublishAssets Include="@(RuntimePackAsset)" Condition="('$(SelfContained)' == 'true' Or '%(RuntimePackAsset.RuntimePackAlwaysCopyLocal)' == 'true') and '%(RuntimePackAsset.AssetType)' != 'pgodata'" /> + + + + <_ResolvedCopyLocalPublishAssets Remove="@(_NativeRestoredAppHostNETCore)" /> + + + <_ResolvedCopyLocalPublishAssets Include="@(_ResolvedCopyLocalBuildAssets)" Condition="'%(_ResolvedCopyLocalBuildAssets.CopyToPublishDirectory)' != 'false' " /> + + + + + + + + + + + + + <_PublishSatelliteResources Include="@(_ResolvedCopyLocalPublishAssets)" Condition="'%(_ResolvedCopyLocalPublishAssets.AssetType)' == 'resources'" /> + + + + + + <_ResolvedCopyLocalPublishAssets Remove="@(_PublishSatelliteResources)" /> + <_ResolvedCopyLocalPublishAssets Include="@(_FilteredPublishSatelliteResources)" /> + + + + + + <_ResolvedCopyLocalPublishAssets Include="@(ReferenceCopyLocalPaths)" Exclude="@(_ResolvedCopyLocalBuildAssets);@(RuntimePackAsset)" Condition="('$(PublishReferencesDocumentationFiles)' == 'true' or '%(ReferenceCopyLocalPaths.Extension)' != '.xml') and '%(ReferenceCopyLocalPaths.Private)' != 'false'"> + %(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension) + + + + + + + + + + + + + + + + %(_SourceItemsToCopyToPublishDirectoryAlways.TargetPath) + Always + True + + + %(_SourceItemsToCopyToPublishDirectory.TargetPath) + PreserveNewest + True + + + + + + + + <_GCTPDIKeepDuplicates>false + <_GCTPDIKeepMetadata>CopyToPublishDirectory;ExcludeFromSingleFile;TargetPath + + + + + + + + <_SourceItemsToCopyToPublishDirectoryAlways KeepDuplicates=" '$(_GCTPDIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_AllChildProjectPublishItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectPublishItemsWithTargetPath.CopyToPublishDirectory)'=='Always'" /> + <_SourceItemsToCopyToPublishDirectory KeepDuplicates=" '$(_GCTPDIKeepDuplicates)' != 'false' " KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_AllChildProjectPublishItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectPublishItemsWithTargetPath.CopyToPublishDirectory)'=='PreserveNewest'" /> + + + + <_AllChildProjectPublishItemsWithTargetPath Remove="@(_AllChildProjectPublishItemsWithTargetPath)" /> + + + + <_SourceItemsToCopyToPublishDirectoryAlways KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToPublishDirectory)'=='Always'" /> + <_SourceItemsToCopyToPublishDirectory KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToPublishDirectory)'=='PreserveNewest'" /> + + + <_SourceItemsToCopyToPublishDirectoryAlways KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToPublishDirectory)'=='Always'" /> + <_SourceItemsToCopyToPublishDirectory KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToPublishDirectory)'=='PreserveNewest'" /> + + + <_CompileItemsToPublish Include="@(Compile->'%(FullPath)')" Condition="'%(Compile.CopyToPublishDirectory)'=='Always' or '%(Compile.CopyToPublishDirectory)'=='PreserveNewest'" /> + + + + + + <_SourceItemsToCopyToPublishDirectoryAlways KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_CompileItemsToPublishWithTargetPath)" Condition="'%(_CompileItemsToPublishWithTargetPath.CopyToPublishDirectory)'=='Always'" /> + <_SourceItemsToCopyToPublishDirectory KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_CompileItemsToPublishWithTargetPath)" Condition="'%(_CompileItemsToPublishWithTargetPath.CopyToPublishDirectory)'=='PreserveNewest'" /> + + + <_SourceItemsToCopyToPublishDirectoryAlways KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToPublishDirectory)'=='Always'" /> + <_SourceItemsToCopyToPublishDirectory KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToPublishDirectory)'=='PreserveNewest'" /> + + + + <_SourceItemsToCopyToPublishDirectoryAlways Remove="$(AppHostIntermediatePath)" /> + <_SourceItemsToCopyToPublishDirectory Remove="$(AppHostIntermediatePath)" /> + + <_SourceItemsToCopyToPublishDirectoryAlways Include="$(SingleFileHostIntermediatePath)" CopyToOutputDirectory="Always" TargetPath="$(AssemblyName)$(_NativeExecutableExtension)" /> + + + + <_SourceItemsToCopyToPublishDirectoryAlways Remove="$(AppHostIntermediatePath)" /> + <_SourceItemsToCopyToPublishDirectory Remove="$(AppHostIntermediatePath)" /> + + <_SourceItemsToCopyToPublishDirectoryAlways Include="$(AppHostForPublishIntermediatePath)" CopyToOutputDirectory="Always" TargetPath="$(AssemblyName)$(_NativeExecutableExtension)" /> + + + + + + + + + + Always + + + PreserveNewest + + + Always + + + PreserveNewest + + + Always + + + PreserveNewest + + <_NoneWithTargetPath Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' and '%(_NoneWithTargetPath.CopyToPublishDirectory)' == ''"> + Always + + <_NoneWithTargetPath Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' and '%(_NoneWithTargetPath.CopyToPublishDirectory)' == ''"> + PreserveNewest + + + + + <_ComputeManagedRuntimePackAssembliesIfSelfContained>_ComputeManagedRuntimePackAssemblies + + + + + + + <_ManagedRuntimeAssembly Include="@(RuntimeCopyLocalItems)" /> + + <_ManagedRuntimeAssembly Include="@(UserRuntimeAssembly)" /> + + <_ManagedRuntimeAssembly Include="@(IntermediateAssembly)" /> + + + + <_ManagedRuntimeAssembly Include="@(_ManagedRuntimePackAssembly)" /> + + + + + + + + + + + + + + + <_ManagedRuntimePackAssembly Include="@(RuntimePackAsset)" Condition="'%(RuntimePackAsset.AssetType)' == 'runtime' or '%(RuntimePackAsset.Filename)' == 'System.Private.Corelib'" /> + + + + + + <_TrimRuntimeAssets Condition="'$(PublishSingleFile)' == 'true' and '$(SelfContained)' == 'true'">true + <_UseBuildDependencyFile Condition="'@(_ExcludeFromPublishPackageReference)' == '' and '@(RuntimeStorePackages)' == '' and '$(PreserveStoreLayout)' != 'true' and '$(PublishTrimmed)' != 'true' and '$(_TrimRuntimeAssets)' != 'true'">true + + + + + + <_FilesToBundle Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.ExcludeFromSingleFile)' != 'true'" /> + + + + $(AssemblyName)$(_NativeExecutableExtension) + $(PublishDir)$(PublishedSingleFileName) + + + + + + + + $(PublishedSingleFileName) + + + + + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(PublishedSingleFilePath)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(TraceSingleFileBundler)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(IncludeSymbolsInSingleFile)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(IncludeAllContentForSelfExtract)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(IncludeNativeLibrariesForSelfExtract)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(EnableCompressionInSingleFile)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(PublishedSingleFileName)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(RuntimeIdentifier)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(PublishDir)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="$(_TargetFrameworkVersionWithoutV)" /> + <_GenerateSingleFileBundlePropertyInputsCacheToHash Include="@(FilesToBundle)" /> + + + + + + + + + + false + false + false + $(IncludeAllContentForSelfExtract) + false + + + + + + + + + + + + + + $(PublishDepsFilePath) + $(IntermediateOutputPath)$(ProjectDepsFileName) + + + + + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(PublishDepsFilePath)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(PublishSingleFile)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(MSBuildProjectFullPath)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(ProjectAssetsFile)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(IntermediateDepsFilePath)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(TargetFramework)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(AssemblyName)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(TargetExt)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(Version)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(IncludeMainProjectInDepsFile)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(RuntimeIdentifier)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(MicrosoftNETPlatformLibrary)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(SelfContained)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(IncludeFileVersionsInDependencyFile)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(RuntimeIdentifierGraphPath)" /> + <_GeneratePublishDependencyFilePropertyInputsCacheToHash Include="$(IncludeProjectsNotInAssetsFileInDepsFile)" /> + + + + + + + + + + + + + + $(PublishDir)$(ProjectDepsFileName) + <_IsSingleFilePublish Condition="'$(PublishSingleFile)' == ''">false + <_IsSingleFilePublish Condition="'$(PublishSingleFile)' != ''">$(PublishSingleFile) + + + + + + <_ResolvedNuGetFilesForPublish Include="@(NativeCopyLocalItems)" Condition="'%(NativeCopyLocalItems.CopyToPublishDirectory)' != 'false'" /> + <_ResolvedNuGetFilesForPublish Include="@(ResourceCopyLocalItems)" Condition="'%(ResourceCopyLocalItems.CopyToPublishDirectory)' != 'false'" /> + <_ResolvedNuGetFilesForPublish Include="@(RuntimeCopyLocalItems)" Condition="'%(RuntimeCopyLocalItems.CopyToPublishDirectory)' != 'false'" /> + <_ResolvedNuGetFilesForPublish Remove="@(_PublishConflictPackageFiles)" Condition="'%(_PublishConflictPackageFiles.ConflictItemType)' != 'Reference'" /> + + + + + $(ProjectDepsFileName) + + + + + + + + <_PackAsToolShimRuntimeIdentifiers Condition="@(_PackAsToolShimRuntimeIdentifiers) ==''" Include="$(PackAsToolShimRuntimeIdentifiers)" /> + + + + + + + + + + + + + + + + + + $(PublishItemsOutputGroupDependsOn); + ResolveReferences; + ComputeResolvedFilesToPublishList; + _ComputeFilesToBundle; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + refs + $(PreserveCompilationContext) + + + + + $(DefineConstants) + $(LangVersion) + $(PlatformTarget) + $(AllowUnsafeBlocks) + $(TreatWarningsAsErrors) + $(Optimize) + $(AssemblyOriginatorKeyFile) + $(DelaySign) + $(PublicSign) + $(DebugType) + $(OutputType) + $(GenerateDocumentationFile) + + + + + + + + + + + <_RefAssembliesToExclude Include="@(_ResolvedCopyLocalPublishAssets->'%(FullPath)')" /> + + <_RefAssembliesToExclude Include="@(_RuntimeItemsInRuntimeStore)" /> + + $(RefAssembliesFolderName)\%(Filename)%(Extension) + + + + + + + + + + + + + + + + + + Microsoft.CSharp|4.4.0; + Microsoft.Win32.Primitives|4.3.0; + Microsoft.Win32.Registry|4.4.0; + runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple|4.3.0; + runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0; + System.AppContext|4.3.0; + System.Buffers|4.4.0; + System.Collections|4.3.0; + System.Collections.Concurrent|4.3.0; + System.Collections.Immutable|1.4.0; + System.Collections.NonGeneric|4.3.0; + System.Collections.Specialized|4.3.0; + System.ComponentModel|4.3.0; + System.ComponentModel.EventBasedAsync|4.3.0; + System.ComponentModel.Primitives|4.3.0; + System.ComponentModel.TypeConverter|4.3.0; + System.Console|4.3.0; + System.Data.Common|4.3.0; + System.Diagnostics.Contracts|4.3.0; + System.Diagnostics.Debug|4.3.0; + System.Diagnostics.DiagnosticSource|4.4.0; + System.Diagnostics.FileVersionInfo|4.3.0; + System.Diagnostics.Process|4.3.0; + System.Diagnostics.StackTrace|4.3.0; + System.Diagnostics.TextWriterTraceListener|4.3.0; + System.Diagnostics.Tools|4.3.0; + System.Diagnostics.TraceSource|4.3.0; + System.Diagnostics.Tracing|4.3.0; + System.Dynamic.Runtime|4.3.0; + System.Globalization|4.3.0; + System.Globalization.Calendars|4.3.0; + System.Globalization.Extensions|4.3.0; + System.IO|4.3.0; + System.IO.Compression|4.3.0; + System.IO.Compression.ZipFile|4.3.0; + System.IO.FileSystem|4.3.0; + System.IO.FileSystem.AccessControl|4.4.0; + System.IO.FileSystem.DriveInfo|4.3.0; + System.IO.FileSystem.Primitives|4.3.0; + System.IO.FileSystem.Watcher|4.3.0; + System.IO.IsolatedStorage|4.3.0; + System.IO.MemoryMappedFiles|4.3.0; + System.IO.Pipes|4.3.0; + System.IO.UnmanagedMemoryStream|4.3.0; + System.Linq|4.3.0; + System.Linq.Expressions|4.3.0; + System.Linq.Queryable|4.3.0; + System.Net.Http|4.3.0; + System.Net.NameResolution|4.3.0; + System.Net.Primitives|4.3.0; + System.Net.Requests|4.3.0; + System.Net.Security|4.3.0; + System.Net.Sockets|4.3.0; + System.Net.WebHeaderCollection|4.3.0; + System.ObjectModel|4.3.0; + System.Private.DataContractSerialization|4.3.0; + System.Reflection|4.3.0; + System.Reflection.Emit|4.3.0; + System.Reflection.Emit.ILGeneration|4.3.0; + System.Reflection.Emit.Lightweight|4.3.0; + System.Reflection.Extensions|4.3.0; + System.Reflection.Metadata|1.5.0; + System.Reflection.Primitives|4.3.0; + System.Reflection.TypeExtensions|4.3.0; + System.Resources.ResourceManager|4.3.0; + System.Runtime|4.3.0; + System.Runtime.Extensions|4.3.0; + System.Runtime.Handles|4.3.0; + System.Runtime.InteropServices|4.3.0; + System.Runtime.InteropServices.RuntimeInformation|4.3.0; + System.Runtime.Loader|4.3.0; + System.Runtime.Numerics|4.3.0; + System.Runtime.Serialization.Formatters|4.3.0; + System.Runtime.Serialization.Json|4.3.0; + System.Runtime.Serialization.Primitives|4.3.0; + System.Security.AccessControl|4.4.0; + System.Security.Claims|4.3.0; + System.Security.Cryptography.Algorithms|4.3.0; + System.Security.Cryptography.Cng|4.4.0; + System.Security.Cryptography.Csp|4.3.0; + System.Security.Cryptography.Encoding|4.3.0; + System.Security.Cryptography.OpenSsl|4.4.0; + System.Security.Cryptography.Primitives|4.3.0; + System.Security.Cryptography.X509Certificates|4.3.0; + System.Security.Cryptography.Xml|4.4.0; + System.Security.Principal|4.3.0; + System.Security.Principal.Windows|4.4.0; + System.Text.Encoding|4.3.0; + System.Text.Encoding.Extensions|4.3.0; + System.Text.RegularExpressions|4.3.0; + System.Threading|4.3.0; + System.Threading.Overlapped|4.3.0; + System.Threading.Tasks|4.3.0; + System.Threading.Tasks.Extensions|4.3.0; + System.Threading.Tasks.Parallel|4.3.0; + System.Threading.Thread|4.3.0; + System.Threading.ThreadPool|4.3.0; + System.Threading.Timer|4.3.0; + System.ValueTuple|4.3.0; + System.Xml.ReaderWriter|4.3.0; + System.Xml.XDocument|4.3.0; + System.Xml.XmlDocument|4.3.0; + System.Xml.XmlSerializer|4.3.0; + System.Xml.XPath|4.3.0; + System.Xml.XPath.XDocument|4.3.0; + + + + + Microsoft.Win32.Primitives|4.3.0; + System.AppContext|4.3.0; + System.Collections|4.3.0; + System.Collections.Concurrent|4.3.0; + System.Collections.Immutable|1.4.0; + System.Collections.NonGeneric|4.3.0; + System.Collections.Specialized|4.3.0; + System.ComponentModel|4.3.0; + System.ComponentModel.EventBasedAsync|4.3.0; + System.ComponentModel.Primitives|4.3.0; + System.ComponentModel.TypeConverter|4.3.0; + System.Console|4.3.0; + System.Data.Common|4.3.0; + System.Diagnostics.Contracts|4.3.0; + System.Diagnostics.Debug|4.3.0; + System.Diagnostics.FileVersionInfo|4.3.0; + System.Diagnostics.Process|4.3.0; + System.Diagnostics.StackTrace|4.3.0; + System.Diagnostics.TextWriterTraceListener|4.3.0; + System.Diagnostics.Tools|4.3.0; + System.Diagnostics.TraceSource|4.3.0; + System.Diagnostics.Tracing|4.3.0; + System.Dynamic.Runtime|4.3.0; + System.Globalization|4.3.0; + System.Globalization.Calendars|4.3.0; + System.Globalization.Extensions|4.3.0; + System.IO|4.3.0; + System.IO.Compression|4.3.0; + System.IO.Compression.ZipFile|4.3.0; + System.IO.FileSystem|4.3.0; + System.IO.FileSystem.DriveInfo|4.3.0; + System.IO.FileSystem.Primitives|4.3.0; + System.IO.FileSystem.Watcher|4.3.0; + System.IO.IsolatedStorage|4.3.0; + System.IO.MemoryMappedFiles|4.3.0; + System.IO.Pipes|4.3.0; + System.IO.UnmanagedMemoryStream|4.3.0; + System.Linq|4.3.0; + System.Linq.Expressions|4.3.0; + System.Linq.Queryable|4.3.0; + System.Net.Http|4.3.0; + System.Net.NameResolution|4.3.0; + System.Net.Primitives|4.3.0; + System.Net.Requests|4.3.0; + System.Net.Security|4.3.0; + System.Net.Sockets|4.3.0; + System.Net.WebHeaderCollection|4.3.0; + System.ObjectModel|4.3.0; + System.Private.DataContractSerialization|4.3.0; + System.Reflection|4.3.0; + System.Reflection.Emit|4.3.0; + System.Reflection.Emit.ILGeneration|4.3.0; + System.Reflection.Emit.Lightweight|4.3.0; + System.Reflection.Extensions|4.3.0; + System.Reflection.Primitives|4.3.0; + System.Reflection.TypeExtensions|4.3.0; + System.Resources.ResourceManager|4.3.0; + System.Runtime|4.3.0; + System.Runtime.Extensions|4.3.0; + System.Runtime.Handles|4.3.0; + System.Runtime.InteropServices|4.3.0; + System.Runtime.InteropServices.RuntimeInformation|4.3.0; + System.Runtime.Loader|4.3.0; + System.Runtime.Numerics|4.3.0; + System.Runtime.Serialization.Formatters|4.3.0; + System.Runtime.Serialization.Json|4.3.0; + System.Runtime.Serialization.Primitives|4.3.0; + System.Security.AccessControl|4.4.0; + System.Security.Claims|4.3.0; + System.Security.Cryptography.Algorithms|4.3.0; + System.Security.Cryptography.Csp|4.3.0; + System.Security.Cryptography.Encoding|4.3.0; + System.Security.Cryptography.Primitives|4.3.0; + System.Security.Cryptography.X509Certificates|4.3.0; + System.Security.Cryptography.Xml|4.4.0; + System.Security.Principal|4.3.0; + System.Security.Principal.Windows|4.4.0; + System.Text.Encoding|4.3.0; + System.Text.Encoding.Extensions|4.3.0; + System.Text.RegularExpressions|4.3.0; + System.Threading|4.3.0; + System.Threading.Overlapped|4.3.0; + System.Threading.Tasks|4.3.0; + System.Threading.Tasks.Extensions|4.3.0; + System.Threading.Tasks.Parallel|4.3.0; + System.Threading.Thread|4.3.0; + System.Threading.ThreadPool|4.3.0; + System.Threading.Timer|4.3.0; + System.ValueTuple|4.3.0; + System.Xml.ReaderWriter|4.3.0; + System.Xml.XDocument|4.3.0; + System.Xml.XmlDocument|4.3.0; + System.Xml.XmlSerializer|4.3.0; + System.Xml.XPath|4.3.0; + System.Xml.XPath.XDocument|4.3.0; + + + + + + + + + + + <_RuntimeAssetsForConflictResolution Include="@(RuntimeCopyLocalItems); @(NativeCopyLocalItems); @(ResourceCopyLocalItems); @(RuntimeTargetsCopyLocalItems)" Exclude="@(ReferenceCopyLocalPaths)" /> + + + + + + + + + + + + + + + + + + + + + + + + + <_ResolvedCopyLocalPublishAssets Remove="@(_ResolvedCopyLocalPublishAssets)" /> + <_ResolvedCopyLocalPublishAssets Include="@(_ResolvedCopyLocalPublishAssetsWithoutConflicts)" /> + + + + + + + + + + + + + + + Properties + + + $(Configuration.ToUpperInvariant()) + + $(ImplicitConfigurationDefine.Replace('-', '_')) + $(ImplicitConfigurationDefine.Replace('.', '_')) + $(ImplicitConfigurationDefine.Replace(' ', '_')) + $(DefineConstants);$(ImplicitConfigurationDefine) + + + + + + + + $(WarningsAsErrors);SYSLIB0011 + + + + + + + + + + + + <_NoneAnalysisLevel>4.0 + + <_LatestAnalysisLevel>9.0 + <_PreviewAnalysisLevel>10.0 + latest + $(_TargetFrameworkVersionWithoutV) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevel), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevel), '$(AnalysisLevelPrefix)-', '')) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefix) + $(AnalysisLevel) + + + + 9999 + + 4 + + $(_TargetFrameworkVersionWithoutV.Split('.')[0]) + + + + + true + + true + + true + + true + + false + + + + false + false + false + false + false + + + + + + + + <_NETAnalyzersSDKAssemblyVersion>10.0.102 + + + + CA1000;CA1001;CA1002;CA1003;CA1005;CA1008;CA1010;CA1012;CA1014;CA1016;CA1017;CA1018;CA1019;CA1021;CA1024;CA1027;CA1028;CA1030;CA1031;CA1032;CA1033;CA1034;CA1036;CA1040;CA1041;CA1043;CA1044;CA1045;CA1046;CA1047;CA1050;CA1051;CA1052;CA1054;CA1055;CA1056;CA1058;CA1060;CA1061;CA1062;CA1063;CA1064;CA1065;CA1066;CA1067;CA1068;CA1069;CA1070;CA1200;CA1303;CA1304;CA1305;CA1307;CA1308;CA1309;CA1310;CA1311;CA1401;CA1416;CA1417;CA1418;CA1419;CA1420;CA1421;CA1422;CA1501;CA1502;CA1505;CA1506;CA1507;CA1508;CA1509;CA1510;CA1511;CA1512;CA1513;CA1514;CA1515;CA1516;CA1700;CA1707;CA1708;CA1710;CA1711;CA1712;CA1713;CA1715;CA1716;CA1720;CA1721;CA1724;CA1725;CA1727;CA1802;CA1805;CA1806;CA1810;CA1812;CA1813;CA1814;CA1815;CA1816;CA1819;CA1820;CA1821;CA1822;CA1823;CA1824;CA1825;CA1826;CA1827;CA1828;CA1829;CA1830;CA1831;CA1832;CA1833;CA1834;CA1835;CA1836;CA1837;CA1838;CA1839;CA1840;CA1841;CA1842;CA1843;CA1844;CA1845;CA1846;CA1847;CA1848;CA1849;CA1850;CA1851;CA1852;CA1853;CA1854;CA1855;CA1856;CA1857;CA1858;CA1859;CA1860;CA1861;CA1862;CA1863;CA1864;CA1865;CA1866;CA1867;CA1868;CA1869;CA1870;CA1871;CA1872;CA1873;CA1874;CA1875;CA2000;CA2002;CA2007;CA2008;CA2009;CA2011;CA2012;CA2013;CA2014;CA2015;CA2016;CA2017;CA2018;CA2019;CA2020;CA2021;CA2022;CA2023;CA2024;CA2025;CA2100;CA2101;CA2119;CA2153;CA2200;CA2201;CA2207;CA2208;CA2211;CA2213;CA2214;CA2215;CA2216;CA2217;CA2218;CA2219;CA2224;CA2225;CA2226;CA2227;CA2231;CA2234;CA2235;CA2237;CA2241;CA2242;CA2243;CA2244;CA2245;CA2246;CA2247;CA2248;CA2249;CA2250;CA2251;CA2252;CA2253;CA2254;CA2255;CA2256;CA2257;CA2258;CA2259;CA2260;CA2261;CA2262;CA2263;CA2264;CA2265;CA2300;CA2301;CA2302;CA2305;CA2310;CA2311;CA2312;CA2315;CA2321;CA2322;CA2326;CA2327;CA2328;CA2329;CA2330;CA2350;CA2351;CA2352;CA2353;CA2354;CA2355;CA2356;CA2361;CA2362;CA3001;CA3002;CA3003;CA3004;CA3005;CA3006;CA3007;CA3008;CA3009;CA3010;CA3011;CA3012;CA3061;CA3075;CA3076;CA3077;CA3147;CA5350;CA5351;CA5358;CA5359;CA5360;CA5361;CA5362;CA5363;CA5364;CA5365;CA5366;CA5367;CA5368;CA5369;CA5370;CA5371;CA5372;CA5373;CA5374;CA5375;CA5376;CA5377;CA5378;CA5379;CA5380;CA5381;CA5382;CA5383;CA5384;CA5385;CA5386;CA5387;CA5388;CA5389;CA5390;CA5391;CA5392;CA5393;CA5394;CA5395;CA5396;CA5397;CA5398;CA5399;CA5400;CA5401;CA5402;CA5403;CA5404;CA5405 + $(CodeAnalysisTreatWarningsAsErrors) + $(WarningsNotAsErrors);$(CodeAnalysisRuleIds) + + + + + + + + $([System.Text.RegularExpressions.Regex]::Replace($(EffectiveAnalysisLevel), '(\.0)*$', '')) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzers>$(AnalysisLevelSuffix) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzers Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzers)' == ''">$(AnalysisMode) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzers Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzers)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzers Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzers)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzers Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzers)' == ''">Default + + + $(CodeAnalysisTreatWarningsAsErrors) + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzers_WarnAsErrorSuffix Condition="'$(EffectiveCodeAnalysisTreatWarningsAsErrors)' == 'true'">_warnaserror + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzers Condition="'$(MicrosoftCodeAnalysisNetAnalyzersRulesVersion)' != ''">AnalysisLevel_$(MicrosoftCodeAnalysisNetAnalyzersRulesVersion.Replace(".","_"))_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzers)$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzers_WarnAsErrorSuffix).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzers>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzers.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzers Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzers)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisNetAnalyzers Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzers)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzers)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzers) + + + + + + + + + + $(AnalysisLevel) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelDesign), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelDesign), '$(AnalysisLevelPrefixDesign)-', '')) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefixDesign) + $(AnalysisLevelDesign) + + $([System.Text.RegularExpressions.Regex]::Replace($(EffectiveAnalysisLevelDesign), '(\.0)*$', '')) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDesign>$(AnalysisLevelSuffixDesign) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDesign Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDesign)' == ''">$(AnalysisModeDesign) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDesign Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDesign)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDesign Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDesign)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDesign Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDesign)' == ''">Default + + + $(CodeAnalysisTreatWarningsAsErrors) + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDesign_WarnAsErrorSuffix Condition="'$(EffectiveCodeAnalysisTreatWarningsAsErrors)' == 'true'">_warnaserror + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDesign Condition="'$(MicrosoftCodeAnalysisNetAnalyzersDesignRulesVersion)' != ''">AnalysisLevelDesign_$(MicrosoftCodeAnalysisNetAnalyzersDesignRulesVersion.Replace(".","_"))_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDesign)$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDesign_WarnAsErrorSuffix).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDesign>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDesign.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersDesign Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersDesign)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisNetAnalyzersDesign Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDesign)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersDesign)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDesign) + + + + + + + + + + $(AnalysisLevel) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelDocumentation), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelDocumentation), '$(AnalysisLevelPrefixDocumentation)-', '')) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefixDocumentation) + $(AnalysisLevelDocumentation) + + $([System.Text.RegularExpressions.Regex]::Replace($(EffectiveAnalysisLevelDocumentation), '(\.0)*$', '')) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDocumentation>$(AnalysisLevelSuffixDocumentation) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDocumentation Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDocumentation)' == ''">$(AnalysisModeDocumentation) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDocumentation Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDocumentation)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDocumentation Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDocumentation)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDocumentation Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDocumentation)' == ''">Default + + + $(CodeAnalysisTreatWarningsAsErrors) + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDocumentation_WarnAsErrorSuffix Condition="'$(EffectiveCodeAnalysisTreatWarningsAsErrors)' == 'true'">_warnaserror + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDocumentation Condition="'$(MicrosoftCodeAnalysisNetAnalyzersDocumentationRulesVersion)' != ''">AnalysisLevelDocumentation_$(MicrosoftCodeAnalysisNetAnalyzersDocumentationRulesVersion.Replace(".","_"))_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersDocumentation)$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDocumentation_WarnAsErrorSuffix).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDocumentation>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDocumentation.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersDocumentation Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersDocumentation)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisNetAnalyzersDocumentation Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDocumentation)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersDocumentation)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersDocumentation) + + + + + + + + + + $(AnalysisLevel) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelGlobalization), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelGlobalization), '$(AnalysisLevelPrefixGlobalization)-', '')) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefixGlobalization) + $(AnalysisLevelGlobalization) + + $([System.Text.RegularExpressions.Regex]::Replace($(EffectiveAnalysisLevelGlobalization), '(\.0)*$', '')) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersGlobalization>$(AnalysisLevelSuffixGlobalization) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersGlobalization Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersGlobalization)' == ''">$(AnalysisModeGlobalization) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersGlobalization Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersGlobalization)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersGlobalization Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersGlobalization)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersGlobalization Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersGlobalization)' == ''">Default + + + $(CodeAnalysisTreatWarningsAsErrors) + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersGlobalization_WarnAsErrorSuffix Condition="'$(EffectiveCodeAnalysisTreatWarningsAsErrors)' == 'true'">_warnaserror + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersGlobalization Condition="'$(MicrosoftCodeAnalysisNetAnalyzersGlobalizationRulesVersion)' != ''">AnalysisLevelGlobalization_$(MicrosoftCodeAnalysisNetAnalyzersGlobalizationRulesVersion.Replace(".","_"))_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersGlobalization)$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersGlobalization_WarnAsErrorSuffix).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersGlobalization>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersGlobalization.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersGlobalization Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersGlobalization)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisNetAnalyzersGlobalization Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersGlobalization)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersGlobalization)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersGlobalization) + + + + + + + + + + $(AnalysisLevel) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelInteroperability), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelInteroperability), '$(AnalysisLevelPrefixInteroperability)-', '')) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefixInteroperability) + $(AnalysisLevelInteroperability) + + $([System.Text.RegularExpressions.Regex]::Replace($(EffectiveAnalysisLevelInteroperability), '(\.0)*$', '')) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersInteroperability>$(AnalysisLevelSuffixInteroperability) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersInteroperability Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersInteroperability)' == ''">$(AnalysisModeInteroperability) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersInteroperability Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersInteroperability)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersInteroperability Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersInteroperability)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersInteroperability Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersInteroperability)' == ''">Default + + + $(CodeAnalysisTreatWarningsAsErrors) + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersInteroperability_WarnAsErrorSuffix Condition="'$(EffectiveCodeAnalysisTreatWarningsAsErrors)' == 'true'">_warnaserror + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersInteroperability Condition="'$(MicrosoftCodeAnalysisNetAnalyzersInteroperabilityRulesVersion)' != ''">AnalysisLevelInteroperability_$(MicrosoftCodeAnalysisNetAnalyzersInteroperabilityRulesVersion.Replace(".","_"))_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersInteroperability)$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersInteroperability_WarnAsErrorSuffix).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersInteroperability>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersInteroperability.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersInteroperability Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersInteroperability)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisNetAnalyzersInteroperability Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersInteroperability)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersInteroperability)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersInteroperability) + + + + + + + + + + $(AnalysisLevel) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelMaintainability), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelMaintainability), '$(AnalysisLevelPrefixMaintainability)-', '')) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefixMaintainability) + $(AnalysisLevelMaintainability) + + $([System.Text.RegularExpressions.Regex]::Replace($(EffectiveAnalysisLevelMaintainability), '(\.0)*$', '')) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersMaintainability>$(AnalysisLevelSuffixMaintainability) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersMaintainability Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersMaintainability)' == ''">$(AnalysisModeMaintainability) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersMaintainability Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersMaintainability)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersMaintainability Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersMaintainability)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersMaintainability Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersMaintainability)' == ''">Default + + + $(CodeAnalysisTreatWarningsAsErrors) + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersMaintainability_WarnAsErrorSuffix Condition="'$(EffectiveCodeAnalysisTreatWarningsAsErrors)' == 'true'">_warnaserror + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersMaintainability Condition="'$(MicrosoftCodeAnalysisNetAnalyzersMaintainabilityRulesVersion)' != ''">AnalysisLevelMaintainability_$(MicrosoftCodeAnalysisNetAnalyzersMaintainabilityRulesVersion.Replace(".","_"))_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersMaintainability)$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersMaintainability_WarnAsErrorSuffix).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersMaintainability>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersMaintainability.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersMaintainability Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersMaintainability)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisNetAnalyzersMaintainability Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersMaintainability)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersMaintainability)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersMaintainability) + + + + + + + + + + $(AnalysisLevel) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelNaming), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelNaming), '$(AnalysisLevelPrefixNaming)-', '')) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefixNaming) + $(AnalysisLevelNaming) + + $([System.Text.RegularExpressions.Regex]::Replace($(EffectiveAnalysisLevelNaming), '(\.0)*$', '')) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersNaming>$(AnalysisLevelSuffixNaming) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersNaming Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersNaming)' == ''">$(AnalysisModeNaming) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersNaming Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersNaming)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersNaming Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersNaming)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersNaming Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersNaming)' == ''">Default + + + $(CodeAnalysisTreatWarningsAsErrors) + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersNaming_WarnAsErrorSuffix Condition="'$(EffectiveCodeAnalysisTreatWarningsAsErrors)' == 'true'">_warnaserror + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersNaming Condition="'$(MicrosoftCodeAnalysisNetAnalyzersNamingRulesVersion)' != ''">AnalysisLevelNaming_$(MicrosoftCodeAnalysisNetAnalyzersNamingRulesVersion.Replace(".","_"))_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersNaming)$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersNaming_WarnAsErrorSuffix).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersNaming>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersNaming.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersNaming Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersNaming)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisNetAnalyzersNaming Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersNaming)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersNaming)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersNaming) + + + + + + + + + + $(AnalysisLevel) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelPerformance), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelPerformance), '$(AnalysisLevelPrefixPerformance)-', '')) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefixPerformance) + $(AnalysisLevelPerformance) + + $([System.Text.RegularExpressions.Regex]::Replace($(EffectiveAnalysisLevelPerformance), '(\.0)*$', '')) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersPerformance>$(AnalysisLevelSuffixPerformance) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersPerformance Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersPerformance)' == ''">$(AnalysisModePerformance) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersPerformance Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersPerformance)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersPerformance Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersPerformance)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersPerformance Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersPerformance)' == ''">Default + + + $(CodeAnalysisTreatWarningsAsErrors) + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersPerformance_WarnAsErrorSuffix Condition="'$(EffectiveCodeAnalysisTreatWarningsAsErrors)' == 'true'">_warnaserror + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersPerformance Condition="'$(MicrosoftCodeAnalysisNetAnalyzersPerformanceRulesVersion)' != ''">AnalysisLevelPerformance_$(MicrosoftCodeAnalysisNetAnalyzersPerformanceRulesVersion.Replace(".","_"))_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersPerformance)$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersPerformance_WarnAsErrorSuffix).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersPerformance>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersPerformance.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersPerformance Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersPerformance)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisNetAnalyzersPerformance Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersPerformance)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersPerformance)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersPerformance) + + + + + + + + + + $(AnalysisLevel) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelReliability), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelReliability), '$(AnalysisLevelPrefixReliability)-', '')) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefixReliability) + $(AnalysisLevelReliability) + + $([System.Text.RegularExpressions.Regex]::Replace($(EffectiveAnalysisLevelReliability), '(\.0)*$', '')) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersReliability>$(AnalysisLevelSuffixReliability) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersReliability Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersReliability)' == ''">$(AnalysisModeReliability) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersReliability Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersReliability)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersReliability Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersReliability)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersReliability Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersReliability)' == ''">Default + + + $(CodeAnalysisTreatWarningsAsErrors) + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersReliability_WarnAsErrorSuffix Condition="'$(EffectiveCodeAnalysisTreatWarningsAsErrors)' == 'true'">_warnaserror + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersReliability Condition="'$(MicrosoftCodeAnalysisNetAnalyzersReliabilityRulesVersion)' != ''">AnalysisLevelReliability_$(MicrosoftCodeAnalysisNetAnalyzersReliabilityRulesVersion.Replace(".","_"))_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersReliability)$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersReliability_WarnAsErrorSuffix).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersReliability>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersReliability.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersReliability Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersReliability)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisNetAnalyzersReliability Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersReliability)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersReliability)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersReliability) + + + + + + + + + + $(AnalysisLevel) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelSecurity), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelSecurity), '$(AnalysisLevelPrefixSecurity)-', '')) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefixSecurity) + $(AnalysisLevelSecurity) + + $([System.Text.RegularExpressions.Regex]::Replace($(EffectiveAnalysisLevelSecurity), '(\.0)*$', '')) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersSecurity>$(AnalysisLevelSuffixSecurity) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersSecurity Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersSecurity)' == ''">$(AnalysisModeSecurity) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersSecurity Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersSecurity)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersSecurity Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersSecurity)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersSecurity Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersSecurity)' == ''">Default + + + $(CodeAnalysisTreatWarningsAsErrors) + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersSecurity_WarnAsErrorSuffix Condition="'$(EffectiveCodeAnalysisTreatWarningsAsErrors)' == 'true'">_warnaserror + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersSecurity Condition="'$(MicrosoftCodeAnalysisNetAnalyzersSecurityRulesVersion)' != ''">AnalysisLevelSecurity_$(MicrosoftCodeAnalysisNetAnalyzersSecurityRulesVersion.Replace(".","_"))_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersSecurity)$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersSecurity_WarnAsErrorSuffix).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersSecurity>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersSecurity.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersSecurity Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersSecurity)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisNetAnalyzersSecurity Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersSecurity)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersSecurity)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersSecurity) + + + + + + + + + + $(AnalysisLevel) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelUsage), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelUsage), '$(AnalysisLevelPrefixUsage)-', '')) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefixUsage) + $(AnalysisLevelUsage) + + $([System.Text.RegularExpressions.Regex]::Replace($(EffectiveAnalysisLevelUsage), '(\.0)*$', '')) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersUsage>$(AnalysisLevelSuffixUsage) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersUsage Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersUsage)' == ''">$(AnalysisModeUsage) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersUsage Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersUsage)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersUsage Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersUsage)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersUsage Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersUsage)' == ''">Default + + + $(CodeAnalysisTreatWarningsAsErrors) + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersUsage_WarnAsErrorSuffix Condition="'$(EffectiveCodeAnalysisTreatWarningsAsErrors)' == 'true'">_warnaserror + + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersUsage Condition="'$(MicrosoftCodeAnalysisNetAnalyzersUsageRulesVersion)' != ''">AnalysisLevelUsage_$(MicrosoftCodeAnalysisNetAnalyzersUsageRulesVersion.Replace(".","_"))_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisNetAnalyzersUsage)$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersUsage_WarnAsErrorSuffix).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersUsage>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersUsage.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersUsage Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersUsage)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisNetAnalyzersUsage Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersUsage)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisNetAnalyzersUsage)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisNetAnalyzersUsage) + + + + + + + + + + + + + + + + + + + + <_SupportedPlatformList>@(SupportedPlatform, ',') + + + + + + + + + $(CodeAnalysisTreatWarningsAsErrors) + $(WarningsNotAsErrors);$(CodeAnalysisRuleIds) + + + + + + + + + $(AnalysisLevel) + + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelStyle), '-(.)*', '')) + $([System.Text.RegularExpressions.Regex]::Replace($(AnalysisLevelStyle), '$(AnalysisLevelPrefixStyle)-', '')) + + $(AnalysisLevelSuffix) + + $(AnalysisMode) + + $(_NoneAnalysisLevel) + $(_LatestAnalysisLevel) + $(_PreviewAnalysisLevel) + + $(AnalysisLevelPrefixStyle) + $(AnalysisLevelStyle) + + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle>$(AnalysisModeStyle) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle)' == ''">$(AnalysisLevelSuffixStyle) + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle)' == 'AllEnabledByDefault'">All + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle)' == 'AllDisabledByDefault'">None + <_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle Condition="'$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle)' == ''">Default + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisCSharpCodeStyle>AnalysisLevelStyle_$(_GlobalAnalyzerConfigAnalysisMode_MicrosoftCodeAnalysisCSharpCodeStyle).globalconfig + <_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisCSharpCodeStyle>$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisCSharpCodeStyle.ToLowerInvariant()) + <_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisCSharpCodeStyle Condition="'$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisCSharpCodeStyle)' == ''">$(MSBuildThisFileDirectory)config + <_GlobalAnalyzerConfigFile_MicrosoftCodeAnalysisCSharpCodeStyle Condition="'$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisCSharpCodeStyle)' != ''">$(_GlobalAnalyzerConfigDir_MicrosoftCodeAnalysisCSharpCodeStyle)\$(_GlobalAnalyzerConfigFileName_MicrosoftCodeAnalysisCSharpCodeStyle) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(StartWorkingDirectory) + + + + + $(StartProgram) + $(StartArguments) + + + + + + dotnet + <_NetCoreRunArguments>exec "$(TargetPath)" + $(_NetCoreRunArguments) $(StartArguments) + $(_NetCoreRunArguments) + + + $(TargetDir)$(AssemblyName)$(_NativeExecutableExtension) + $(StartArguments) + + + + + $(TargetPath) + $(StartArguments) + + + mono + "$(TargetPath)" $(StartArguments) + + + + + + $([System.IO.Path]::GetFullPath($([System.IO.Path]::Combine('$(MSBuildProjectDirectory)', '$(RunWorkingDirectory)')))) + + + + + + + + + + + + + + true + true + + + $(AfterMicrosoftNETSdkTargets);$(MSBuildThisFileDirectory)../../Microsoft.NET.Sdk.WindowsDesktop/targets/Microsoft.NET.Sdk.WindowsDesktop.targets + + + + + + + + + + true + + + + true + + + + + <_TargetPlatformVersionUsesCsWinRT3 Condition="$([System.Version]::Parse('$(TargetPlatformVersion)').Revision) == 1">true + $([System.Version]::Parse('$(TargetPlatformVersion)').Major).$([System.Version]::Parse('$(TargetPlatformVersion)').Minor).$([System.Version]::Parse('$(TargetPlatformVersion)').Build).0 + $(TargetPlatformVersion) + + + + 7.0 + $(TargetPlatformVersion) + + + + $(TargetPlatformMinVersion) + $(SupportedOSPlatformVersion) + + $(EffectiveTargetPlatformVersion) + $(EffectiveTargetPlatformVersion) + + + + true + true + true + 1 + + + + + + + + + + + + + + + + + + + + + + true + false + + + + + + + + + + + + <_WindowsSDKUnresolvedRef Include="@(ResolveAssemblyReferenceUnresolvedAssemblyConflicts)" Condition="'%(Identity)' == 'Microsoft.Windows.SDK.NET' " /> + + + + + + + + + + + <_ResolvedProjectReferencePaths Remove="@(_ResolvedProjectReferencePaths)" Condition="('%(_ResolvedProjectReferencePaths.Extension)' == '.winmd') And ('%(_ResolvedProjectReferencePaths.Implementation)' == 'WinRT.Host.dll')" /> + + + + + + + + + + + <_WindowsSDKXamlTransitiveFrameworkReference Include="@(TransitiveFrameworkReference)" Condition="'%(Identity)' == 'Microsoft.Windows.SDK.NET.Ref.Xaml'" /> + + + + + + + + + + + + + + + true + false + + $(IntermediateOutputPath) + true + true + true + false + -1 + High + High + true + + <_CsWinRTGeneratorInteropAssemblyName>WinRT.Interop + <_CsWinRTGeneratorInteropAssemblyFileName>$(_CsWinRTGeneratorInteropAssemblyName).dll + <_CsWinRTGeneratorInteropAssemblyPath>$([MSBuild]::NormalizePath('$(CsWinRTGeneratorInteropAssemblyDirectory)', '$(_CsWinRTGeneratorInteropAssemblyFileName)')) + + <_RunCsWinRTGeneratorPropertyInputsCachePath Condition="'$(_RunCsWinRTGeneratorPropertyInputsCachePath)' == ''">$(IntermediateOutputPath)$(MSBuildProjectName).cswinrtgen.cache + <_RunCsWinRTGeneratorPropertyInputsCachePath>$([MSBuild]::NormalizePath('$(MSBuildProjectDirectory)', '$(_RunCsWinRTGeneratorPropertyInputsCachePath)')) + + + + + + <_WinRTRuntimeDllReferencePath Include="@(ReferencePath)" Condition="'%(Filename)%(Extension)' == 'WinRT.Runtime.dll'" /> + + + + <_WinRTRuntimeDllDirectory>$([System.IO.Path]::GetDirectoryName('%(_WinRTRuntimeDllReferencePath.FullPath)')) + <_CsWinRTOrTargetingPackLibDirectory>$([System.IO.Path]::GetDirectoryName('$(_WinRTRuntimeDllDirectory)')) + <_CsWinRTOrTargetingPackRootDirectory>$([System.IO.Path]::GetDirectoryName('$(_CsWinRTOrTargetingPackLibDirectory)')) + <_CsWinRTOrTargetingPackToolsDirectory>$([System.IO.Path]::Combine('$(_CsWinRTOrTargetingPackRootDirectory)', 'tools')) + $(CsWinRTToolsDirectory) + $(_CsWinRTOrTargetingPackToolsDirectory) + + + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTEffectiveToolsDirectory)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTToolsArchitecture)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorInteropAssemblyDirectory)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorDebugReproDirectory)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTUseWindowsUIXamlProjections)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorValidateWinRTRuntimeAssemblyVersion)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorValidateWinRTRuntimeDllVersion2References)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorEnableIncrementalGeneration)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorTreatWarningsAsErrors)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorMaxDegreesOfParallelism)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="@(CsWinRTGeneratorAdditionalArgument)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorStandardOutputImportance)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorStandardErrorImportance)" /> + <_RunCsWinRTGeneratorInputsCacheToHash Include="$(CsWinRTGeneratorLogStandardErrorAsError)" /> + + + + + + + + + + + + + + + $(_CsWinRTGeneratorInteropAssemblyName) + .NETCoreApp + true + true + true + _RunCsWinRTGenerator + AnyCPU + + + + + + + + <_SourceItemsToCopyToOutputDirectory Include="@(CsWinRTGeneratorInteropAssemblyPath)" TargetPath="$(_CsWinRTGeneratorInteropAssemblyFileName)" /> + + <_SourceItemsToCopyToPublishDirectory Include="@(CsWinRTGeneratorInteropAssemblyPath)" TargetPath="$(_CsWinRTGeneratorInteropAssemblyFileName)" /> + + + + + + + + + + + 0.0 + $(TargetPlatformIdentifier),Version=$(TargetPlatformVersion) + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformSDKDisplayName($(TargetPlatformIdentifier), $(TargetPlatformVersion))) + + + + $(TargetPlatformVersion) + + + + $(EffectiveTargetPlatformVersion) + + + + + + + + + + + + + + + + + + + + + + + + + Platforms\Android\AndroidManifest.xml + + + + + + + + + + + + <_ResizetizerTaskAssemblyName>$(MSBuildThisFileDirectory)\Microsoft.Maui.Resizetizer.dll + + + + + + + + + + + + + + $(CleanDependsOn); + _CleanResizetizer; + + <_ResizetizerPlatformIdentifier>$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) + <_ResizetizerNoTargetPlatform Condition="'$(_ResizetizerPlatformIdentifier)' == ''">True + <_ResizetizerPlatformIsAndroid Condition="'$(_ResizetizerPlatformIdentifier)' == 'android'">True + <_ResizetizerPlatformIsiOS Condition="'$(_ResizetizerPlatformIdentifier)' == 'ios'">True + <_ResizetizerPlatformIsMacCatalyst Condition="'$(_ResizetizerPlatformIdentifier)' == 'maccatalyst'">True + <_ResizetizerPlatformIsmacOS Condition="'$(_ResizetizerPlatformIdentifier)' == 'macos'">True + <_ResizetizerPlatformIstvOS Condition="'$(_ResizetizerPlatformIdentifier)' == 'tvos'">True + <_ResizetizerPlatformIsWindows Condition="$(_ResizetizerPlatformIdentifier.Contains('windows')) == 'True'">True + <_ResizetizerPlatformIsTizen Condition="'$(_ResizetizerPlatformIdentifier)' == 'tizen'">True + <_ResizetizerIntermediateOutputPath Condition=" '$(_ResizetizerIntermediateOutputPath)' == '' ">$(IntermediateOutputPath) + <_ResizetizerInputsFile>$(_ResizetizerIntermediateOutputPath)mauiimage.inputs + <_ResizetizerOutputsFile>$(_ResizetizerIntermediateOutputPath)mauiimage.outputs + <_ResizetizerStampFile>$(_ResizetizerIntermediateOutputPath)mauiimage.stamp + <_MauiFontInputsFile>$(_ResizetizerIntermediateOutputPath)mauifont.inputs + <_MauiFontStampFile>$(_ResizetizerIntermediateOutputPath)mauifont.stamp + <_MauiSplashInputsFile>$(_ResizetizerIntermediateOutputPath)mauisplash.inputs + <_MauiSplashStampFile>$(_ResizetizerIntermediateOutputPath)mauisplash.stamp + <_MauiManifestStampFile>$(_ResizetizerIntermediateOutputPath)mauimanifest.stamp + <_ResizetizerIntermediateOutputRoot>$(_ResizetizerIntermediateOutputPath)resizetizer\ + <_MauiIntermediateImages>$(_ResizetizerIntermediateOutputRoot)r\ + <_MauiIntermediateFonts>$(_ResizetizerIntermediateOutputRoot)f\ + <_MauiIntermediateSplashScreen>$(_ResizetizerIntermediateOutputRoot)sp\ + <_MauiIntermediateManifest>$(_ResizetizerIntermediateOutputRoot)m\ + False + <_ResizetizerDefaultInvalidFilenamesErrorMessage>One or more invalid file names were detected. File names must be lowercase, start and end with a letter character, and contain only alphanumeric characters or underscores: + <_ResizetizerDefaultDuplicateFilenamesErrorMessage>One or more duplicate file names were detected. All image output filenames must be unique: + <_ResizetizerThrowsErrorOnInvalidFilename>true + <_ResizetizerThrowsErrorOnInvalidFilename Condition="'$(ResizetizerErrorOnInvalidFilename)' == 'false'">false + <_ResizetizerThrowsErrorOnDuplicateOutputFilename>true + <_ResizetizerThrowsErrorOnDuplicateOutputFilename Condition="'$(ResizetizerErrorOnDuplicateOutputFilename)' == 'false'">false + true + true + true + true + + + <_ResizetizerIsNetCore>True + <_ResizetizerIsAndroidApp Condition=" '$(_ResizetizerPlatformIsAndroid)' == 'True' And '$(AndroidApplication)' == 'True'">True + <_ResizetizerIsiOSApp Condition="( '$(_ResizetizerPlatformIsiOS)' == 'True' OR '$(_ResizetizerPlatformIsMacCatalyst)' == 'True' ) And ('$(OutputType)' == 'Exe' Or '$(IsAppExtension)' == 'True')">True + <_ResizetizerIsiOSSpecificApp Condition=" '$(_ResizetizerPlatformIsiOS)' == 'True' And ('$(OutputType)' == 'Exe' Or '$(IsAppExtension)' == 'True')">True + <_ResizetizerIsWPFApp Condition="'$(IsApplication)' == 'True' And '$(NuGetRuntimeIdentifier)' == 'win' And '$(_ResizetizerPlatformIsWindows)' == 'True'">True + <_ResizetizerIsWindowsAppSdk Condition="'$(MicrosoftWindowsAppSDKPackageDir)' != '' And '$(_ResizetizerPlatformIsWindows)' == 'True' And ('$(OutputType)' == 'WinExe' Or '$(OutputType)' == 'Exe')">True + <_ResizetizerIsTizenApp Condition="'$(_ResizetizerPlatformIsTizen)' == 'True' And ( '$(OutputType)' == 'Exe' )">True + + + <_ResizetizerIsCompatibleApp>True + + $(ResizetizeDependsOnTargets); + ResizetizeCollectItems; + ProcessMauiSplashScreens; + _ReadResizetizeImagesOutputs; + + + $(ProcessMauiFontsDependsOnTargets); + ResizetizeCollectItems; + ProcessMauiAssets; + ProcessMauiSplashScreens; + + + + + ios + + true + + $(CollectBundleResourcesDependsOn); + ResizetizeCollectItems; + + + $(CompileImageAssetsDependsOn); + ResizetizeCollectItems; + + + $(ResizetizeAfterTargets); + ResizetizeCollectItems; + + + ProcessMauiFonts; + ProcessMauiSplashScreens; + $(CollectAppManifestsDependsOn) + + + + + android + + $(ResizetizeCollectItemsBeforeTargets); + _ComputeAndroidResourcePaths; + + + $(ResizetizeAfterTargets); + ResizetizeCollectItems; + + + $(ProcessMauiFontsAfterTargets); + ResizetizeCollectItems; + + + + + uwp + + $(ResizetizeBeforeTargets); + AssignTargetPaths; + + + $(ProcessMauiFontsBeforeTargets); + AssignTargetPaths; + + + $(MauiGeneratePackageAppxManifestDependsOnTargets); + ResizetizeCollectItems; + + + + + wpf + + $(ResizetizeBeforeTargets); + FileClassification; + + + $(ProcessMauiFontsBeforeTargets); + FileClassification; + + + + + tizen + + $(ResizetizeBeforeTargets); + PrepareResources; + + + $(ResizetizeAfterTargets); + ResizetizeCollectItems; + + + $(ProcessMauiFontsAfterTargets); + ResizetizeCollectItems; + + + + + + + + + + + + + + + + + + + + + + + + + + <_ResizetizeCollectItemsProjectWithOIS Include="@(_ResolvedProjectReferencePaths->HasMetadata('OriginalProjectReferenceItemSpec'))" /> + + <_ResizetizeCollectItemsProjectWithItemSpec Include="@(_ResizetizeCollectItemsProjectWithOIS->'%(OriginalProjectReferenceItemSpec)')" /> + + <_ResizetizeCollectItemsProject Include="@(_ResizetizeCollectItemsProjectWithItemSpec->HasMetadata('NearestTargetFramework'))" /> + + <_ResizetizeCollectItemsProject Include="@(ProjectReference)" Exclude="@(_ResizetizeCollectItemsProject)" NearestTargetFramework="$(TargetFramework)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_MauiSplashScreenWithHashes Update="@(_MauiSplashScreenWithHashes)" InputsFileHash="$(_MauiSplashInputsFileHash)" /> + + + + + + + + + + + <_MauiAssetWithLinkMetadata Include="@(MauiAsset)" Link="%(MauiAsset.LogicalName)" Condition="'%(MauiAsset.Link)' == '' And '%(MauiAsset.LogicalName)' != ''" /> + <_MauiAssetWithLinkMetadata Include="@(MauiAsset)" Condition="'%(MauiAsset.Link)' != '' Or '%(MauiAsset.LogicalName)' == ''" /> + + + + <_MauiAssetItemMetadata Condition="'$(_ResizetizerIsAndroidApp)' == 'True'">Link + <_MauiAssetItemMetadata Condition="'$(_ResizetizerIsiOSApp)' == 'True'">Link + <_MauiAssetItemMetadata Condition="'$(_ResizetizerIsWindowsAppSdk)' == 'True'">TargetPath + <_MauiAssetItemMetadata Condition="'$(_ResizetizerIsTizenApp)' == 'True'">TizenTpkFileName + + + + + + + + + + + + + + + + + + + + + <_MauiHasSplashScreens>false + <_MauiHasSplashScreens Condition="'@(MauiSplashScreen->Count())' != '0'">true + <_MauiShouldGenerateSplashScreen Condition="'$(_MauiHasSplashScreens)' == 'true'">true + <_MauiShouldGenerateSplashScreen Condition="'$(_ResizetizerIsiOSSpecificApp)' == 'True' and '$(_MauiHasSplashScreens)' != 'true' and '$(EnableBlankMauiSplashScreen)' == 'true'">true + + + + + + + <_MauiSplashAssets Include="$(_MauiIntermediateSplashScreen)**\*" /> + + $(_ResizetizerStampFile) + + + + + + <_MauiSplashScreenWithHashesInFilename Include="@(_MauiSplashScreenWithHashes->HasMetadata('Link'))" OriginalLink="%(_MauiSplashScreenWithHashes.Link)" Link="$([System.IO.Path]::GetFilenameWithoutExtension('%(_MauiSplashScreenWithHashes.Link)'))_%(InputsFileHash)$([System.IO.Path]::GetExtension('%(_MauiSplashScreenWithHashes.Link)'))" /> + <_MauiSplashScreenWithHashesInFilename Include="@(_MauiSplashScreenWithHashes)" Exclude="@(_MauiSplashScreenWithHashesInFilename)" Link="%(Filename)_%(InputsFileHash)%(Extension)" /> + + + + <_MauiIntermediateStoryboard>$(_MauiIntermediateSplashScreen)MauiSplash.storyboard + <_MauiIntermediatePList>$(_MauiIntermediateSplashScreen)MauiInfo.plist + + + + <_MauiSplashAssets Include="$(_MauiIntermediateSplashScreen)**\*" /> + <_MauiSplashStoryboard Include="$(_MauiIntermediateStoryboard)" /> + <_MauiSplashPList Include="$(_MauiIntermediatePList)" /> + <_MauiSplashImages Include="@(_MauiSplashAssets)" Exclude="@(_MauiSplashStoryboard);@(_MauiSplashPList)" /> + + + + + + + %(_MauiSplashImages.Filename)%(_MauiSplashImages.Extension) + %(_MauiSplashImages.Filename)%(_MauiSplashImages.Extension) + + + + + + <_MauiSplashAssets Include="$(_MauiIntermediateSplashScreen)**\*" /> + + %(_MauiSplashAssets.Filename)%(_MauiSplashAssets.Extension) + PreserveNewest + + + + + + <_MauiSplashAssets Include="$(_MauiIntermediateSplashScreen)**\*" /> + + <_MauiSplashScreens Include="$(_MauiIntermediateSplashScreen)splash\*" /> + + + + + + + + + + + + + + + <_MauiFontCopied Include="$(_MauiIntermediateFonts)*" /> + + + + + <_MauiFontBundleResource Include="@(_MauiFontCopied)"> + $([System.IO.Path]::GetFileName(%(_MauiFontCopied.Identity))) + $([System.IO.Path]::GetFileName(%(_MauiFontCopied.Identity))) + + + + + + + + <_MauiFontPListFiles Include="$(_MauiIntermediateFonts)MauiInfo.plist" Condition="Exists('$(_MauiIntermediateFonts)MauiInfo.plist')" /> + + + + + + + $([System.IO.Path]::GetFileName(%(_MauiFontCopied.Identity))) + + + + + + $([System.IO.Path]::GetFileName(%(_MauiFontCopied.Identity))) + PreserveNewest + + + + + + $([System.IO.Path]::GetFileName(%(_MauiFontCopied.Identity))) + $([System.IO.Path]::GetFileName(%(_MauiFontCopied.Identity))) + + + + + + + + + + + + + + + + + + + + + + <_MauiImageToProcess Include="@(MauiImage)" Condition=" '%(FileName)%(Extension)' != '.DS_Store' " /> + + + + + + + + + + <_ResizetizerCollectedImages Condition="'@(_CopiedResources->Count())' != '0'" Include="@(_CopiedResources)" /> + <_ResizetizerExistingImages Include="$(_MauiIntermediateImages)\**\*" /> + <_ResizetizerImagesToDelete Include="@(_ResizetizerExistingImages->'%(FullPath)')" /> + <_ResizetizerCollectedImages Condition="'@(_CopiedResources)' == ''" Include="@(_ResizetizerExistingImages->'%(FullPath)')" /> + <_ResizetizerImagesToDelete Remove="@(_ResizetizerCollectedImages)" /> + + + + + + + <_ResizetizerCollectedBundleResourceImages Include="@(_ResizetizerCollectedImages->'%(FullPath)')"> + %(_ResizetizerCollectedImages.Filename)%(_ResizetizerCollectedImages.Extension) + %(_ResizetizerCollectedImages.Filename)%(_ResizetizerCollectedImages.Extension) + + + + + Assets.xcassets\$([System.IO.Path]::GetFileName($([System.IO.Path]::GetDirectoryName(%(_ResizetizerCollectedBundleResourceImages.Identity)))))\%(_ResizetizerCollectedBundleResourceImages.Filename)%(_ResizetizerCollectedBundleResourceImages.Extension) + Assets.xcassets\$([System.IO.Path]::GetFileName($([System.IO.Path]::GetDirectoryName(%(_ResizetizerCollectedBundleResourceImages.Identity)))))\%(_ResizetizerCollectedBundleResourceImages.Filename)%(_ResizetizerCollectedBundleResourceImages.Extension) + Assets.xcassets\$([System.IO.Path]::GetFileName($([System.IO.Path]::GetDirectoryName(%(_ResizetizerCollectedBundleResourceImages.Identity)))))\%(_ResizetizerCollectedBundleResourceImages.Filename)%(_ResizetizerCollectedBundleResourceImages.Extension) + + + + + + + + $(_ResizetizerStampFile) + + + + + + + %(_ResizetizerCollectedImages.Filename)%(_ResizetizerCollectedImages.Extension) + PreserveNewest + + + <_MauiAppIconFile Include="@(_ResizetizerCollectedImages)" Condition="'%(Extension)' == '.ico'" /> + + + %(_MauiAppIconFile.Identity) + + + + + %(_ResizetizerCollectedImages.Filename)%(_ResizetizerCollectedImages.Extension) + %(_ResizetizerCollectedImages.Filename)%(_ResizetizerCollectedImages.Extension) + + + + + + $([System.IO.Path]::GetFullPath('$(_MauiIntermediateImages)')) + + + + + + $([MSBuild]::MakeRelative($(ResizetizerIntermediateOutputAbsolutePath), $([System.IO.Path]::GetFullPath('%(_ResizetizerCollectedImages.RelativeDir)')))) + + + + + + + + + + + + + + + + + <_MauiAppxManifest Include="@(AppxManifest)" /> + + + + + + + + <_MauiWindowsApplicationId Condition="'$(_MauiWindowsApplicationId)' == '' and '$(ApplicationIdGuid)' != ''">$(ApplicationIdGuid) + <_MauiWindowsApplicationId Condition="'$(_MauiWindowsApplicationId)' == '' and '$(ApplicationId)' != ''">$(ApplicationId) + + + + + + + + + <_MauiAppxManifest Remove="@(_MauiAppxManifest)" /> + <_MauiAppxManifest Include="$(_MauiIntermediateManifest)Package.appxmanifest" /> + + + + + + + + + + + + <_MauiAppxManifestContents>$([System.IO.File]::ReadAllText('$(_MauiIntermediateManifest)Package.appxmanifest')) + + + + + + + + + + + + + + + + <_Parameter1>Microsoft.Maui.ApplicationModel.AppInfo.PackageName + <_Parameter2>@(_MauiAppxManifestIdentity) + + + <_Parameter1>Microsoft.Maui.ApplicationModel.AppInfo.PublisherName + <_Parameter2>@(_MauiAppxManifestPublisher) + + + <_Parameter1>Microsoft.Maui.ApplicationModel.AppInfo.Name + <_Parameter2>@(_MauiAppxManifestDisplayName) + + + <_Parameter1>Microsoft.Maui.ApplicationModel.AppInfo.Version + <_Parameter2>@(_MauiAppxManifestVersion) + + + + + + + + $(_MauiIntermediateManifest)tizen-manifest.xml + + + + + + + + + + + + + + + $(MSBuildWarningsAsMessages);XA4218 + + + + 10.0.1 + 10.0 + 10.0.0 + + + + + + + + + + + + + + + + $(ApplicationDisplayVersion) + + + false + + + + <_ReferenceRelatedPaths Include="@(ReferencePath->'%(RootDir)%(Directory)%(FileName).pri')" Condition="Exists('%(RootDir)%(Directory)%(FileName).pri')" /> + + + + + + + $(EnableDefaultItems) + $(EnableDefaultMauiItems) + $(EnableDefaultMauiItems) + $(EnableDefaultMauiItems) + + + + + + + + + true + True + True + + <_MauiXamlInflator Condition="' $(MauiXamlInflator)' != '' ">$(MauiXamlInflator) + <_MauiXamlInflator Condition=" '$(MauiXamlInflator)' == '' And '$(Configuration)' == 'Debug' ">Runtime + <_MauiXamlInflator Condition=" '$(MauiXamlInflator)' == '' And '$(Configuration)' != 'Debug' ">XamlC + $(EnableMauiDiagnostics) + $(EnableDiagnostics) + true + $(MauiXamlNoWarn.Replace(';', ',')) + + true + + false + + + + + + + + + + + <_MauiBindingInterceptorsSupport Condition=" '$(_MauiBindingInterceptorsSupport)' == '' and '$(DisableMauiAnalyzers)' != 'true' ">true + $(InterceptorsPreviewNamespaces);Microsoft.Maui.Controls.Generated + + + + + + + + + + + + <_MauiTargetsImportedAgain Condition="'$(_MauiTargetsImported)'=='True'">True + <_MauiTargetsImported>True + true + false + + + + + + + + + + + + + + + + + + + + <_MauiXaml_SG Remove="@(_MauiXaml_SG)" /> + <_MauiXaml_RT Remove="@(_MauiXaml_RT)" /> + <_MauiXaml_XC Remove="@(_MauiXaml_XC)" /> + <_MauiXaml_SG Include="@(MauiXaml)" Condition="$([System.String]::new('%(MauiXaml.Inflator)').ToLowerInvariant().Contains('sourcegen'))" /> + <_MauiXaml_RT Include="@(MauiXaml)" Condition="$([System.String]::new('%(MauiXaml.Inflator)').ToLowerInvariant().Contains('runtime'))" /> + <_MauiXaml_XC Include="@(MauiXaml)" Condition="$([System.String]::new('%(MauiXaml.Inflator)').ToLowerInvariant().Contains('xamlc'))" /> + <_MauiXaml_AsEmbeddedResource Include="@(_MauiXaml_RT)" /> + <_MauiXaml_AsEmbeddedResource Include="@(_MauiXaml_XC)" KeepDuplicates="false" /> + + + + + <_MauiInjectXamlCssAdditionalFilesDependsOn> + _MauiXamlComputeInflator; + $(CreateManifestResourceNamesDependsOn); + + + + + <_MauiXamlWithResourceNames Remove="@(_MauiXamlWithResourceNames)" /> + <_MauiXamlWithTargetPath Remove="@(_MauiXamlWithTargetPath)" /> + <_MauiCssWithResourceNames Remove="@(_MauiCssWithResourceNames)" /> + <_MauiCssWithTargetPath Remove="@(_MauiCssWithTargetPath)" /> + + + + + + + + + + + + + + + + + <_MauiXamlWithResourceNames Remove="@(_MauiXamlWithResourceNames)" /> + <_MauiXamlWithTargetPath Remove="@(_MauiXamlWithTargetPath)" /> + <_MauiCssWithResourceNames Remove="@(_MauiCssWithResourceNames)" /> + <_MauiCssWithTargetPath Remove="@(_MauiCssWithTargetPath)" /> + + + + + + _MauiAddXamlEmbeddedResources; + $(PrepareResourcesDependsOn); + + <_MauiAddXamlEmbeddedResourcesDependsOn> + _MauiXamlComputeInflator + + + + + + + + + + + + $(CompileDependsOn); + XamlC; + + + + + <_MauiXamlCValidateOnly>$(MauiXamlCValidateOnly) + <_MauiXamlCValidateOnly Condition="'$(Configuration)' == 'Debug' AND '$(_MauiForceXamlCForDebug)' != 'True'">True + <_MauiXamlCValidateOnly Condition="'$(BuildingForLiveUnitTesting)' == 'True' ">True + true + <_MauiXamlCWarningsNotAsErrors>$(WarningsNotAsErrors) + <_MauiXamlCWarningsNotAsErrors Condition="'$(MauiStrictXamlCompilation)' != 'true'">$(_MauiXamlCWarningsNotAsErrors);XC0022;XC0023;XC0025 + <_MauiXamlCGenerateFullPaths Condition="'$(_MauiXamlCGenerateFullPaths)' == '' and '$(GenerateFullPaths)' == 'true'">true + <_MauiXamlCGenerateFullPaths Condition="'$(_MauiXamlCGenerateFullPaths)' == ''">false + <_MauiXamlCFullPathPrefix Condition="'$(_MauiXamlCFullPathPrefix)' == '' and '$(_MauiXamlCGenerateFullPaths)' == 'true'">$(MSBuildProjectDirectory) + + + + + + + + + + + + IncludeProguardForAndroid; + $(CoreCompileDependsOn); + + + ValidateTargetFrameworkVersionForMaui; + $(PrepareForBuildDependsOn); + + + + + + + + + + 10.0 + $(TargetFrameworkVersion.TrimStart('vV')) + + + + + + false + + + + + false + false + false + true + false + + false + + <_EnableMauiAspire Condition="'$(_EnableMauiAspire)' == '' and '$(Optimize)' != 'true'">true + <_EnableMauiAspire Condition="'$(_EnableMauiAspire)' == ''">false + + + + + + + + + + + + + + + + + false + None + false + true + None + + + + + + + + + + + + + + + + + + true + + + + false + + + false + + + false + + + false + + + false + + + + + + + + + + <_MauiXamlToRemove Condition="'$(WindowsProjectFolder)' != ''" Include="$(WindowsProjectFolder)**/*.xaml" /> + + + + + + + + <_MauiOld_ResourcePrefix>$(_ResourcePrefix) + <_ResourcePrefix>Resources;$(_ResourcePrefix) + + + + + <_ResourcePrefix>$(_MauiOld_ResourcePrefix) + + + + + $(MSBuildExtensionsPath)\Microsoft\VisualStudio\Maui\Maui.DesignTime.targets + + + + + + + + + + $(MSBuildThisFileDirectory)..\tools\net472\Microsoft.DotNet.ApiCompat.Task.dll + $(MSBuildThisFileDirectory)..\tools\net10.0\Microsoft.DotNet.ApiCompat.Task.dll + + + + + + + + + + + + + + <_UseRoslynToolsetPackage Condition="'$(ApiCompatUseRoslynToolsetPackagePath)' == 'true' and '@(PackageReference->AnyHaveMetadataValue('Identity', 'Microsoft.Net.Compilers.Toolset'))' == 'true'">true + + $([System.IO.Path]::GetDirectoryName('$(CSharpCoreTargetsPath)')) + + $(RoslynTargetsPath) + + $([System.IO.Path]::Combine('$(RoslynAssembliesPath)', 'bincore')) + + + + $(GenerateCompatibilitySuppressionFile) + + + + + + + <_apiCompatDefaultProjectSuppressionFile>$([MSBuild]::NormalizePath('$(MSBuildProjectDirectory)', 'CompatibilitySuppressions.xml')) + + $(_apiCompatDefaultProjectSuppressionFile) + + + + + + + + + + + <_ApiCompatValidatePackageSemaphoreFile>$(IntermediateOutputPath)$(MSBuildThisFileName).semaphore + + CollectApiCompatInputs;_GetReferencePathFromInnerProjects;$(RunPackageValidationDependsOn) + + + + $(PackageId) + $([MSBuild]::NormalizePath('$(NuGetPackageRoot)', '$(PackageValidationBaselineName.ToLower())', '$(PackageValidationBaselineVersion)', '$(PackageValidationBaselineName.ToLower()).$(PackageValidationBaselineVersion).nupkg')) + <_packageValidationBaselinePath Condition="'$(DisablePackageBaselineValidation)' != 'true'">$(PackageValidationBaselinePath) + + + <_PackageTargetPath Include="@(NuGetPackOutput->WithMetadataValue('Extension', '.nupkg'))" Condition="!$([System.String]::new('%(Identity)').EndsWith('.symbols.nupkg'))" /> + + + + + + + + + + $(TargetPlatformMoniker) + + + + + + + + + + + + + + + $(MSBuildThisFileDirectory)..\..\..\NuGet.Build.Tasks.Pack.targets + true + + + + + + Sdks\Microsoft.NET.Sdk\tools\net472\NuGet.Build.Tasks.Pack.dll + NuGet.Build.Tasks.Pack.dll + + + + + + + + + $(AssemblyName) + $(Version) + true + _LoadPackInputItems; _GetTargetFrameworksOutput; _WalkEachTargetPerFramework; _GetPackageFiles; $(GenerateNuspecDependsOn) + $(Description) + Package Description + false + true + true + tools + lib + content;contentFiles + $(BeforePack); _GetRestoreProjectStyle; _IntermediatePack; GenerateNuspec; $(PackDependsOn) + true + symbols.nupkg + DeterminePortableBuildCapabilities + false + false + .dll; .exe; .winmd; .json; .pri; .xml + $(DefaultAllowedOutputExtensionsInPackageBuildOutputFolder) ;$(AllowedOutputExtensionsInPackageBuildOutputFolder) + .pdb; .mdb; $(AllowedOutputExtensionsInPackageBuildOutputFolder); $(AllowedOutputExtensionsInSymbolsPackageBuildOutputFolder) + .pdb + false + + + $(GenerateNuspecDependsOn) + + + Build;$(GenerateNuspecDependsOn) + + + + + + + $(TargetFramework) + + + + $(MSBuildProjectExtensionsPath) + $(BaseOutputPath)$(Configuration)\ + $(BaseIntermediateOutputPath)$(Configuration)\ + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFrameworks /> + + + + + + <_TargetFrameworks Include="$(_ProjectFrameworks.Split(';'))" /> + + + + + + + <_PackageFilesToDelete Include="@(_OutputPackItems)" /> + + + + + + false + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + $(PrivateRepositoryUrl) + $(SourceRevisionId) + $(SourceBranchName) + + + + + + + $(MSBuildProjectFullPath) + + + + + + + + + + + + + + + + + <_ProjectPathWithVersion Include="$(MSBuildProjectFullPath)"> + $(PackageVersion) + 1.0.0 + + + + + + <_ProjectsWithTFM Include="$(MSBuildProjectFullPath)" AdditionalProperties="TargetFramework=%(_TargetFrameworks.Identity)" /> + <_ProjectsWithTFMNoBuild Include="$(MSBuildProjectFullPath)" AdditionalProperties="TargetFramework=%(_TargetFrameworks.Identity);BuildProjectReferences=false" /> + + + + + + + + + + + + + + + + + + + + + + + <_TfmWithDependenciesSuppressed Include="$(TargetFramework)" Condition="'$(SuppressDependenciesWhenPacking)' == 'true'" /> + + + + + + $(TargetFramework) + + + + + + + + + + + + + %(TfmSpecificPackageFile.RecursiveDir) + %(TfmSpecificPackageFile.BuildAction) + + + + + + <_TargetPathsToSymbolsWithTfm Include="@(DebugSymbolsProjectOutputGroupOutput)"> + $(TargetFramework) + + + + <_TargetPathsToSymbolsWithTfm Include="@(TfmSpecificDebugSymbolsFile)" /> + + + + + + <_PathToPriFile Include="$(ProjectPriFullPath)"> + $(ProjectPriFullPath) + $(ProjectPriFileName) + + + + + + + <_PackageFilesToExclude Include="@(Content)" Condition="'%(Content.Pack)' == 'false'" /> + + + + <_PackageFiles Include="@(Content)" Condition=" %(Content.Pack) != 'false' "> + Content + + <_PackageFiles Include="@(Compile)" Condition=" %(Compile.Pack) == 'true' "> + Compile + + <_PackageFiles Include="@(None)" Condition=" %(None.Pack) == 'true' "> + None + + <_PackageFiles Include="@(EmbeddedResource)" Condition=" %(EmbeddedResource.Pack) == 'true' "> + EmbeddedResource + + <_PackageFiles Include="@(ApplicationDefinition)" Condition=" %(ApplicationDefinition.Pack) == 'true' "> + ApplicationDefinition + + <_PackageFiles Include="@(Page)" Condition=" %(Page.Pack) == 'true' "> + Page + + <_PackageFiles Include="@(Resource)" Condition=" %(Resource.Pack) == 'true' "> + Resource + + <_PackageFiles Include="@(SplashScreen)" Condition=" %(SplashScreen.Pack) == 'true' "> + SplashScreen + + <_PackageFiles Include="@(DesignData)" Condition=" %(DesignData.Pack) == 'true' "> + DesignData + + <_PackageFiles Include="@(DesignDataWithDesignTimeCreatableTypes)" Condition=" %(DesignDataWithDesignTimeCreatableTypes.Pack) == 'true' "> + DesignDataWithDesignTimeCreatableTypes + + <_PackageFiles Include="@(CodeAnalysisDictionary)" Condition=" %(CodeAnalysisDictionary.Pack) == 'true' "> + CodeAnalysisDictionary + + <_PackageFiles Include="@(AndroidAsset)" Condition=" %(AndroidAsset.Pack) == 'true' "> + AndroidAsset + + <_PackageFiles Include="@(AndroidResource)" Condition=" %(AndroidResource.Pack) == 'true' "> + AndroidResource + + <_PackageFiles Include="@(BundleResource)" Condition=" %(BundleResource.Pack) == 'true' "> + BundleResource + + + + + + + <_IsNotSetContainersTargetsDir>false + <_IsNotSetContainersTargetsDir Condition=" '$(_ContainersTargetsDir)'=='' ">true + <_ContainersTargetsDir Condition="$(_IsNotSetContainersTargetsDir)">$(MSBuildThisFileDirectory)..\..\..\Containers\build\ + + + + + true + tasks + net10.0 + net472 + containerize + + $(MSBuildThisFileDirectory)..\$(ContainerTaskFolderName)\$(ContainerTaskFramework)\ + $(MSBuildThisFileDirectory)..\$(ContainerizeFolderName)\ + + $(ContainerCustomTasksFolder)$(MSBuildThisFileName).dll + + + + + + + + + + <_IsSDKContainerAllowedVersion>false + + <_IsSDKContainerAllowedVersion Condition="$([MSBuild]::VersionGreaterThan($(NetCoreSdkVersion), 7.0.100)) OR ( $([MSBuild]::VersionEquals($(NetCoreSdkVersion), 7.0.100)) AND ( $(NETCoreSdkVersion.Contains('-preview.7')) OR $(NETCoreSdkVersion.Contains('-rc')) OR $(NETCoreSdkVersion.Contains('-')) == false ) )">true + <_ContainerIsTargetingNet8TFM>false + <_ContainerIsTargetingNet8TFM Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' And $([MSBuild]::VersionGreaterThanOrEquals($(_TargetFrameworkVersionWithoutV), '8.0'))">true + <_ContainerIsSelfContained>false + <_ContainerIsSelfContained Condition="'$(SelfContained)' == 'true' or '$(PublishSelfContained)' == 'true'">true + true + + + + + + + + + + + + $(RuntimeIdentifier) + $(RuntimeIdentifiers) + linux-$(NETCoreSdkPortableRuntimeIdentifier.Split('-')[1]) + + <_InitialContainerBaseImage>$(ContainerBaseImage) + + + <_TargetRuntimeIdentifiers Include="$(ContainerRuntimeIdentifier)" Condition="'$(ContainerRuntimeIdentifier)' != ''" /> + <_TargetRuntimeIdentifiers Include="$(ContainerRuntimeIdentifiers)" Condition="@(_TargetRuntimeIdentifiers->Count()) == 0" /> + + + + + + <_TargetRuntimeIdentifiers Remove="$(_TargetRuntimeIdentifiers)" /> + + + + + + + $(RegistryUrl) + + $(PublishImageTag) + + $([System.DateTime]::UtcNow.ToString('yyyyMMddhhmmss')) + + + + + + + + + + + $(ContainerImageName) + + $(AssemblyName) + + latest + $([System.DateTime]::UtcNow.ToString('yyyyMMddhhmmss')) + + + + + + + + + + + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + $(Description) + $(Authors) + $(PackageProjectUrl) + $(PackageProjectUrl) + $(PackageVersion) + $(PackageLicenseExpression) + $(Title) + + + + + + + + + + + + + + + + + + + + + + <_TrimmedRepositoryUrl Condition="'$(RepositoryType)' == 'git' and '$(PrivateRepositoryUrl)' != '' and $(PrivateRepositoryUrl.EndsWith('.git'))">$(PrivateRepositoryUrl.Substring(0, $(PrivateRepositoryUrl.LastIndexOf('.git')))) + <_TrimmedRepositoryUrl Condition="'$(_TrimmedRepositoryUrl)' == '' and '$(PrivateRepositoryUrl)' != ''">$(PrivateRepositoryUrl) + + + + + + + + + _ContainerVerifySDKVersion; + ComputeContainerConfig; + _CheckContainersPackage; + + + + + + + <_ContainerIsTargetingWindows>false + <_ContainerIsTargetingWindows Condition="$(ContainerRuntimeIdentifier.StartsWith('win'))">true + + /app/ + C:\app\ + <_ContainerIsUsingMicrosoftDefaultImages Condition="'$(_InitialContainerBaseImage)' == ''">true + <_ContainerIsUsingMicrosoftDefaultImages Condition="'$(_InitialContainerBaseImage)' != ''">false + + + + ContainerUser + + + + + + + + + + + + <_ContainersPackageIdentity>Microsoft.NET.Build.Containers + <_WebDefaultSdkVersion>7.0.300 + <_WorkerDefaultSdkVersion>8.0.100 + <_ConsoleDefaultSdkVersion>8.0.200 + + <_SdkCanPublishWeb>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '$(_WebDefaultSdkVersion)')) + <_SdkCanPublishWorker>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '$(_WorkerDefaultSdkVersion)')) + <_SdkCanPublishConsole>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '$(_ConsoleDefaultSdkVersion)')) + + <_ContainerPackageIsPresent>false + <_ContainerPackageIsPresent Condition="@(PackageReference->AnyHaveMetadataValue('Identity', '$(_ContainersPackageIdentity)'))">true + <_IsWebProject>false + <_IsWebProject Condition="@(ProjectCapability->AnyHaveMetadataValue('Identity', 'DotNetCoreWeb'))">true + <_IsWorkerProject>false + <_IsWorkerProject Condition="@(ProjectCapability->AnyHaveMetadataValue('Identity', 'DotNetCoreWorker'))">true + + + + + + + $(NetCoreRoot) + dotnet + dotnet.exe + + + + + + + + + + + + + + $(GeneratedContainerManifest) + $(GeneratedContainerConfiguration) + $(GeneratedContainerDigest) + $(GeneratedContainerMediaType) + + + + + + + + + <_SkipContainerPublishing>false + <_SkipContainerPublishing Condition="$(ContainerArchiveOutputPath) != '' or ( $(ContainerRegistry) == '' and ( $(LocalRegistry) == '' or $(LocalRegistry) == 'Docker' ) )">true + + <_SkipCreateImageIndex>false + <_SkipCreateImageIndex Condition="$(ContainerArchiveOutputPath) == '' and $(ContainerRegistry) == '' and $(LocalRegistry) == 'Podman'">true + + + <_SingleImageContainerFormat Condition="'$(ContainerImageFormat)' != ''">$(ContainerImageFormat) + + <_SingleImageContainerFormat Condition="$(_SkipContainerPublishing) == 'true' ">OCI + + + <_rids Include="$(ContainerRuntimeIdentifiers)" Condition="'$(ContainerRuntimeIdentifiers)' != ''" /> + <_rids Include="$(RuntimeIdentifiers)" Condition="'$(ContainerRuntimeIdentifiers)' == '' and '$(RuntimeIdentifiers)' != ''" /> + <_InnerBuild Include="$(MSBuildProjectFullPath)" AdditionalProperties=" ContainerRuntimeIdentifier=%(_rids.Identity); RuntimeIdentifier=%(_rids.Identity); ContainerBaseRegistry=$(ContainerBaseRegistry); ContainerBaseName=$(ContainerBaseName); ContainerBaseTag=$(ContainerBaseTag); ContainerBaseDigest=$(ContainerBaseDigest); ContainerRegistry=$(ContainerRegistry); _ContainerImageTags=@(ContainerImageTags, ';'); ContainerRepository=$(ContainerRepository); _ContainerLabel=@(ContainerLabel->'%(Identity):%(Value)'); _ContainerPort=@(ContainerPort->'%(Identity):%(Type)'); _ContainerEnvironmentVariables=@(ContainerEnvironmentVariable->'%(Identity):%(Value)'); ContainerGenerateLabels=$(ContainerGenerateLabels); ContainerGenerateLabelsImageBaseDigest=$(ContainerGenerateLabelsImageBaseDigest); _SkipContainerPublishing=$(_SkipContainerPublishing); ContainerImageFormat=$(_SingleImageContainerFormat); _IsMultiRIDBuild=false; _IsSingleRIDBuild=true; _InitialContainerBaseImage=$(_InitialContainerBaseImage) " /> + <_rids Remove="$(_rids)" /> + + + + + + + + + + + + + + <_ParsedContainerLabel Condition="'$(_ContainerLabel)' != ':'" Include="$(_ContainerLabel)" /> + + <_ParsedContainerPort Condition="'$(_ContainerPort)' != ':'" Include="$(_ContainerPort)" /> + + <_ParsedContainerEnvironmentVariables Condition="'$(_ContainerEnvironmentVariables)' != ':'" Include="$(_ContainerEnvironmentVariables)" /> + + + + + + <_IsMultiTFMBuild Condition="'$(TargetFrameworks)' != '' and '$(TargetFramework)' == ''">true + + <_HasCRIDsAndNoCRID Condition="'$(ContainerRuntimeIdentifiers)' != '' and '$(ContainerRuntimeIdentifier)' == ''">true + <_HasRIDs Condition="'$(RuntimeIdentifiers)' != ''">true + <_NoCRIDsOrCRIDorRID Condition="'$(ContainerRuntimeIdentifiers)' == '' and '$(ContainerRuntimeIdentifier)' == '' and '$(RuntimeIdentifier)' == ''">true + + <_IsMultiRIDBuild Condition="'$(BuildingInsideVisualStudio)' != 'true' and ('$(_HasCRIDsAndNoCRID)' == true or ('$(_HasRIDs)' == 'true' and '$(_NoCRIDsOrCRIDorRID)' == 'true'))">true + <_IsSingleRIDBuild Condition="'$(_IsMultiRIDBuild)' == ''">true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/CliPluginContext.cs b/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/CliPluginContext.cs new file mode 100644 index 0000000..f6fdb51 --- /dev/null +++ b/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/CliPluginContext.cs @@ -0,0 +1,109 @@ +using System.Collections.Concurrent; +using System.Text.Json; +using Microsoft.Extensions.Logging; +using DataverseDevKit.Core.Abstractions; +using DataverseDevKit.Core.Models; +using Ddk.SolutionLayerAnalyzer.DTOs; + +namespace DataverseDevKit.SolutionAnalyzer.CLI; + +/// +/// Simple plugin context implementation for CLI usage. +/// Captures events for polling by the CLI. +/// +internal class CliPluginContext : IPluginContext +{ + private readonly ILogger _logger; + private readonly string _storagePath; + private readonly IServiceClientFactory _serviceClientFactory; + + // Event storage for CLI polling + private readonly ConcurrentDictionary _progressEvents = new(); + private readonly ConcurrentDictionary _completionEvents = new(); + + private static readonly JsonSerializerOptions JsonOptions = new() + { + PropertyNameCaseInsensitive = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }; + + public CliPluginContext(ILogger logger, string storagePath, IServiceClientFactory serviceClientFactory) + { + _logger = logger; + _storagePath = storagePath; + _serviceClientFactory = serviceClientFactory; + } + + public ILogger Logger => _logger; + + public string StoragePath => _storagePath; + + public IServiceClientFactory ServiceClientFactory => _serviceClientFactory; + + public void EmitEvent(PluginEvent pluginEvent) + { + // Log events + _logger.LogDebug("Plugin Event: {EventType} - {Payload}", + pluginEvent.Type, pluginEvent.Payload); + + // Store events for CLI polling + if (pluginEvent.Type == "plugin:sla:report-progress") + { + try + { + var progressEvent = JsonSerializer.Deserialize(pluginEvent.Payload, JsonOptions); + if (progressEvent != null) + { + _progressEvents[progressEvent.OperationId] = progressEvent; + } + } + catch (Exception ex) + { + _logger.LogWarning(ex, "Failed to parse progress event"); + } + } + else if (pluginEvent.Type == "plugin:sla:report-complete") + { + try + { + var completionEvent = JsonSerializer.Deserialize(pluginEvent.Payload, JsonOptions); + if (completionEvent != null) + { + _completionEvents[completionEvent.OperationId] = completionEvent; + } + } + catch (Exception ex) + { + _logger.LogWarning(ex, "Failed to parse completion event"); + } + } + } + + /// + /// Try to get the latest progress event for an operation. + /// + public bool TryGetProgressEvent(string operationId, out ReportProgressEvent progressEvent) + { + return _progressEvents.TryGetValue(operationId, out progressEvent!); + } + + /// + /// Try to get the completion event for an operation. + /// + public bool TryGetCompletionEvent(string operationId, out ReportCompletionEvent completionEvent) + { + return _completionEvents.TryGetValue(operationId, out completionEvent!); + } + + public Task GetConfigAsync(string key, CancellationToken cancellationToken = default) + { + // CLI doesn't use persistent config + return Task.FromResult(null); + } + + public Task SetConfigAsync(string key, string value, CancellationToken cancellationToken = default) + { + // CLI doesn't use persistent config + return Task.CompletedTask; + } +} diff --git a/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/CliServiceClientFactory.cs b/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/CliServiceClientFactory.cs new file mode 100644 index 0000000..982718d --- /dev/null +++ b/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/CliServiceClientFactory.cs @@ -0,0 +1,54 @@ +using Microsoft.PowerPlatform.Dataverse.Client; +using DataverseDevKit.Core.Abstractions; + +namespace DataverseDevKit.SolutionAnalyzer.CLI; + +/// +/// Simple service client factory for CLI usage +/// +internal class CliServiceClientFactory : IServiceClientFactory +{ + private readonly string _environmentUrl; + private readonly string? _connectionString; + private readonly string? _clientId; + private readonly string? _clientSecret; + private readonly string? _tenantId; + + public CliServiceClientFactory( + string environmentUrl, + string? connectionString = null, + string? clientId = null, + string? clientSecret = null, + string? tenantId = null) + { + _environmentUrl = environmentUrl; + _connectionString = connectionString; + _clientId = clientId; + _clientSecret = clientSecret; + _tenantId = tenantId; + } + + public ServiceClient GetServiceClient(string? connectionId) + { + // Build connection string based on provided auth method + string connString; + + if (!string.IsNullOrEmpty(_connectionString)) + { + // Use provided connection string + connString = _connectionString; + } + else if (!string.IsNullOrEmpty(_clientId) && !string.IsNullOrEmpty(_clientSecret) && !string.IsNullOrEmpty(_tenantId)) + { + // Service principal authentication + connString = $"AuthType=ClientSecret;Url={_environmentUrl};ClientId={_clientId};ClientSecret={_clientSecret};TenantId={_tenantId}"; + } + else + { + // Interactive authentication + connString = $"AuthType=OAuth;Url={_environmentUrl};LoginPrompt=Auto;RedirectUri=http://localhost;RequireNewInstance=True"; + } + + return new ServiceClient(connString); + } +} diff --git a/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/DataverseDevKit.SolutionAnalyzer.CLI.csproj b/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/DataverseDevKit.SolutionAnalyzer.CLI.csproj new file mode 100644 index 0000000..31fe9f2 --- /dev/null +++ b/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/DataverseDevKit.SolutionAnalyzer.CLI.csproj @@ -0,0 +1,25 @@ + + + + Exe + net10.0 + enable + enable + ddk-solution-analyzer + DataverseDevKit.SolutionAnalyzer.CLI + + + + + + + + + + + + + + + + diff --git a/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/FileLogger.cs b/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/FileLogger.cs new file mode 100644 index 0000000..0d259df --- /dev/null +++ b/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/FileLogger.cs @@ -0,0 +1,79 @@ +using Microsoft.Extensions.Logging; + +namespace DataverseDevKit.SolutionAnalyzer.CLI; + +/// +/// Simple file logger for CLI output +/// +public class FileLogger : ILogger +{ + private readonly string _logFilePath; + private readonly LogLevel _minLogLevel; + private readonly object _lock = new(); + + public FileLogger(string logFilePath, LogLevel minLogLevel = LogLevel.Information) + { + _logFilePath = logFilePath; + _minLogLevel = minLogLevel; + + // Ensure directory exists + var directory = Path.GetDirectoryName(logFilePath); + if (!string.IsNullOrEmpty(directory)) + { + Directory.CreateDirectory(directory); + } + + // Clear or create log file + File.WriteAllText(logFilePath, $"=== CLI Log Started at {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC ==={Environment.NewLine}"); + } + + public IDisposable? BeginScope(TState state) where TState : notnull => null; + + public bool IsEnabled(LogLevel logLevel) => logLevel >= _minLogLevel; + + public void Log(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) + { + if (!IsEnabled(logLevel)) + { + return; + } + + var message = formatter(state, exception); + var logEntry = $"[{DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}] [{logLevel}] {message}"; + + if (exception != null) + { + logEntry += $"{Environment.NewLine}{exception}"; + } + + lock (_lock) + { + File.AppendAllText(_logFilePath, logEntry + Environment.NewLine); + } + } +} + +/// +/// Simple logger factory for file logging +/// +public sealed class FileLoggerProvider : ILoggerProvider +{ + private readonly string _logFilePath; + private readonly LogLevel _minLogLevel; + + public FileLoggerProvider(string logFilePath, LogLevel minLogLevel = LogLevel.Information) + { + _logFilePath = logFilePath; + _minLogLevel = minLogLevel; + } + + public ILogger CreateLogger(string categoryName) + { + return new FileLogger(_logFilePath, _minLogLevel); + } + + public void Dispose() + { + // No resources to dispose + } +} diff --git a/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/Program.cs b/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/Program.cs new file mode 100644 index 0000000..693479e --- /dev/null +++ b/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/Program.cs @@ -0,0 +1,131 @@ +using System.CommandLine; +using System.CommandLine.Invocation; +using Microsoft.Extensions.Logging; +using DataverseDevKit.SolutionAnalyzer.CLI; + +// Root command +var rootCommand = new RootCommand("Dataverse DevKit Solution Layer Analyzer CLI - Execute solution integrity reports for CI/CD monitoring"); + +// Global options +var configOption = new Option( + aliases: ["--config", "-c"], + description: "Path to the YAML configuration file" +) +{ + IsRequired = true +}; + +var connectionStringOption = new Option( + aliases: ["--connection-string", "-cs"], + description: "Dataverse connection string (alternative to interactive auth)" +); + +var clientIdOption = new Option( + aliases: ["--client-id"], + description: "Azure AD client ID for service principal authentication" +); + +var clientSecretOption = new Option( + aliases: ["--client-secret"], + description: "Azure AD client secret for service principal authentication" +); + +var tenantIdOption = new Option( + aliases: ["--tenant-id"], + description: "Azure AD tenant ID for service principal authentication" +); + +var environmentUrlOption = new Option( + aliases: ["--environment-url", "-e"], + description: "Dataverse environment URL" +); +environmentUrlOption.IsRequired = true; + +var verbosityOption = new Option( + aliases: ["--verbosity", "-v"], + getDefaultValue: () => "normal", + description: "Console log verbosity (quiet, minimal, normal, detailed)" +); + +var outputPathOption = new Option( + aliases: ["--output", "-o"], + getDefaultValue: () => new DirectoryInfo("."), + description: "Output directory for reports and plugin logs" +); + +var formatOption = new Option( + aliases: ["--format", "-f"], + getDefaultValue: () => "yaml", + description: "Report output format (yaml, json, csv)" +); + +var failOnSeverityOption = new Option( + aliases: ["--fail-on-severity"], + description: "Fail pipeline if findings of this severity or higher (critical, warning, information)" +); + +var maxFindingsOption = new Option( + aliases: ["--max-findings"], + description: "Maximum number of findings allowed before failing" +); + +// Add global options +rootCommand.AddOption(configOption); +rootCommand.AddOption(connectionStringOption); +rootCommand.AddOption(clientIdOption); +rootCommand.AddOption(clientSecretOption); +rootCommand.AddOption(tenantIdOption); +rootCommand.AddOption(environmentUrlOption); +rootCommand.AddOption(verbosityOption); +rootCommand.AddOption(outputPathOption); +rootCommand.AddOption(formatOption); +rootCommand.AddOption(failOnSeverityOption); +rootCommand.AddOption(maxFindingsOption); + +// Main execution - run all reports +rootCommand.SetHandler(async (context) => +{ + var cli = CreateCli(context); + var exitCode = await cli.ExecuteReportsAsync(context.GetCancellationToken()); + context.ExitCode = exitCode; +}); + +return await rootCommand.InvokeAsync(args); + +ReportExecutor CreateCli(InvocationContext context) +{ + var config = context.ParseResult.GetValueForOption(configOption)!; + var connectionString = context.ParseResult.GetValueForOption(connectionStringOption); + var clientId = context.ParseResult.GetValueForOption(clientIdOption); + var clientSecret = context.ParseResult.GetValueForOption(clientSecretOption); + var tenantId = context.ParseResult.GetValueForOption(tenantIdOption); + var environmentUrl = context.ParseResult.GetValueForOption(environmentUrlOption)!; + var verbosity = context.ParseResult.GetValueForOption(verbosityOption)!; + var output = context.ParseResult.GetValueForOption(outputPathOption)!; + var format = context.ParseResult.GetValueForOption(formatOption)!; + var failOnSeverity = context.ParseResult.GetValueForOption(failOnSeverityOption); + var maxFindings = context.ParseResult.GetValueForOption(maxFindingsOption); + + var logLevel = verbosity.ToUpperInvariant() switch + { + "QUIET" => LogLevel.Error, + "MINIMAL" => LogLevel.Warning, + "NORMAL" => LogLevel.Information, + "DETAILED" => LogLevel.Debug, + _ => LogLevel.Information + }; + + return new ReportExecutor( + config, + new Uri(environmentUrl), + connectionString, + clientId, + clientSecret, + tenantId, + logLevel, + output, + format, + failOnSeverity, + maxFindings + ); +} diff --git a/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/ReportExecutor.cs b/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/ReportExecutor.cs new file mode 100644 index 0000000..7292f0c --- /dev/null +++ b/src/cli/solution-analyzer/DataverseDevKit.SolutionAnalyzer.CLI/ReportExecutor.cs @@ -0,0 +1,465 @@ +using System.Globalization; +using System.Text.Json; +using Microsoft.Extensions.Logging; +using YamlDotNet.Serialization; +using YamlDotNet.Serialization.NamingConventions; +using Ddk.SolutionLayerAnalyzer; +using Ddk.SolutionLayerAnalyzer.Models; +using Ddk.SolutionLayerAnalyzer.DTOs; + +namespace DataverseDevKit.SolutionAnalyzer.CLI; + +/// +/// Executes reports from configuration for CI/CD monitoring by directly calling the plugin. +/// Uses stateless approach - config file content is sent to plugin for parsing. +/// +public class ReportExecutor +{ + private readonly FileInfo _configFile; + private readonly Uri _environmentUrl; + private readonly string? _connectionString; + private readonly string? _clientId; + private readonly string? _clientSecret; + private readonly string? _tenantId; + private readonly DirectoryInfo _outputDirectory; + private readonly string _format; + private readonly string _verbosity; + private readonly string? _failOnSeverity; + private readonly int? _maxFindings; + private readonly ILogger _consoleLogger; + private readonly string _pluginLogPath; + + private static readonly JsonSerializerOptions JsonOptions = new() + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + PropertyNameCaseInsensitive = true + }; + + public ReportExecutor( + FileInfo configFile, + Uri environmentUrl, + string? connectionString, + string? clientId, + string? clientSecret, + string? tenantId, + LogLevel consoleLogLevel, + DirectoryInfo outputDirectory, + string format, + string? failOnSeverity, + int? maxFindings, + string verbosity = "basic") + { + _configFile = configFile; + _environmentUrl = environmentUrl; + _connectionString = connectionString; + _clientId = clientId; + _clientSecret = clientSecret; + _tenantId = tenantId; + _outputDirectory = outputDirectory; + _format = format; + _verbosity = verbosity; + _failOnSeverity = failOnSeverity; + _maxFindings = maxFindings; + + // Ensure output directory exists + if (!_outputDirectory.Exists) + { + _outputDirectory.Create(); + } + + // Setup console logging for CLI + using var loggerFactory = LoggerFactory.Create(builder => + { + builder.SetMinimumLevel(consoleLogLevel); + builder.AddConsole(); + }); + _consoleLogger = loggerFactory.CreateLogger(); + + // Setup file logging path for plugin (to sandbox plugin logs) + _pluginLogPath = Path.Combine(_outputDirectory.FullName, $"plugin-{DateTime.UtcNow:yyyyMMdd-HHmmss}.log"); + } + + /// + /// Execute all reports from configuration and return exit code. + /// Uses stateless approach: reads config file, sends to plugin for parsing, executes reports. + /// + public async Task ExecuteReportsAsync(CancellationToken cancellationToken) + { + _consoleLogger.LogInformation("Loading configuration from: {ConfigFile}", _configFile.FullName); + + try + { + // Read config file content as string + var configContent = await File.ReadAllTextAsync(_configFile.FullName, cancellationToken); + + // Create plugin instance and context + var plugin = new SolutionLayerAnalyzerPlugin(); + var pluginLogger = CreatePluginLogger(); + var serviceClientFactory = new CliServiceClientFactory( + _environmentUrl.AbsoluteUri, + _connectionString, + _clientId, + _clientSecret, + _tenantId + ); + + var pluginContext = new CliPluginContext( + pluginLogger, + _outputDirectory.FullName, + serviceClientFactory + ); + + _consoleLogger.LogDebug("Initializing plugin"); + await plugin.InitializeAsync(pluginContext, cancellationToken); + + try + { + // Parse config via plugin (stateless) + _consoleLogger.LogInformation("Parsing report configuration"); + var parseRequest = new ParseReportConfigRequest + { + Content = configContent, + Format = DetectConfigFormat(_configFile.Name) + }; + + var parsePayload = JsonSerializer.Serialize(parseRequest, JsonOptions); + var parseResultElement = await plugin.ExecuteAsync("parseReportConfig", parsePayload, cancellationToken); + var parseResult = JsonSerializer.Deserialize( + parseResultElement.GetRawText(), JsonOptions); + + if (parseResult == null || parseResult.Errors.Count > 0) + { + foreach (var error in parseResult?.Errors ?? new List { "Unknown parse error" }) + { + _consoleLogger.LogError("Config parse error: {Error}", error); + } + return 2; + } + + var config = parseResult.Config; + var totalReports = config.ReportGroups.Sum(g => g.Reports.Count) + config.UngroupedReports.Count; + _consoleLogger.LogInformation("Loaded {ReportCount} reports from {GroupCount} groups", + totalReports, config.ReportGroups.Count); + + // Build index request from config + _consoleLogger.LogInformation("Building index for {SourceCount} sources and {TargetCount} targets", + config.SourceSolutions.Count, config.TargetSolutions.Count); + + var indexRequest = new IndexRequest + { + ConnectionId = _environmentUrl.AbsoluteUri, + SourceSolutions = config.SourceSolutions, + TargetSolutions = config.TargetSolutions, + IncludeComponentTypes = config.ComponentTypes?.Select(c => c.ToString(CultureInfo.InvariantCulture)).ToList() ?? new List(), + PayloadMode = "lazy" + }; + + var indexPayload = JsonSerializer.Serialize(indexRequest, JsonOptions); + await plugin.ExecuteAsync("index", indexPayload, cancellationToken); + + // Wait for index completion (poll for completion event or check metadata) + _consoleLogger.LogInformation("Waiting for index to complete..."); + await WaitForIndexCompletionAsync(plugin, _environmentUrl.AbsoluteUri, cancellationToken); + + // Execute reports via stateless executeReports command + _consoleLogger.LogInformation("Executing reports..."); + var verbosity = ParseVerbosity(_verbosity); + var format = ParseOutputFormat(_format); + + var executeRequest = new ExecuteReportsRequest + { + OperationId = Guid.NewGuid().ToString("N"), + ConnectionId = _environmentUrl.AbsoluteUri, + Config = config, + Verbosity = verbosity, + Format = format, + GenerateFile = true + }; + + var executePayload = JsonSerializer.Serialize(executeRequest, JsonOptions); + var executeResultElement = await plugin.ExecuteAsync("executeReports", executePayload, cancellationToken); + var ack = JsonSerializer.Deserialize( + executeResultElement.GetRawText(), JsonOptions); + + if (ack == null || !ack.Started) + { + _consoleLogger.LogError("Failed to start report execution: {Error}", ack?.ErrorMessage ?? "Unknown error"); + return 2; + } + + // Poll for completion via plugin context events + var completionResult = await WaitForReportCompletionAsync(pluginContext, ack.OperationId, cancellationToken); + + if (!completionResult.Success) + { + _consoleLogger.LogError("Report execution failed: {Error}", completionResult.ErrorMessage); + return 2; + } + + // Extract results + var summary = completionResult.Summary; + var criticalCount = summary?.CriticalFindings ?? 0; + var warningCount = summary?.WarningFindings ?? 0; + var infoCount = summary?.InformationalFindings ?? 0; + + // Save output content + var reportFileName = $"report-{DateTime.UtcNow:yyyyMMdd-HHmmss}.{GetFileExtension(_format)}"; + var reportPath = Path.Combine(_outputDirectory.FullName, reportFileName); + + if (!string.IsNullOrEmpty(completionResult.OutputContent)) + { + await File.WriteAllTextAsync(reportPath, completionResult.OutputContent, cancellationToken); + _consoleLogger.LogInformation("Report saved to: {ReportPath}", reportPath); + } + + _consoleLogger.LogInformation("Plugin logs: {PluginLog}", _pluginLogPath); + + // Print summary + PrintSummary(totalReports, criticalCount, warningCount, infoCount, reportPath); + + // Determine exit code + var exitCode = DetermineExitCode(criticalCount, warningCount, infoCount); + + PrintExitStatus(exitCode, criticalCount, warningCount, infoCount); + + return exitCode; + } + finally + { + await plugin.DisposeAsync(); + } + } + catch (Exception ex) + { + _consoleLogger.LogError(ex, "Report execution failed"); + PrintErrorSummary(ex); + return 2; // Error exit code + } + } + + private async Task WaitForIndexCompletionAsync( + SolutionLayerAnalyzerPlugin plugin, + string connectionId, + CancellationToken cancellationToken) + { + // Poll index metadata until indexing is complete + var timeout = TimeSpan.FromMinutes(30); + var checkInterval = TimeSpan.FromSeconds(5); + var startTime = DateTime.UtcNow; + + while (DateTime.UtcNow - startTime < timeout) + { + cancellationToken.ThrowIfCancellationRequested(); + + var metadataRequest = new { ConnectionId = connectionId }; + var metadataPayload = JsonSerializer.Serialize(metadataRequest, JsonOptions); + + try + { + var resultElement = await plugin.ExecuteAsync("getIndexMetadata", metadataPayload, cancellationToken); + var metadata = JsonSerializer.Deserialize(resultElement.GetRawText(), JsonOptions); + + if (metadata.TryGetProperty("componentCount", out var countProp) && countProp.GetInt32() > 0) + { + _consoleLogger.LogInformation("Index complete: {ComponentCount} components indexed", countProp.GetInt32()); + return; + } + } + catch + { + // Index might not be ready yet, continue waiting + } + + await Task.Delay(checkInterval, cancellationToken); + } + + throw new TimeoutException("Index operation timed out"); + } + + private async Task WaitForReportCompletionAsync( + CliPluginContext pluginContext, + string operationId, + CancellationToken cancellationToken) + { + var timeout = TimeSpan.FromMinutes(30); + var startTime = DateTime.UtcNow; + + while (DateTime.UtcNow - startTime < timeout) + { + cancellationToken.ThrowIfCancellationRequested(); + + // Check if we have a completion event + if (pluginContext.TryGetCompletionEvent(operationId, out var completionEvent)) + { + return completionEvent; + } + + // Log progress if available + if (pluginContext.TryGetProgressEvent(operationId, out var progressEvent)) + { + _consoleLogger.LogInformation( + "Progress: {Phase} - {Current}/{Total} ({Percent}%)", + progressEvent.Phase, + progressEvent.CurrentReport, + progressEvent.TotalReports, + progressEvent.Percent); + } + + await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); + } + + throw new TimeoutException("Report execution timed out"); + } + + private static ReportConfigFormat? DetectConfigFormat(string fileName) + { + var extension = Path.GetExtension(fileName).ToUpperInvariant(); + return extension switch + { + ".JSON" => ReportConfigFormat.Json, + ".YAML" or ".YML" => ReportConfigFormat.Yaml, + ".XML" => ReportConfigFormat.Xml, + _ => null // Let plugin auto-detect + }; + } + + private static ReportVerbosity ParseVerbosity(string verbosity) + { + return verbosity.ToUpperInvariant() switch + { + "MEDIUM" => ReportVerbosity.Medium, + "VERBOSE" => ReportVerbosity.Verbose, + _ => ReportVerbosity.Basic + }; + } + + private static ReportOutputFormat ParseOutputFormat(string format) + { + return format.ToUpperInvariant() switch + { + "JSON" => ReportOutputFormat.Json, + "CSV" => ReportOutputFormat.Csv, + _ => ReportOutputFormat.Yaml + }; + } + + private ILogger CreatePluginLogger() + { + // Create file-only logger for plugin to sandbox its logs + using var loggerFactory = LoggerFactory.Create(builder => + { + builder.SetMinimumLevel(LogLevel.Debug); + builder.AddProvider(new FileLoggerProvider(_pluginLogPath, LogLevel.Debug)); + }); + + return loggerFactory.CreateLogger("Plugin"); + } + +#pragma warning disable CA1303 + private void PrintSummary(int totalReports, int criticalCount, int warningCount, int infoCount, string reportPath) + { + Console.WriteLine(); + Console.WriteLine("═══════════════════════════════════════════════════════════"); + Console.WriteLine(" SOLUTION INTEGRITY REPORT SUMMARY"); + Console.WriteLine("═══════════════════════════════════════════════════════════"); + Console.WriteLine($" Reports Executed: {totalReports}"); + Console.WriteLine($" Critical Findings: {criticalCount}"); + Console.WriteLine($" Warning Findings: {warningCount}"); + Console.WriteLine($" Info Findings: {infoCount}"); + Console.WriteLine($" Total Findings: {criticalCount + warningCount + infoCount}"); + Console.WriteLine("───────────────────────────────────────────────────────────"); + Console.WriteLine($" Output: {reportPath}"); + Console.WriteLine($" Plugin Logs: {_pluginLogPath}"); + Console.WriteLine("═══════════════════════════════════════════════════════════"); + } + + private void PrintExitStatus(int exitCode, int criticalCount, int warningCount, int infoCount) + { + if (exitCode == 0) + { + Console.WriteLine(" Status: ✓ PASSED - Solution integrity check successful"); + } + else + { + Console.WriteLine($" Status: ✗ FAILED - Exit code {exitCode}"); + if (!string.IsNullOrEmpty(_failOnSeverity)) + { + Console.WriteLine($" Reason: Findings with severity '{_failOnSeverity}' or higher detected"); + } + if (_maxFindings.HasValue) + { + Console.WriteLine($" Reason: Total findings ({criticalCount + warningCount + infoCount}) exceeds threshold ({_maxFindings})"); + } + } + Console.WriteLine("═══════════════════════════════════════════════════════════"); + Console.WriteLine(); + } + + private void PrintErrorSummary(Exception ex) + { + Console.Error.WriteLine(); + Console.Error.WriteLine("═══════════════════════════════════════════════════════════"); + Console.Error.WriteLine(" ✗ EXECUTION FAILED"); + Console.Error.WriteLine("═══════════════════════════════════════════════════════════"); + Console.Error.WriteLine($" Error: {ex.Message}"); + Console.Error.WriteLine($" See plugin logs: {_pluginLogPath}"); + Console.Error.WriteLine("═══════════════════════════════════════════════════════════"); + Console.Error.WriteLine(); + } +#pragma warning restore CA1303 + + private int DetermineExitCode(int criticalCount, int warningCount, int infoCount) + { + var totalFindings = criticalCount + warningCount + infoCount; + + // Check max findings threshold first + if (totalFindings > _maxFindings) + { + _consoleLogger.LogWarning("Total findings ({Total}) exceeds threshold ({Max})", + totalFindings, _maxFindings.Value); + return 1; + } + + // Check severity-based failure + if (string.IsNullOrEmpty(_failOnSeverity)) + { + return 0; + } + +#pragma warning disable CA1308 + var failSeverity = _failOnSeverity.ToLowerInvariant(); +#pragma warning restore CA1308 + + if (failSeverity == "information" && totalFindings > 0) + { + _consoleLogger.LogWarning("Failing on information severity: {Total} findings", totalFindings); + return 1; + } + + if (failSeverity == "warning" && (warningCount > 0 || criticalCount > 0)) + { + _consoleLogger.LogWarning("Failing on warning severity: {Warning} warnings, {Critical} critical", + warningCount, criticalCount); + return 1; + } + + if (failSeverity == "critical" && criticalCount > 0) + { + _consoleLogger.LogError("Failing on critical severity: {Critical} critical findings", criticalCount); + return 1; + } + + // No failures - success + return 0; + } + + private static string GetFileExtension(string format) + { + return format.ToUpperInvariant() switch + { + "JSON" => "json", + "CSV" => "csv", + _ => "yaml" + }; + } +} diff --git a/src/cli/solution-analyzer/README.md b/src/cli/solution-analyzer/README.md new file mode 100644 index 0000000..e96016c --- /dev/null +++ b/src/cli/solution-analyzer/README.md @@ -0,0 +1,130 @@ +# Dataverse DevKit Solution Analyzer CLI + +CI/CD monitoring tool for continuously checking Dataverse solution layer integrity. + +## Purpose + +Execute configured reports against Dataverse environments and return exit codes for pipeline control. + +**Design**: Simple executor - just runs reports, nothing more. Plugin logs go to file, CLI logs go to console. + +## Quick Start + +```bash +ddk-solution-analyzer \ + --config analyzer-config.yaml \ + --environment-url https://yourorg.crm.dynamics.com \ + --fail-on-severity critical +``` + +## Exit Codes + +- **0** - Success (no critical issues or within thresholds) +- **1** - Failure (severity/count thresholds exceeded) +- **2** - Error (execution failed) + +## Options + +| Option | Description | +|--------|-------------| +| `--config, -c` | YAML configuration file **(required)** | +| `--environment-url, -e` | Dataverse environment URL **(required)** | +| `--client-id` | Azure AD client ID (service principal) | +| `--client-secret` | Azure AD client secret | +| `--tenant-id` | Azure AD tenant ID | +| `--output, -o` | Output directory (default: current) | +| `--format, -f` | Report format: yaml, json, csv (default: yaml) | +| `--verbosity, -v` | Console log level: quiet, minimal, normal, detailed | +| `--fail-on-severity` | Fail on: critical, warning, information | +| `--max-findings` | Max total findings before failing | + +## CI/CD Examples + +### GitHub Actions + +```yaml +- name: Check Solution Integrity + run: | + ddk-solution-analyzer \ + --config analyzer-config.yaml \ + --environment-url ${{ secrets.DATAVERSE_URL }} \ + --client-id ${{ secrets.CLIENT_ID }} \ + --client-secret ${{ secrets.CLIENT_SECRET }} \ + --tenant-id ${{ secrets.TENANT_ID }} \ + --fail-on-severity critical \ + --verbosity minimal +``` + +### Azure DevOps + +```yaml +- script: | + ddk-solution-analyzer \ + --config analyzer-config.yaml \ + --environment-url $(DataverseUrl) \ + --client-id $(ClientId) \ + --client-secret $(ClientSecret) \ + --tenant-id $(TenantId) \ + --fail-on-severity warning + displayName: 'Solution Integrity Check' +``` + +### GitLab CI + +```yaml +integrity-check: + script: + - ddk-solution-analyzer --config config.yaml -e $DATAVERSE_URL + --client-id $CLIENT_ID --client-secret $CLIENT_SECRET + --fail-on-severity critical --verbosity minimal +``` + +## Output + +``` +═══════════════════════════════════════════════════════════ + SOLUTION INTEGRITY REPORT SUMMARY +═══════════════════════════════════════════════════════════ + Reports Executed: 4 + Critical Findings: 2 + Warning Findings: 5 + Info Findings: 3 + Total Findings: 10 +─────────────────────────────────────────────────────────── + Output: report-20260201-120000.yaml + Plugin Logs: plugin-20260201-120000.log +═══════════════════════════════════════════════════════════ + Status: ✗ FAILED - Exit code 1 + Reason: Findings with severity 'critical' or higher detected +═══════════════════════════════════════════════════════════ +``` + +## Logging + +- **CLI logs** → Console (based on `--verbosity`) +- **Plugin logs** → File (sandboxed, always written to `plugin-{timestamp}.log`) + +## Configuration + +See `example-config.yaml`: + +```yaml +sourceSolutions: [CoreSolution] +targetSolutions: [Project1, Project2] +reportGroups: + - name: Critical Checks + reports: + - name: Conflicting Layers + severity: Critical + recommendedAction: Resolve immediately + queryJson: '...' +``` + +## Best Practices + +| Environment | Recommended Settings | +|-------------|---------------------| +| Development | `--fail-on-severity warning` | +| QA/UAT | `--fail-on-severity critical` | +| Production Gate | `--fail-on-severity critical --max-findings 0` | + diff --git a/src/cli/solution-analyzer/example-config.yaml b/src/cli/solution-analyzer/example-config.yaml new file mode 100644 index 0000000..c72b446 --- /dev/null +++ b/src/cli/solution-analyzer/example-config.yaml @@ -0,0 +1,57 @@ +# Solution Layer Analyzer Configuration +# This file defines the global settings and reports for analyzing Dataverse solutions + +# Source solutions to analyze (typically your core/base solutions) +sourceSolutions: + - CoreSolution + +# Target solutions to compare against (typically your project-specific solutions) +targetSolutions: + - Project1 + - Project2 + +# Optional: Component types to include (if omitted, all types are included) +# Use string names instead of numeric values: +# componentTypes: +# - Entity +# - SystemForm +# - SavedQuery +# - Attribute +# - RibbonCustomization +# - WebResource + +# Report groups organize related reports together +reportGroups: + - name: Project 1 Analysis + displayOrder: 1 + reports: + - name: Empty Layers that can be removed + description: Identifies layers with no actual changes that can be safely removed + severity: Information + recommendedAction: Remove empty layer from solution + displayOrder: 1 + queryJson: '{"type":"AND","children":[{"type":"ORDER_FLEX","solutions":["CoreSolution","Project1"]},{"type":"LAYER_ATTRIBUTE_QUERY","solution":"Project1","condition":{"type":"NOT","child":{"type":"LAYER_ATTRIBUTE_DIFF","solution":"Project1","compareTo":"CoreSolution"}}}]}' + + - name: Form or View layers that may need consolidation + description: Forms/Views customized in Project1 but not in other projects + severity: Warning + recommendedAction: Consider moving the customization to Core solution for future harmonization + displayOrder: 2 + queryJson: '{"type":"AND","children":[{"type":"OR","children":[{"type":"ATTRIBUTE_QUERY","attribute":"ComponentType","operator":"EQUALS","value":"SavedQuery"},{"type":"ATTRIBUTE_QUERY","attribute":"ComponentType","operator":"EQUALS","value":"SystemForm"}]},{"type":"ORDER_FLEX","solutions":["CoreSolution","Project1"]},{"type":"NOT","child":{"type":"HAS","solutions":["Project2"]}},{"type":"LAYER_ATTRIBUTE_QUERY","solution":"Project1","condition":{"type":"LAYER_ATTRIBUTE_DIFF","solution":"Project1","compareTo":"CoreSolution"}}]}' + + - name: Form or View conflicts between projects + description: Forms/Views customized in multiple projects creating conflicts + severity: Critical + recommendedAction: Immediate action required by all projects overriding the view or form + displayOrder: 3 + queryJson: '{"type":"AND","children":[{"type":"OR","children":[{"type":"ATTRIBUTE_QUERY","attribute":"ComponentType","operator":"EQUALS","value":"SavedQuery"},{"type":"ATTRIBUTE_QUERY","attribute":"ComponentType","operator":"EQUALS","value":"SystemForm"}]},{"type":"ORDER_FLEX","solutions":["CoreSolution","Project1"]},{"type":"HAS","solutions":["Project2"]},{"type":"LAYER_ATTRIBUTE_QUERY","solution":"Project1","condition":{"type":"LAYER_ATTRIBUTE_DIFF","solution":"Project1","compareTo":"CoreSolution"}}]}' + + - name: Non-UI component conflicts + description: Non-UI components (entities, attributes, etc.) with conflicting layers + severity: Critical + recommendedAction: Immediate action required, potential layer on shared concerns + displayOrder: 4 + queryJson: '{"type":"AND","children":[{"type":"NOT","child":{"type":"OR","children":[{"type":"ATTRIBUTE_QUERY","attribute":"ComponentType","operator":"EQUALS","value":"SavedQuery"},{"type":"ATTRIBUTE_QUERY","attribute":"ComponentType","operator":"EQUALS","value":"SystemForm"}]}},{"type":"ORDER_FLEX","solutions":["CoreSolution","Project1"]},{"type":"LAYER_ATTRIBUTE_QUERY","solution":"Project1","condition":{"type":"LAYER_ATTRIBUTE_DIFF","solution":"Project1","compareTo":"CoreSolution"}}]}' + +# Ungrouped reports (not part of any group) +ungroupedReports: [] diff --git a/src/dotnet/DataverseDevKit.slnx b/src/dotnet/DataverseDevKit.slnx index 2410396..46f060f 100644 --- a/src/dotnet/DataverseDevKit.slnx +++ b/src/dotnet/DataverseDevKit.slnx @@ -9,6 +9,7 @@ + diff --git a/src/dotnet/Host/DataverseDevKit.Host.csproj b/src/dotnet/Host/DataverseDevKit.Host.csproj index 41283d4..1397729 100644 --- a/src/dotnet/Host/DataverseDevKit.Host.csproj +++ b/src/dotnet/Host/DataverseDevKit.Host.csproj @@ -1,4 +1,4 @@ - + net10.0-windows10.0.19041.0 @@ -43,12 +43,6 @@ - - - - - - @@ -65,6 +59,13 @@ + + + $([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..\..\..')) + $([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..\..\..\src\web\apps\shell')) + $(MSBuildProjectDirectory)\wwwroot + + $([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..\..\plugins')) @@ -72,34 +73,68 @@ $(MSBuildProjectDirectory)\scripts\copy-plugins.ps1 + + + + + + + + + + + + + + + + + + + + - + - + - + - + + + + + + + + + + + + + + + + + + + + + diff --git a/src/dotnet/Host/MainPage.xaml b/src/dotnet/Host/MainPage.xaml index ea077bf..0c45d58 100644 --- a/src/dotnet/Host/MainPage.xaml +++ b/src/dotnet/Host/MainPage.xaml @@ -5,7 +5,6 @@ diff --git a/src/dotnet/Host/MainPage.xaml.cs b/src/dotnet/Host/MainPage.xaml.cs index b5ac5e3..6905fa2 100644 --- a/src/dotnet/Host/MainPage.xaml.cs +++ b/src/dotnet/Host/MainPage.xaml.cs @@ -5,11 +5,13 @@ namespace DataverseDevKit.Host; -public partial class MainPage : ContentPage +public partial class MainPage : ContentPage, IDisposable { private readonly JsonRpcBridge _bridge; private readonly PluginHostManager _pluginHostManager; private readonly ILogger _logger; + private readonly HttpClient _httpClient; + private bool _disposed; public MainPage(JsonRpcBridge bridge, PluginHostManager pluginHostManager, ILogger logger) { @@ -17,29 +19,55 @@ public MainPage(JsonRpcBridge bridge, PluginHostManager pluginHostManager, ILogg _bridge = bridge; _pluginHostManager = pluginHostManager; _logger = logger; - -# if DEBUG - hybridWebView.DefaultFile = "dev-redirect.html"; -#else - hybridWebView.DefaultFile = "index.html"; -#endif + _httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(1) }; // Wire up the bridge hybridWebView.RawMessageReceived += OnRawMessageReceived; - + // Subscribe to plugin events _pluginHostManager.PluginEventReceived += OnPluginEventReceived; - + +#if DEBUG + if (IsDevServerAvailableAsync("http://localhost:5173")) + { + _logger.LogInformation("Dev server available, using dev-redirect.html"); + hybridWebView.DefaultFile = "dev-redirect.html"; + } + else + { + _logger.LogInformation("Dev server not available, using index.html"); + hybridWebView.DefaultFile = "index.html"; + } +#else + hybridWebView.DefaultFile = "index.html"; +#endif + _logger.LogInformation("HybridWebView initialized with DefaultFile: {DefaultFile}", hybridWebView.DefaultFile); } + private bool IsDevServerAvailableAsync(string url) + { + try + { + using var request = new HttpRequestMessage(HttpMethod.Head, url); + using var response = _httpClient.Send(request); + return response.IsSuccessStatusCode; + } + catch (Exception ex) + { + _logger.LogDebug(ex, "Dev server check failed for {Url}", url); + return false; + } + } + + private async void OnRawMessageReceived(object? sender, HybridWebViewRawMessageReceivedEventArgs e) { try { var message = e.Message; _logger.LogInformation("📨 Received message from WebView: {Message}", message); - + if (string.IsNullOrEmpty(message)) { _logger.LogWarning("Received empty message from WebView"); @@ -47,9 +75,9 @@ private async void OnRawMessageReceived(object? sender, HybridWebViewRawMessageR } var response = await _bridge.HandleMessageAsync(message); - + _logger.LogInformation("📤 Sending response to WebView: {Response}", response); - + if (!string.IsNullOrEmpty(response)) { // Encode response as base64 to avoid escaping issues with nested JSON strings @@ -95,9 +123,9 @@ private async void OnPluginEventReceived(object? sender, PluginEventArgs e) payload = payloadElement, timestamp = evt.Timestamp, metadata = evt.Metadata - }, new JsonSerializerOptions - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }, new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); // Marshal to UI thread before interacting with WebView (COM component) @@ -109,7 +137,7 @@ await Dispatcher.DispatchAsync(async () => var base64Event = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(eventJson)); var script = $"window.__ddkBridge.handleResponse('{base64Event}');"; await hybridWebView.EvaluateJavaScriptAsync(script); - + _logger.LogInformation("✅ Event forwarded to frontend: {EventType}", evt.Type); } catch (Exception ex) @@ -123,4 +151,30 @@ await Dispatcher.DispatchAsync(async () => _logger.LogError(ex, "Error forwarding plugin event to frontend"); } } + + protected virtual void Dispose(bool disposing) + { + if (_disposed) + { + return; + } + + if (disposing) + { + // Dispose managed resources + hybridWebView.RawMessageReceived -= OnRawMessageReceived; + _pluginHostManager.PluginEventReceived -= OnPluginEventReceived; + _httpClient?.Dispose(); + } + + // Dispose unmanaged resources here if any + + _disposed = true; + } + + public void Dispose() + { + Dispose(disposing: true); + GC.SuppressFinalize(this); + } } diff --git a/src/dotnet/Host/Resources/Raw/index.html b/src/dotnet/Host/Resources/Raw/index.html deleted file mode 100644 index 324aa1e..0000000 --- a/src/dotnet/Host/Resources/Raw/index.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - Dataverse DevKit - - - -
-
Loading Dataverse DevKit...
-
- - - diff --git a/src/dotnet/Host/Resources/Raw/placeholder.txt b/src/dotnet/Host/Resources/Raw/placeholder.txt deleted file mode 100644 index f09c065..0000000 --- a/src/dotnet/Host/Resources/Raw/placeholder.txt +++ /dev/null @@ -1 +0,0 @@ -This folder contains raw assets that will be deployed with the application. diff --git a/src/plugins/Plugins.slnx b/src/plugins/Plugins.slnx index 33c531c..68d42e7 100644 --- a/src/plugins/Plugins.slnx +++ b/src/plugins/Plugins.slnx @@ -1,7 +1,4 @@ - - - diff --git a/src/plugins/sample-plugin/.gitignore b/src/plugins/sample-plugin/.gitignore deleted file mode 100644 index 2d32905..0000000 --- a/src/plugins/sample-plugin/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Build outputs -dist/ -src/bin/ -src/obj/ - -# UI dependencies and build -ui/node_modules/ diff --git a/src/plugins/sample-plugin/README.md b/src/plugins/sample-plugin/README.md deleted file mode 100644 index 56a4260..0000000 --- a/src/plugins/sample-plugin/README.md +++ /dev/null @@ -1,131 +0,0 @@ -# Sample Plugin - -A reference implementation demonstrating the DDK plugin architecture with both backend (.NET) and frontend (React) components. - -## Structure - -``` -sample-plugin/ -├── plugin.manifest.json # Plugin manifest (deployed to dist/) -├── README.md # This file -├── src/ # Backend source code (.NET) -│ ├── Ddk.SamplePlugin.csproj -│ └── SamplePlugin.cs -├── ui/ # Frontend source code (React/TypeScript) -│ ├── package.json -│ ├── vite.config.ts -│ ├── index.html -│ └── src/ -│ ├── dev.tsx # Development entry -│ └── Plugin.tsx # Main plugin component -└── dist/ # Build output (git-ignored) - ├── plugin.manifest.json - ├── backend/ - │ └── Ddk.SamplePlugin.dll - └── frontend/ - └── remoteEntry.js -``` - -## Building - -### Backend (.NET) - -From the `src/` directory: - -```powershell -dotnet build -``` - -### Frontend (React) - -From the repository root: - -```powershell -# Install dependencies (first time only, from root) -pnpm install - -# Build the UI -pnpm --filter @ddk/plugin-sample-ui build -``` - -Or for development with hot reloading: - -```powershell -pnpm --filter @ddk/plugin-sample-ui dev -``` - -The dev server runs at `http://localhost:5175`. - -## Commands - -| Command | Description | -|-----------|------------------------------------------| -| `ping` | Returns a pong response with timestamp | -| `echo` | Returns the same message that was sent | -| `getInfo` | Returns information about this plugin | - -## Frontend Development - -The UI uses `@ddk/host-sdk` to communicate with the backend: - -```typescript -import { hostBridge } from '@ddk/host-sdk'; - -// Call a plugin command -const result = await hostBridge.invokePluginCommand( - 'com.ddk.sample', // Plugin ID - 'echo', // Command name - JSON.stringify({ message: 'Hello!' }) // Payload -); - -// Result is already an object (no JSON.parse needed) -console.log(result); -``` - -### Workspace Integration - -The UI can access `@ddk/host-sdk` via pnpm workspace because the root `pnpm-workspace.yaml` includes: - -```yaml -packages: - - 'src/web/packages/*' - - 'src/web/apps/*' - - 'src/plugins/*/ui' -``` - -This allows `workspace:*` protocol in package.json without publishing the SDK. - -## Creating Your Own Plugin - -### Backend - -1. Copy `src/` as a template -2. Update the `.csproj` filename and namespaces -3. Implement your commands in the plugin class - -### Frontend - -1. Copy `ui/` as a template -2. Update `package.json` name field -3. Implement your UI in `Plugin.tsx` -4. Update `vite.config.ts` federation name - -### Manifest - -Update `plugin.manifest.json` with: - -- **id**: Unique plugin identifier (reverse-DNS notation) -- **backend.assembly**: Path to the DLL -- **backend.entryPoint**: Fully qualified plugin class name -- **ui.entry**: Path to production UI (`frontend/remoteEntry.js`) -- **ui.devEntry**: Dev server URL (`http://localhost:PORT/remoteEntry.js`) - -## Plugin Lifecycle - -1. Host discovers plugin via manifest -2. When invoked, host starts PluginHost process -3. PluginHost loads the assembly and creates plugin instance -4. Host calls `InitializeAsync` with context -5. Host can invoke commands via `ExecuteAsync` -6. UI is loaded via Module Federation using entry/devEntry URL -7. On shutdown, `DisposeAsync` is called diff --git a/src/plugins/sample-plugin/plugin.manifest.json b/src/plugins/sample-plugin/plugin.manifest.json deleted file mode 100644 index c163c66..0000000 --- a/src/plugins/sample-plugin/plugin.manifest.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "../../../tools/schema/plugin.manifest.schema.json", - "id": "com.ddk.sample", - "name": "Sample Plugin", - "version": "1.0.0", - "description": "A reference implementation demonstrating the DDK plugin architecture with basic commands for testing and development", - "author": "DDK Team", - "company": "DDK", - "category": "development", - "icon": "🔧", - "backend": { - "assembly": "backend/Ddk.SamplePlugin.dll", - "entryPoint": "Ddk.SamplePlugin.SamplePlugin" - }, - "ui": { - "entry": "frontend/assets/remoteEntry.js", - "devEntry": "http://localhost:5175/dist/assets/remoteEntry.js", - "module": "./Plugin", - "scope": "samplePlugin" - } -} diff --git a/src/plugins/sample-plugin/src/Ddk.SamplePlugin.csproj b/src/plugins/sample-plugin/src/Ddk.SamplePlugin.csproj deleted file mode 100644 index 5b5fadb..0000000 --- a/src/plugins/sample-plugin/src/Ddk.SamplePlugin.csproj +++ /dev/null @@ -1,28 +0,0 @@ - - - - net10.0 - Ddk.SamplePlugin - Ddk.SamplePlugin - enable - enable - - - com.ddk.sample - 1.0.0 - - - $(MSBuildProjectDirectory)\..\dist - - - - - - - - - - - - - diff --git a/src/plugins/sample-plugin/src/SamplePlugin.cs b/src/plugins/sample-plugin/src/SamplePlugin.cs deleted file mode 100644 index ef94136..0000000 --- a/src/plugins/sample-plugin/src/SamplePlugin.cs +++ /dev/null @@ -1,165 +0,0 @@ -using System.Text.Json; -using System.Text.Encodings.Web; -using Microsoft.Extensions.Logging; -using DataverseDevKit.Core.Abstractions; -using DataverseDevKit.Core.Models; - -namespace Ddk.SamplePlugin; - -/// -/// Sample plugin demonstrating the DDK plugin architecture. -/// This serves as a reference implementation for building plugins. -/// -public sealed class SamplePlugin : IToolPlugin -{ - private static readonly JsonSerializerOptions JsonOptions = new() - { - Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, - PropertyNamingPolicy = JsonNamingPolicy.CamelCase - }; - - private IPluginContext? _context; - - public string PluginId => "com.ddk.sample"; - public string Name => "Sample Plugin"; - public string Version => "1.0.0"; - - public Task InitializeAsync(IPluginContext context, CancellationToken cancellationToken = default) - { - _context = context; - _context.Logger.LogInformation("Sample plugin initialized"); - return Task.CompletedTask; - } - - public Task> GetCommandsAsync(CancellationToken cancellationToken = default) - { - var commands = new List - { - new() - { - Name = "ping", - Label = "Ping", - Description = "Returns a pong response with timestamp" - }, - new() - { - Name = "echo", - Label = "Echo Message", - Description = "Returns the same message that was sent" - }, - new() - { - Name = "getInfo", - Label = "Get Plugin Info", - Description = "Returns information about this plugin" - } - }; - - return Task.FromResult>(commands); - } - - public async Task ExecuteAsync(string commandName, string payload, CancellationToken cancellationToken = default) - { - if (_context == null) - { - throw new InvalidOperationException("Plugin not initialized"); - } - - _context.Logger.LogInformation("Executing command: {Command}", commandName); - - return commandName switch - { - "ping" => ExecutePing(), - "echo" => ExecuteEcho(payload), - "getInfo" => ExecuteGetInfo(), - _ => throw new ArgumentException($"Unknown command: {commandName}", nameof(commandName)) - }; - } - - private JsonElement ExecutePing() - { - var response = new PingResponse - { - Message = "pong", - Timestamp = DateTimeOffset.UtcNow, - PluginId = PluginId - }; - - var json = JsonSerializer.Serialize(response, JsonOptions); - return JsonSerializer.Deserialize(json); - } - - private JsonElement ExecuteEcho(string payload) - { - try - { - var request = JsonSerializer.Deserialize(payload); - var response = new EchoResponse - { - Message = request?.Message ?? string.Empty, - ReceivedAt = DateTimeOffset.UtcNow - }; - var json = JsonSerializer.Serialize(response, JsonOptions); - return JsonSerializer.Deserialize(json); - } - catch (JsonException) - { - // If payload isn't valid JSON, just echo it back as-is - return JsonSerializer.Deserialize( - JsonSerializer.Serialize(new EchoResponse - { - Message = payload, - ReceivedAt = DateTimeOffset.UtcNow - }, JsonOptions)); - } - } - - private JsonElement ExecuteGetInfo() - { - var response = new PluginInfoResponse - { - PluginId = PluginId, - Name = Name, - Version = Version, - StoragePath = _context!.StoragePath, - ServerTime = DateTimeOffset.UtcNow - }; - - return JsonSerializer.SerializeToElement(response, JsonOptions); - } - - public Task DisposeAsync() - { - _context?.Logger.LogInformation("Sample plugin disposed"); - return Task.CompletedTask; - } -} - -// Request/Response DTOs - -internal sealed record EchoRequest -{ - public string Message { get; init; } = string.Empty; -} - -internal sealed record EchoResponse -{ - public string Message { get; init; } = string.Empty; - public DateTimeOffset ReceivedAt { get; init; } -} - -internal sealed record PingResponse -{ - public string Message { get; init; } = string.Empty; - public DateTimeOffset Timestamp { get; init; } - public string PluginId { get; init; } = string.Empty; -} - -internal sealed record PluginInfoResponse -{ - public string PluginId { get; init; } = string.Empty; - public string Name { get; init; } = string.Empty; - public string Version { get; init; } = string.Empty; - public string StoragePath { get; init; } = string.Empty; - public DateTimeOffset ServerTime { get; init; } -} diff --git a/src/plugins/sample-plugin/ui/index.html b/src/plugins/sample-plugin/ui/index.html deleted file mode 100644 index 09ed7d5..0000000 --- a/src/plugins/sample-plugin/ui/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - Sample Plugin - Development - - - -
- - - diff --git a/src/plugins/sample-plugin/ui/package.json b/src/plugins/sample-plugin/ui/package.json deleted file mode 100644 index 4a49307..0000000 --- a/src/plugins/sample-plugin/ui/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "@ddk/plugin-sample-ui", - "version": "1.0.0", - "private": true, - "type": "module", - "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "preview": "vite preview", - "type-check": "tsc --noEmit" - }, - "dependencies": { - "@ddk/host-sdk": "workspace:*", - "@fluentui/react-components": "^9.56.4", - "@fluentui/react-icons": "^2.0.272", - "react": "^18.3.1", - "react-dom": "^18.3.1" - }, - "devDependencies": { - "@types/react": "^18.3.18", - "@types/react-dom": "^18.3.5", - "@vitejs/plugin-react": "^4.3.4", - "@originjs/vite-plugin-federation": "^1.3.6", - "typescript": "~5.7.3", - "vite": "^6.0.7" - } -} diff --git a/src/plugins/sample-plugin/ui/src/Plugin.tsx b/src/plugins/sample-plugin/ui/src/Plugin.tsx deleted file mode 100644 index 8a06355..0000000 --- a/src/plugins/sample-plugin/ui/src/Plugin.tsx +++ /dev/null @@ -1,374 +0,0 @@ -import React, { useState, useCallback } from 'react'; -import { - makeStyles, - tokens, - Card, - CardHeader, - Text, - Button, - Input, - Field, - Badge, - Spinner, - Divider, -} from '@fluentui/react-components'; -import { - SendRegular, - InfoRegular, - CheckmarkCircleRegular, - DismissCircleRegular, - ArrowSyncRegular, -} from '@fluentui/react-icons'; -import { hostBridge } from '@ddk/host-sdk'; - -const PLUGIN_ID = 'com.ddk.sample'; - -const useStyles = makeStyles({ - container: { - display: 'flex', - flexDirection: 'column', - gap: tokens.spacingVerticalL, - padding: tokens.spacingVerticalL, - height: '100%', - overflowY: 'auto', - }, - header: { - display: 'flex', - flexDirection: 'column', - gap: tokens.spacingVerticalS, - }, - title: { - fontSize: tokens.fontSizeHero800, - fontWeight: tokens.fontWeightSemibold, - color: tokens.colorNeutralForeground1, - }, - subtitle: { - fontSize: tokens.fontSizeBase300, - color: tokens.colorNeutralForeground3, - }, - section: { - display: 'flex', - flexDirection: 'column', - gap: tokens.spacingVerticalM, - }, - commandCard: { - padding: tokens.spacingVerticalL, - }, - commandRow: { - display: 'flex', - gap: tokens.spacingHorizontalM, - alignItems: 'flex-end', - marginTop: tokens.spacingVerticalM, - }, - resultContainer: { - marginTop: tokens.spacingVerticalM, - padding: tokens.spacingVerticalM, - backgroundColor: tokens.colorNeutralBackground2, - borderRadius: tokens.borderRadiusMedium, - }, - resultLabel: { - fontWeight: tokens.fontWeightSemibold, - fontSize: tokens.fontSizeBase200, - color: tokens.colorNeutralForeground3, - marginBottom: tokens.spacingVerticalXS, - }, - resultContent: { - fontFamily: 'monospace', - fontSize: tokens.fontSizeBase300, - whiteSpace: 'pre-wrap', - wordBreak: 'break-word', - }, - errorContent: { - color: tokens.colorPaletteRedForeground1, - }, - statusBadge: { - display: 'flex', - alignItems: 'center', - gap: tokens.spacingHorizontalXS, - }, - infoGrid: { - display: 'grid', - gridTemplateColumns: 'auto 1fr', - gap: tokens.spacingHorizontalM, - alignItems: 'baseline', - }, - infoLabel: { - fontWeight: tokens.fontWeightSemibold, - color: tokens.colorNeutralForeground3, - }, - infoValue: { - fontFamily: 'monospace', - }, -}); - -interface PluginProps { - instanceId: string; -} - -interface CommandResult { - success: boolean; - data?: unknown; - error?: string; - timestamp: Date; -} - -/** - * Sample Plugin UI Component - * - * Demonstrates how to: - * 1. Call backend plugin commands via hostBridge.invokePluginCommand() - * 2. Handle command responses and errors - * 3. Display results to the user - * - * The hostBridge SDK handles all communication with the MAUI host application, - * which routes the commands to the appropriate plugin backend via gRPC. - */ -const Plugin: React.FC = ({ instanceId }) => { - const styles = useStyles(); - - // State for each command demonstration - const [pingResult, setPingResult] = useState(null); - const [pingLoading, setPingLoading] = useState(false); - - const [echoInput, setEchoInput] = useState('Hello from the UI!'); - const [echoResult, setEchoResult] = useState(null); - const [echoLoading, setEchoLoading] = useState(false); - - const [infoResult, setInfoResult] = useState(null); - const [infoLoading, setInfoLoading] = useState(false); - - /** - * Execute the 'ping' command. - * This is the simplest command - no input required, just returns a response. - */ - const handlePing = useCallback(async () => { - setPingLoading(true); - try { - // invokePluginCommand(pluginId, commandName, payload?) - // Result is already an object, no JSON.parse needed - const result = await hostBridge.invokePluginCommand(PLUGIN_ID, 'ping'); - setPingResult({ - success: true, - data: result, - timestamp: new Date(), - }); - } catch (error) { - setPingResult({ - success: false, - error: error instanceof Error ? error.message : String(error), - timestamp: new Date(), - }); - } finally { - setPingLoading(false); - } - }, []); - - /** - * Execute the 'echo' command with a message payload. - * Demonstrates how to send data to the backend. - */ - const handleEcho = useCallback(async () => { - if (!echoInput.trim()) return; - - setEchoLoading(true); - try { - // Payload is sent as JSON string - const payload = JSON.stringify({ message: echoInput }); - // Result is already an object, no JSON.parse needed - const result = await hostBridge.invokePluginCommand(PLUGIN_ID, 'echo', payload); - setEchoResult({ - success: true, - data: result, - timestamp: new Date(), - }); - } catch (error) { - setEchoResult({ - success: false, - error: error instanceof Error ? error.message : String(error), - timestamp: new Date(), - }); - } finally { - setEchoLoading(false); - } - }, [echoInput]); - - /** - * Execute the 'getInfo' command. - * Returns detailed information about the plugin. - */ - const handleGetInfo = useCallback(async () => { - setInfoLoading(true); - try { - // Result is already an object, no JSON.parse needed - const result = await hostBridge.invokePluginCommand(PLUGIN_ID, 'getInfo'); - setInfoResult({ - success: true, - data: result, - timestamp: new Date(), - }); - } catch (error) { - setInfoResult({ - success: false, - error: error instanceof Error ? error.message : String(error), - timestamp: new Date(), - }); - } finally { - setInfoLoading(false); - } - }, []); - - const renderResult = (result: CommandResult | null, isLoading: boolean) => { - if (isLoading) { - return ( -
- -
- ); - } - - if (!result) return null; - - return ( -
-
- {result.success ? ( - }> - Success - - ) : ( - }> - Error - - )} - - {result.timestamp.toLocaleTimeString()} - -
- -
Response:
- - {result.success - ? JSON.stringify(result.data, null, 2) - : result.error} - -
- ); - }; - - return ( -
- {/* Header */} -
- 🔧 Sample Plugin - - Reference implementation demonstrating plugin UI ↔ backend communication - - - Instance: {instanceId} - -
- - {/* Command Demonstrations */} -
- {/* Ping Command */} - - Ping Command} - description="Simple health check - calls the backend and returns a timestamp" - /> -
- -
- {renderResult(pingResult, pingLoading)} -
- - {/* Echo Command */} - - Echo Command} - description="Send a message to the backend and receive it back with a timestamp" - /> -
- - setEchoInput(data.value)} - placeholder="Enter a message to echo..." - onKeyDown={(e) => e.key === 'Enter' && handleEcho()} - /> - - -
- {renderResult(echoResult, echoLoading)} -
- - {/* Get Info Command */} - - Get Plugin Info} - description="Retrieve detailed information about the running plugin instance" - /> -
- -
- {renderResult(infoResult, infoLoading)} -
-
- - {/* Usage Guide */} - - 💡 How It Works} - /> -
- - This UI demonstrates calling backend plugin commands using the @ddk/host-sdk: - -
-{`import { hostBridge } from '@ddk/host-sdk';
-
-// Call a plugin command
-const result = await hostBridge.invokePluginCommand(
-  'com.ddk.sample',  // Plugin ID
-  'echo',            // Command name  
-  JSON.stringify({ message: 'Hello!' }) // Payload
-);
-
-// Result is already an object (no JSON.parse needed)
-console.log(result);`}
-          
-
-
-
- ); -}; - -export default Plugin; diff --git a/src/plugins/sample-plugin/ui/src/dev.tsx b/src/plugins/sample-plugin/ui/src/dev.tsx deleted file mode 100644 index f279813..0000000 --- a/src/plugins/sample-plugin/ui/src/dev.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { StrictMode } from 'react'; -import { createRoot } from 'react-dom/client'; -import { FluentProvider, webDarkTheme } from '@fluentui/react-components'; -import Plugin from './Plugin'; - -/** - * Development mode entry point. - * This renders the plugin in standalone mode for easy development/testing. - * In production, the Plugin component is loaded via Module Federation. - */ -createRoot(document.getElementById('root')!).render( - - - - - -); diff --git a/src/plugins/sample-plugin/ui/tsconfig.json b/src/plugins/sample-plugin/ui/tsconfig.json deleted file mode 100644 index 30cfcc6..0000000 --- a/src/plugins/sample-plugin/ui/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - "jsx": "react-jsx", - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"] -} diff --git a/src/plugins/sample-plugin/ui/tsconfig.node.json b/src/plugins/sample-plugin/ui/tsconfig.node.json deleted file mode 100644 index b40f72c..0000000 --- a/src/plugins/sample-plugin/ui/tsconfig.node.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", - "target": "ES2022", - "lib": ["ES2023"], - "module": "ESNext", - "skipLibCheck": true, - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true, - "strict": true, - "noEmit": true - }, - "include": ["vite.config.ts"] -} diff --git a/src/plugins/sample-plugin/ui/vite.config.ts b/src/plugins/sample-plugin/ui/vite.config.ts deleted file mode 100644 index 3e20c24..0000000 --- a/src/plugins/sample-plugin/ui/vite.config.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { defineConfig } from 'vite'; -import react from '@vitejs/plugin-react'; -import federation from '@originjs/vite-plugin-federation'; - -export default defineConfig({ - plugins: [ - react(), - federation({ - name: 'samplePlugin', - filename: 'remoteEntry.js', - exposes: { - './Plugin': './src/Plugin.tsx', - }, - shared: { - react: { requiredVersion: '^18.3.1' }, - 'react-dom': { requiredVersion: '^18.3.1' }, - '@fluentui/react-components': {}, - '@fluentui/react-icons': {}, - '@ddk/host-sdk': {}, - }, - }), - ], - build: { - target: 'esnext', - minify: false, - cssCodeSplit: false, - rollupOptions: { - output: { - format: 'esm', - }, - }, - }, - server: { - port: 5175, - strictPort: true, - cors: true, - headers: { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS', - 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization', - }, - }, -}); diff --git a/src/plugins/solution-layer-analyzer/plugin.manifest.json b/src/plugins/solution-layer-analyzer/plugin.manifest.json index eff1a53..cd8d6d9 100644 --- a/src/plugins/solution-layer-analyzer/plugin.manifest.json +++ b/src/plugins/solution-layer-analyzer/plugin.manifest.json @@ -13,9 +13,9 @@ "entryPoint": "Ddk.SolutionLayerAnalyzer.SolutionLayerAnalyzerPlugin" }, "ui": { - "devEntry": "http://localhost:5174/dist/assets/remoteEntry.js", - "entry": "frontend/assets/remoteEntry.js", - "module": "./Plugin", + "devEntry": "http://localhost:5174/dist/remoteEntry.js", + "entry": "frontend/remoteEntry.js", + "module": "Plugin", "scope": "solutionLayerAnalyzer" } } diff --git a/src/plugins/solution-layer-analyzer/src/DTOs/ReportDtos.cs b/src/plugins/solution-layer-analyzer/src/DTOs/ReportDtos.cs new file mode 100644 index 0000000..3103244 --- /dev/null +++ b/src/plugins/solution-layer-analyzer/src/DTOs/ReportDtos.cs @@ -0,0 +1,260 @@ +using System.Text.Json.Serialization; +using Ddk.SolutionLayerAnalyzer.Models; + +namespace Ddk.SolutionLayerAnalyzer.DTOs; + +// ============================================================================ +// Stateless Report Configuration DTOs (UI-centric, no database) +// ============================================================================ + +/// +/// A single report definition (in-memory, from UI) +/// +public class ReportDefinition +{ + public string Id { get; set; } = string.Empty; + public string Name { get; set; } = string.Empty; + public string? Description { get; set; } + public ReportSeverity Severity { get; set; } = ReportSeverity.Information; + public string? RecommendedAction { get; set; } + public string QueryJson { get; set; } = string.Empty; + public int DisplayOrder { get; set; } +} + +/// +/// A group of reports (in-memory, from UI) +/// +public class ReportGroupDefinition +{ + public string Id { get; set; } = string.Empty; + public string Name { get; set; } = string.Empty; + public int DisplayOrder { get; set; } + public List Reports { get; set; } = new(); +} + +/// +/// Full report configuration (in-memory, from UI) +/// +public class ReportConfigDefinition +{ + public List SourceSolutions { get; set; } = new(); + public List TargetSolutions { get; set; } = new(); + public List? ComponentTypes { get; set; } + public List ReportGroups { get; set; } = new(); + public List UngroupedReports { get; set; } = new(); +} + +/// +/// Supported formats for report config serialization +/// +[JsonConverter(typeof(JsonStringEnumConverter))] +public enum ReportConfigFormat +{ + Json, + Yaml, + Xml +} + +/// +/// Request to parse a report configuration from file content +/// +public class ParseReportConfigRequest +{ + public string Content { get; set; } = string.Empty; + public ReportConfigFormat? Format { get; set; } // Auto-detect if null +} + +/// +/// Response from parsing a report configuration +/// +public class ParseReportConfigResponse +{ + public ReportConfigDefinition Config { get; set; } = new(); + public List Errors { get; set; } = new(); + public List Warnings { get; set; } = new(); +} + +/// +/// Request to serialize a report configuration +/// +public class SerializeReportConfigRequest +{ + public ReportConfigDefinition Config { get; set; } = new(); + public ReportConfigFormat Format { get; set; } = ReportConfigFormat.Yaml; +} + +/// +/// Response from serializing a report configuration +/// +public class SerializeReportConfigResponse +{ + public string Content { get; set; } = string.Empty; +} + +/// +/// Request to execute reports with a given configuration (event-based) +/// +public class ExecuteReportsRequest +{ + public string? OperationId { get; set; } + public string ConnectionId { get; set; } = string.Empty; + public ReportConfigDefinition Config { get; set; } = new(); + public ReportVerbosity Verbosity { get; set; } = ReportVerbosity.Basic; + public ReportOutputFormat? Format { get; set; } + public bool GenerateFile { get; set; } +} + +/// +/// Acknowledgment when starting report execution +/// +public class ExecuteReportsAcknowledgment +{ + public string OperationId { get; set; } = string.Empty; + public bool Started { get; set; } + public string? ErrorMessage { get; set; } +} + +/// +/// Progress event during report execution +/// +public class ReportProgressEvent +{ + public string OperationId { get; set; } = string.Empty; + public int CurrentReport { get; set; } + public int TotalReports { get; set; } + public string? CurrentReportName { get; set; } + public string Phase { get; set; } = "starting"; // starting, executing, generating-output, complete + public int Percent { get; set; } +} + +/// +/// Completion event with report execution results +/// +public class ReportCompletionEvent +{ + public string OperationId { get; set; } = string.Empty; + public bool Success { get; set; } + public ReportSummary? Summary { get; set; } + public List? Reports { get; set; } + public string? OutputContent { get; set; } // Serialized file content if generateFile was true + public ReportOutputFormat? OutputFormat { get; set; } + public string? ErrorMessage { get; set; } +} + +/// +/// Simple component result without layer details (used internally for queries) +/// +public class ReportComponentResult +{ + public string ComponentId { get; set; } = string.Empty; + public int ComponentType { get; set; } + public string ComponentTypeName { get; set; } = string.Empty; + public string? LogicalName { get; set; } + public string? DisplayName { get; set; } + public List Solutions { get; set; } = new(); +} + +/// +/// Report output format +/// +[JsonConverter(typeof(JsonStringEnumConverter))] +public enum ReportOutputFormat +{ + Yaml, + Json, + Csv +} + +/// +/// Report verbosity level +/// +[JsonConverter(typeof(JsonStringEnumConverter))] +public enum ReportVerbosity +{ + /// + /// Basic - Components only with summary + /// + Basic, + + /// + /// Medium - Components + changed layer attribute list + /// + Medium, + + /// + /// Verbose - Components + layer attributes with full changed values + /// + Verbose +} + +/// +/// Detailed report output structure +/// +public class ReportOutput +{ + public DateTime GeneratedAt { get; set; } + public string ConnectionId { get; set; } = string.Empty; + public ReportVerbosity Verbosity { get; set; } + public List Reports { get; set; } = new(); + public ReportSummary Summary { get; set; } = new(); +} + +/// +/// Individual report execution result in output +/// +public class ReportExecutionResult +{ + public string Name { get; set; } = string.Empty; + public string? Group { get; set; } + public ReportSeverity Severity { get; set; } + public string? RecommendedAction { get; set; } + public int TotalMatches { get; set; } + public List Components { get; set; } = new(); +} + +/// +/// Detailed component result with layer information +/// +public class DetailedComponentResult +{ + public string ComponentId { get; set; } = string.Empty; + public int ComponentType { get; set; } + public string ComponentTypeName { get; set; } = string.Empty; + public string? LogicalName { get; set; } + public string? DisplayName { get; set; } + public List? Solutions { get; set; } + public List? Layers { get; set; } + public string? MakePortalUrl { get; set; } +} + +/// +/// Layer information for verbose output +/// +public class LayerInfo +{ + public string SolutionName { get; set; } = string.Empty; + public int Ordinal { get; set; } + public List? ChangedAttributes { get; set; } +} + +/// +/// Attribute change information for verbose output +/// +public class AttributeChange +{ + public string AttributeName { get; set; } = string.Empty; + public string? OldValue { get; set; } + public string? NewValue { get; set; } +} + +/// +/// Summary of all report executions +/// +public class ReportSummary +{ + public int TotalReports { get; set; } + public int CriticalFindings { get; set; } + public int WarningFindings { get; set; } + public int InformationalFindings { get; set; } + public int TotalComponents { get; set; } +} diff --git a/src/plugins/solution-layer-analyzer/src/Ddk.SolutionLayerAnalyzer.csproj b/src/plugins/solution-layer-analyzer/src/Ddk.SolutionLayerAnalyzer.csproj index 681019f..3cb6f70 100644 --- a/src/plugins/solution-layer-analyzer/src/Ddk.SolutionLayerAnalyzer.csproj +++ b/src/plugins/solution-layer-analyzer/src/Ddk.SolutionLayerAnalyzer.csproj @@ -19,6 +19,7 @@ + diff --git a/src/plugins/solution-layer-analyzer/src/Filters/FilterNode.cs b/src/plugins/solution-layer-analyzer/src/Filters/FilterNode.cs index b62c0eb..abef2ad 100644 --- a/src/plugins/solution-layer-analyzer/src/Filters/FilterNode.cs +++ b/src/plugins/solution-layer-analyzer/src/Filters/FilterNode.cs @@ -44,6 +44,7 @@ public abstract class LayerFilterNode /// /// String comparison operators for attribute filters. /// +[JsonConverter(typeof(JsonStringEnumConverter))] public enum StringOperator { Equals, @@ -59,6 +60,7 @@ public enum StringOperator /// /// Attribute targets for filtering. /// +[JsonConverter(typeof(JsonStringEnumConverter))] public enum AttributeTarget { LogicalName, @@ -351,6 +353,7 @@ public sealed class HasRelevantChangesFilterNode : FilterNode /// /// Specifies how target solutions are determined for attribute diff comparison. /// +[JsonConverter(typeof(JsonStringEnumConverter))] public enum AttributeDiffTargetMode { /// @@ -367,6 +370,7 @@ public enum AttributeDiffTargetMode /// /// Specifies how multiple attribute names are matched when checking for differences. /// +[JsonConverter(typeof(JsonStringEnumConverter))] public enum AttributeMatchLogic { /// diff --git a/src/plugins/solution-layer-analyzer/src/Models/AnalyzerConfig.cs b/src/plugins/solution-layer-analyzer/src/Models/AnalyzerConfig.cs new file mode 100644 index 0000000..ff2e042 --- /dev/null +++ b/src/plugins/solution-layer-analyzer/src/Models/AnalyzerConfig.cs @@ -0,0 +1,89 @@ +namespace Ddk.SolutionLayerAnalyzer.Models; + +/// +/// Represents the global configuration for the analyzer including settings and reports +/// +public class AnalyzerConfig +{ + /// + /// Source solutions to analyze + /// + public List SourceSolutions { get; set; } = new(); + + /// + /// Target solutions to compare against + /// + public List TargetSolutions { get; set; } = new(); + + /// + /// Component types to include in analysis (e.g., "Entity", "SystemForm", "SavedQuery") + /// + public List? ComponentTypes { get; set; } + + /// + /// Report groups and their reports + /// + public List ReportGroups { get; set; } = new(); + + /// + /// Reports that are not in any group + /// + public List UngroupedReports { get; set; } = new(); +} + +/// +/// Report group for XML serialization +/// +public class ConfigReportGroup +{ + /// + /// Name of the group + /// + public string Name { get; set; } = string.Empty; + + /// + /// Display order + /// + public int DisplayOrder { get; set; } + + /// + /// Reports in this group + /// + public List Reports { get; set; } = new(); +} + +/// +/// Report configuration for XML serialization +/// +public class ConfigReport +{ + /// + /// Name of the report + /// + public string Name { get; set; } = string.Empty; + + /// + /// Description + /// + public string? Description { get; set; } + + /// + /// Severity level + /// + public ReportSeverity Severity { get; set; } = ReportSeverity.Information; + + /// + /// Recommended action + /// + public string? RecommendedAction { get; set; } + + /// + /// Filter query as JSON + /// + public string QueryJson { get; set; } = string.Empty; + + /// + /// Display order + /// + public int DisplayOrder { get; set; } +} diff --git a/src/plugins/solution-layer-analyzer/src/Models/ReportSeverity.cs b/src/plugins/solution-layer-analyzer/src/Models/ReportSeverity.cs new file mode 100644 index 0000000..db4d91d --- /dev/null +++ b/src/plugins/solution-layer-analyzer/src/Models/ReportSeverity.cs @@ -0,0 +1,25 @@ +using System.Text.Json.Serialization; + +namespace Ddk.SolutionLayerAnalyzer.Models; + +/// +/// Severity levels for reports +/// +[JsonConverter(typeof(JsonStringEnumConverter))] +public enum ReportSeverity +{ + /// + /// Informational - no immediate action required + /// + Information = 0, + + /// + /// Warning - should be reviewed and potentially addressed + /// + Warning = 1, + + /// + /// Critical - requires immediate attention + /// + Critical = 2 +} diff --git a/src/plugins/solution-layer-analyzer/src/Services/ComponentNameResolver.cs b/src/plugins/solution-layer-analyzer/src/Services/ComponentNameResolver.cs index 1e8d5a3..102a6c1 100644 --- a/src/plugins/solution-layer-analyzer/src/Services/ComponentNameResolver.cs +++ b/src/plugins/solution-layer-analyzer/src/Services/ComponentNameResolver.cs @@ -1,3 +1,4 @@ +using DataverseDevKit.Core.Exceptions; using Ddk.SolutionLayerAnalyzer.Data; using Ddk.SolutionLayerAnalyzer.Models; using Microsoft.EntityFrameworkCore; @@ -156,6 +157,11 @@ public async Task> ResolveBatchAsync( dbContext.ComponentNameCache.Add(cacheEntry); _sessionCache[(objectId, typeCode)] = resolved; } + catch (SessionExpiredException ex) + { + _logger.LogError(ex, "Session timed out while discovering solutions"); + throw; + } catch (Exception ex) { _logger.LogWarning(ex, "Failed to resolve component {ObjectId} of type {TypeCode}", objectId, typeCode); @@ -203,6 +209,11 @@ private async Task ResolveFromDataverseAsync( _ => FallbackToId(objectId, componentTypeCode) }; } + catch (SessionExpiredException ex) + { + _logger.LogError(ex, "Session timed out while discovering solutions"); + throw; + } catch (Exception ex) { _logger.LogDebug(ex, "Failed to resolve component {ObjectId} of type {TypeCode}, using fallback", objectId, componentTypeCode); diff --git a/src/plugins/solution-layer-analyzer/src/Services/CsvHelper.cs b/src/plugins/solution-layer-analyzer/src/Services/CsvHelper.cs new file mode 100644 index 0000000..a1c6431 --- /dev/null +++ b/src/plugins/solution-layer-analyzer/src/Services/CsvHelper.cs @@ -0,0 +1,128 @@ +using System.Text; +using Ddk.SolutionLayerAnalyzer.DTOs; + +namespace Ddk.SolutionLayerAnalyzer.Services; + +/// +/// Helper class for CSV serialization +/// +public static class CsvHelper +{ + /// + /// Convert report output to CSV format + /// + public static string SerializeReportOutput(ReportOutput reportOutput, ReportVerbosity verbosity) + { + var sb = new StringBuilder(); + + // Add summary section + sb.AppendLine("# SUMMARY"); + sb.AppendLine($"Generated At,{EscapeCsv(reportOutput.GeneratedAt.ToString("yyyy-MM-dd HH:mm:ss"))}"); + sb.AppendLine($"Connection ID,{EscapeCsv(reportOutput.ConnectionId)}"); + sb.AppendLine($"Verbosity,{reportOutput.Verbosity}"); + sb.AppendLine($"Total Reports,{reportOutput.Summary.TotalReports}"); + sb.AppendLine($"Critical Findings,{reportOutput.Summary.CriticalFindings}"); + sb.AppendLine($"Warning Findings,{reportOutput.Summary.WarningFindings}"); + sb.AppendLine($"Informational Findings,{reportOutput.Summary.InformationalFindings}"); + sb.AppendLine($"Total Components,{reportOutput.Summary.TotalComponents}"); + sb.AppendLine(); + + // Add detailed findings + sb.AppendLine("# DETAILED FINDINGS"); + + if (verbosity == ReportVerbosity.Basic) + { + // Basic format: Report, Group, Severity, Action, Component info + sb.AppendLine("Report Name,Group,Severity,Recommended Action,Component ID,Component Type,Logical Name,Display Name,Solutions,Make Portal URL"); + + foreach (var report in reportOutput.Reports) + { + foreach (var component in report.Components) + { + sb.AppendLine($"{EscapeCsv(report.Name)},{EscapeCsv(report.Group)},{report.Severity},{EscapeCsv(report.RecommendedAction)},{EscapeCsv(component.ComponentId)},{component.ComponentType},{EscapeCsv(component.LogicalName)},{EscapeCsv(component.DisplayName)},{EscapeCsv(string.Join("; ", component.Solutions ?? new List()))},{EscapeCsv(component.MakePortalUrl)}"); + } + } + } + else if (verbosity == ReportVerbosity.Medium) + { + // Medium format: Adds layer and changed attributes column + sb.AppendLine("Report Name,Group,Severity,Recommended Action,Component ID,Component Type,Logical Name,Display Name,Solution,Layer Ordinal,Changed Attributes,Make Portal URL"); + + foreach (var report in reportOutput.Reports) + { + foreach (var component in report.Components) + { + if (component.Layers != null && component.Layers.Any()) + { + foreach (var layer in component.Layers) + { + var changedAttrs = layer.ChangedAttributes != null + ? string.Join("; ", layer.ChangedAttributes.Select(a => a.AttributeName)) + : string.Empty; + + sb.AppendLine($"{EscapeCsv(report.Name)},{EscapeCsv(report.Group)},{report.Severity},{EscapeCsv(report.RecommendedAction)},{EscapeCsv(component.ComponentId)},{component.ComponentType},{EscapeCsv(component.LogicalName)},{EscapeCsv(component.DisplayName)},{EscapeCsv(layer.SolutionName)},{layer.Ordinal},{EscapeCsv(changedAttrs)},{EscapeCsv(component.MakePortalUrl)}"); + } + } + else + { + sb.AppendLine($"{EscapeCsv(report.Name)},{EscapeCsv(report.Group)},{report.Severity},{EscapeCsv(report.RecommendedAction)},{EscapeCsv(component.ComponentId)},{component.ComponentType},{EscapeCsv(component.LogicalName)},{EscapeCsv(component.DisplayName)},,,{EscapeCsv(component.MakePortalUrl)}"); + } + } + } + } + else // Verbose + { + // Verbose format: One row per attribute change + sb.AppendLine("Report Name,Group,Severity,Recommended Action,Component ID,Component Type,Logical Name,Display Name,Solution,Layer Ordinal,Attribute Name,Old Value,New Value,Make Portal URL"); + + foreach (var report in reportOutput.Reports) + { + foreach (var component in report.Components) + { + if (component.Layers != null && component.Layers.Any()) + { + foreach (var layer in component.Layers) + { + if (layer.ChangedAttributes != null && layer.ChangedAttributes.Any()) + { + foreach (var attr in layer.ChangedAttributes) + { + sb.AppendLine($"{EscapeCsv(report.Name)},{EscapeCsv(report.Group)},{report.Severity},{EscapeCsv(report.RecommendedAction)},{EscapeCsv(component.ComponentId)},{component.ComponentType},{EscapeCsv(component.LogicalName)},{EscapeCsv(component.DisplayName)},{EscapeCsv(layer.SolutionName)},{layer.Ordinal},{EscapeCsv(attr.AttributeName)},{EscapeCsv(attr.OldValue)},{EscapeCsv(attr.NewValue)},{EscapeCsv(component.MakePortalUrl)}"); + } + } + else + { + sb.AppendLine($"{EscapeCsv(report.Name)},{EscapeCsv(report.Group)},{report.Severity},{EscapeCsv(report.RecommendedAction)},{EscapeCsv(component.ComponentId)},{component.ComponentType},{EscapeCsv(component.LogicalName)},{EscapeCsv(component.DisplayName)},{EscapeCsv(layer.SolutionName)},{layer.Ordinal},,,{EscapeCsv(component.MakePortalUrl)}"); + } + } + } + else + { + sb.AppendLine($"{EscapeCsv(report.Name)},{EscapeCsv(report.Group)},{report.Severity},{EscapeCsv(report.RecommendedAction)},{EscapeCsv(component.ComponentId)},{component.ComponentType},{EscapeCsv(component.LogicalName)},{EscapeCsv(component.DisplayName)},,,,,,{EscapeCsv(component.MakePortalUrl)}"); + } + } + } + } + + return sb.ToString(); + } + + /// + /// Escape a CSV field value + /// + private static string EscapeCsv(string? value) + { + if (string.IsNullOrEmpty(value)) + { + return string.Empty; + } + + // If the value contains comma, quote, or newline, wrap it in quotes and escape internal quotes + if (value.Contains(',') || value.Contains('"') || value.Contains('\n') || value.Contains('\r')) + { + return $"\"{value.Replace("\"", "\"\"")}\""; + } + + return value; + } +} diff --git a/src/plugins/solution-layer-analyzer/src/Services/IndexingService.cs b/src/plugins/solution-layer-analyzer/src/Services/IndexingService.cs index fbe8526..013dad8 100644 --- a/src/plugins/solution-layer-analyzer/src/Services/IndexingService.cs +++ b/src/plugins/solution-layer-analyzer/src/Services/IndexingService.cs @@ -1,6 +1,7 @@ using System.Diagnostics; using System.Text.Json; using DataverseDevKit.Core.Abstractions; +using DataverseDevKit.Core.Exceptions; using DataverseDevKit.Core.Models; using Ddk.SolutionLayerAnalyzer.Data; using Ddk.SolutionLayerAnalyzer.DTOs; @@ -261,6 +262,11 @@ private async Task> DiscoverSolutionsAsync( _logger.LogInformation("Indexed {Count} solutions", solutions.Count); } + catch (SessionExpiredException ex) + { + _logger.LogError(ex, "Session timed out while discovering solutions"); + throw; + } catch (Exception ex) { _logger.LogError(ex, "Error discovering solutions"); @@ -397,6 +403,11 @@ await EmitProgressAsync(operationId, "names", percent, _logger.LogInformation("Discovered {Count} components", components.Count); } + catch (SessionExpiredException ex) + { + _logger.LogError(ex, "Session timed out while discovering solutions"); + throw; + } catch (Exception ex) { _logger.LogError(ex, "Error discovering components"); @@ -461,7 +472,7 @@ await EmitProgressAsync(operationId, "layers", percent, { do { - results = await Task.Run(() => _serviceClient.RetrieveMultiple(query), cancellationToken); + results = await _serviceClient.RetrieveMultipleAsync(query, cancellationToken); componentLayerCount += results.Entities.Count; foreach (var entity in results.Entities) @@ -530,6 +541,11 @@ await EmitProgressAsync(operationId, "layers", percent, _logger.LogDebug("Found {Count} layers for component {ComponentId}", componentLayerCount, component.ComponentId); } } + catch (SessionExpiredException ex) + { + _logger.LogError(ex, "Session timed out while discovering solutions"); + throw; + } catch (Exception ex) { _logger.LogDebug(ex, "No layers found for component {ComponentId}", component.ComponentId); diff --git a/src/plugins/solution-layer-analyzer/src/Services/ReportService.cs b/src/plugins/solution-layer-analyzer/src/Services/ReportService.cs new file mode 100644 index 0000000..cbfec2e --- /dev/null +++ b/src/plugins/solution-layer-analyzer/src/Services/ReportService.cs @@ -0,0 +1,451 @@ +using System.Text.Json; +using System.Xml.Serialization; +using YamlDotNet.Serialization; +using YamlDotNet.Serialization.NamingConventions; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using Ddk.SolutionLayerAnalyzer.Data; +using Ddk.SolutionLayerAnalyzer.Models; +using Ddk.SolutionLayerAnalyzer.DTOs; +using Ddk.SolutionLayerAnalyzer.Filters; + +namespace Ddk.SolutionLayerAnalyzer.Services; + +/// +/// Service for managing reports - stateless operations only. +/// No database persistence - report configurations are managed in the UI. +/// +public class ReportService +{ + private readonly AnalyzerDbContext? _context; + private readonly ILogger _logger; + private readonly QueryService? _queryService; + + public ReportService(AnalyzerDbContext? context, ILogger logger, QueryService? queryService) + { + _context = context; + _logger = logger; + _queryService = queryService; + } + + // ============================================================================ + // Stateless Report Operations (UI-centric, no database) + // ============================================================================ + + /// + /// Parse a report configuration from file content. + /// Supports JSON, YAML, and XML formats. + /// + public ParseReportConfigResponse ParseConfig(ParseReportConfigRequest request) + { + var response = new ParseReportConfigResponse(); + + try + { + var format = request.Format ?? DetectFormat(request.Content); + + response.Config = format switch + { + ReportConfigFormat.Json => ParseJsonConfig(request.Content), + ReportConfigFormat.Yaml => ParseYamlConfig(request.Content), + ReportConfigFormat.Xml => ParseXmlConfig(request.Content), + _ => throw new ArgumentException($"Unsupported format: {format}") + }; + } + catch (Exception ex) + { + _logger.LogError(ex, "Failed to parse report config"); + response.Errors.Add($"Parse error: {ex.Message}"); + } + + return response; + } + + /// + /// Serialize a report configuration to the specified format. + /// + public SerializeReportConfigResponse SerializeConfig(SerializeReportConfigRequest request) + { + var content = request.Format switch + { + ReportConfigFormat.Json => SerializeJsonConfig(request.Config), + ReportConfigFormat.Yaml => SerializeYamlConfig(request.Config), + ReportConfigFormat.Xml => SerializeXmlConfig(request.Config), + _ => throw new ArgumentException($"Unsupported format: {request.Format}") + }; + + return new SerializeReportConfigResponse { Content = content }; + } + + /// + /// Execute reports from an in-memory configuration. + /// This is the stateless version that takes the full config from the request. + /// + public async Task ExecuteReportsFromConfigAsync( + ExecuteReportsRequest request, + IProgress? progress = null, + CancellationToken cancellationToken = default) + { + _logger.LogInformation("Executing reports from config, operation: {OperationId}", request.OperationId); + + var reportResults = new List(); + var totalCritical = 0; + var totalWarning = 0; + var totalInfo = 0; + var allComponentIds = new HashSet(); + + // Collect all reports + var allReports = new List<(ReportDefinition Report, string? GroupName)>(); + + foreach (var group in request.Config.ReportGroups) + { + foreach (var report in group.Reports) + { + allReports.Add((report, group.Name)); + } + } + + foreach (var report in request.Config.UngroupedReports) + { + allReports.Add((report, null)); + } + + var totalReports = allReports.Count; + var currentReport = 0; + + // Report starting phase + progress?.Report(new ReportProgressEvent + { + OperationId = request.OperationId ?? string.Empty, + CurrentReport = 0, + TotalReports = totalReports, + Phase = "starting", + Percent = 0 + }); + + foreach (var (report, groupName) in allReports) + { + cancellationToken.ThrowIfCancellationRequested(); + currentReport++; + + // Report executing phase + progress?.Report(new ReportProgressEvent + { + OperationId = request.OperationId ?? string.Empty, + CurrentReport = currentReport, + TotalReports = totalReports, + CurrentReportName = report.Name, + Phase = "executing", + Percent = (int)((currentReport - 1) * 100.0 / totalReports) + }); + + try + { + // Parse the filter from queryJson + FilterNode? filterNode = null; + if (!string.IsNullOrEmpty(report.QueryJson) && report.QueryJson != "null") + { + filterNode = JsonSerializer.Deserialize(report.QueryJson); + } + + // Execute the query + var queryRequest = new QueryRequest { Filters = filterNode }; + + if (_queryService == null) + { + throw new InvalidOperationException("Query service is required for report execution"); + } + + var queryResponse = await _queryService.QueryAsync(queryRequest, cancellationToken); + + // Map to component results + var componentResults = queryResponse.Rows.Select(c => new ReportComponentResult + { + ComponentId = c.ComponentId.ToString(), + ComponentType = MapComponentTypeToCode(c.ComponentType), + ComponentTypeName = c.ComponentType, + LogicalName = c.LogicalName, + DisplayName = c.DisplayName, + Solutions = c.LayerSequence + }).ToList(); + + // Map to detailed results based on verbosity + var detailedComponents = await MapToDetailedComponentsAsync( + componentResults, + request.Verbosity, + request.ConnectionId, + cancellationToken); + + var result = new ReportExecutionResult + { + Name = report.Name, + Group = groupName, + Severity = report.Severity, + RecommendedAction = report.RecommendedAction, + TotalMatches = componentResults.Count, + Components = detailedComponents + }; + + reportResults.Add(result); + + // Update summary counts + foreach (var comp in componentResults) + { + allComponentIds.Add(comp.ComponentId); + } + + if (report.Severity == ReportSeverity.Critical) + totalCritical += componentResults.Count; + else if (report.Severity == ReportSeverity.Warning) + totalWarning += componentResults.Count; + else + totalInfo += componentResults.Count; + } + catch (Exception ex) + { + _logger.LogError(ex, "Failed to execute report: {ReportName}", report.Name); + // Continue with other reports + } + } + + var summary = new ReportSummary + { + TotalReports = reportResults.Count, + CriticalFindings = totalCritical, + WarningFindings = totalWarning, + InformationalFindings = totalInfo, + TotalComponents = allComponentIds.Count + }; + + // Generate output content if requested + string? outputContent = null; + if (request.GenerateFile && request.Format.HasValue) + { + progress?.Report(new ReportProgressEvent + { + OperationId = request.OperationId ?? string.Empty, + CurrentReport = totalReports, + TotalReports = totalReports, + Phase = "generating-output", + Percent = 95 + }); + + var reportOutput = new ReportOutput + { + GeneratedAt = DateTime.UtcNow, + ConnectionId = request.ConnectionId, + Verbosity = request.Verbosity, + Reports = reportResults, + Summary = summary + }; + + outputContent = request.Format.Value switch + { + ReportOutputFormat.Yaml => SerializeYamlOutput(reportOutput), + ReportOutputFormat.Json => SerializeJsonOutput(reportOutput), + ReportOutputFormat.Csv => CsvHelper.SerializeReportOutput(reportOutput, request.Verbosity), + _ => SerializeJsonOutput(reportOutput) + }; + } + + return new ReportCompletionEvent + { + OperationId = request.OperationId ?? string.Empty, + Success = true, + Summary = summary, + Reports = reportResults, + OutputContent = outputContent, + OutputFormat = request.Format + }; + } + + // ============================================================================ + // Private Helpers for Stateless Operations + // ============================================================================ + + private static ReportConfigFormat DetectFormat(string content) + { + content = content.TrimStart(); + + if (content.StartsWith('{') || content.StartsWith('[')) + return ReportConfigFormat.Json; + + if (content.StartsWith("(content, options) + ?? new ReportConfigDefinition(); + } + + private ReportConfigDefinition ParseYamlConfig(string content) + { + var deserializer = new DeserializerBuilder() + .WithNamingConvention(CamelCaseNamingConvention.Instance) + .IgnoreUnmatchedProperties() + .Build(); + return deserializer.Deserialize(content) + ?? new ReportConfigDefinition(); + } + + private ReportConfigDefinition ParseXmlConfig(string content) + { + var serializer = new XmlSerializer(typeof(ReportConfigDefinition)); + using var reader = new StringReader(content); + return (ReportConfigDefinition?)serializer.Deserialize(reader) + ?? new ReportConfigDefinition(); + } + + private string SerializeJsonConfig(ReportConfigDefinition config) + { + var options = new JsonSerializerOptions + { + WriteIndented = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }; + return JsonSerializer.Serialize(config, options); + } + + private string SerializeYamlConfig(ReportConfigDefinition config) + { + var serializer = new SerializerBuilder() + .WithNamingConvention(CamelCaseNamingConvention.Instance) + .Build(); + return serializer.Serialize(config); + } + + private string SerializeXmlConfig(ReportConfigDefinition config) + { + var serializer = new XmlSerializer(typeof(ReportConfigDefinition)); + using var writer = new StringWriter(); + serializer.Serialize(writer, config); + return writer.ToString(); + } + + private string SerializeJsonOutput(ReportOutput output) + { + var options = new JsonSerializerOptions + { + WriteIndented = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }; + return JsonSerializer.Serialize(output, options); + } + + private string SerializeYamlOutput(ReportOutput output) + { + var serializer = new SerializerBuilder() + .WithNamingConvention(CamelCaseNamingConvention.Instance) + .Build(); + return serializer.Serialize(output); + } + + private static int MapComponentTypeToCode(string componentType) + { + return componentType switch + { + "Entity" => ComponentTypeCodes.Entity, + "Attribute" => ComponentTypeCodes.Attribute, + "SystemForm" => ComponentTypeCodes.SystemForm, + "SavedQuery" => ComponentTypeCodes.SavedQuery, + "SavedQueryVisualization" => ComponentTypeCodes.SavedQueryVisualization, + "RibbonCustomization" => ComponentTypeCodes.RibbonCustomization, + "WebResource" => ComponentTypeCodes.WebResource, + "SDKMessageProcessingStep" => ComponentTypeCodes.SDKMessageProcessingStep, + "Workflow" => ComponentTypeCodes.Workflow, + "AppModule" => ComponentTypeCodes.AppModule, + "SiteMap" => ComponentTypeCodes.SiteMap, + "OptionSet" => ComponentTypeCodes.OptionSet, + _ => 0 + }; + } + + // ============================================================================ + // Private Helpers (Legacy DB operations) + // ============================================================================ + + private async Task> MapToDetailedComponentsAsync( + List components, + ReportVerbosity verbosity, + string connectionId, + CancellationToken cancellationToken) + { + if (_context == null) + { + throw new InvalidOperationException("Database context is required for detailed component mapping"); + } + + var results = new List(); + + foreach (var component in components) + { + var detailed = new DetailedComponentResult + { + ComponentId = component.ComponentId, + ComponentType = component.ComponentType, + ComponentTypeName = component.ComponentTypeName, + LogicalName = component.LogicalName, + DisplayName = component.DisplayName, + Solutions = component.Solutions, + MakePortalUrl = GenerateMakePortalUrl(connectionId, component) + }; + + // Add layer information based on verbosity + if (verbosity != ReportVerbosity.Basic) + { + var dbComponent = await _context.Components + .Include(c => c.Layers) + .ThenInclude(l => l.Attributes) + .FirstOrDefaultAsync(c => c.ComponentId.ToString() == component.ComponentId, cancellationToken); + + if (dbComponent != null) + { + detailed.Layers = dbComponent.Layers + .OrderBy(l => l.Ordinal) + .Select(l => new LayerInfo + { + SolutionName = l.SolutionName, + Ordinal = l.Ordinal, + ChangedAttributes = verbosity == ReportVerbosity.Verbose + ? l.Attributes + .Where(a => a.IsChanged) + .Select(a => new AttributeChange + { + AttributeName = a.AttributeName, + OldValue = a.RawValue, + NewValue = a.AttributeValue + }).ToList() + : (verbosity == ReportVerbosity.Medium + ? l.Attributes + .Where(a => a.IsChanged) + .Select(a => new AttributeChange + { + AttributeName = a.AttributeName + }).ToList() + : null) + }).ToList(); + } + } + + results.Add(detailed); + } + + return results; + } + + private static string GenerateMakePortalUrl(string connectionId, ReportComponentResult component) + { + // Always link to the layers view for all component types + // Format: https://make.powerapps.com/environments//solutions/fd140aaf-4df4-11dd-bd17-0019b9312238/objects/all//layers + return $"https://make.powerapps.com/environments/{connectionId}/solutions/fd140aaf-4df4-11dd-bd17-0019b9312238/objects/all/{component.ComponentId}/layers"; + } +} diff --git a/src/plugins/solution-layer-analyzer/src/SolutionLayerAnalyzerPlugin.cs b/src/plugins/solution-layer-analyzer/src/SolutionLayerAnalyzerPlugin.cs index 781d7da..abb6373 100644 --- a/src/plugins/solution-layer-analyzer/src/SolutionLayerAnalyzerPlugin.cs +++ b/src/plugins/solution-layer-analyzer/src/SolutionLayerAnalyzerPlugin.cs @@ -319,6 +319,24 @@ public Task> GetCommandsAsync(CancellationToken can Name = "getAnalytics", Label = "Get Analytics", Description = "Get comprehensive analytics including risk scores, violations, and graph data" + }, + new() + { + Name = "parseReportConfig", + Label = "Parse Report Config", + Description = "Parse a report configuration from JSON, YAML, or XML content" + }, + new() + { + Name = "serializeReportConfig", + Label = "Serialize Report Config", + Description = "Serialize a report configuration to JSON, YAML, or XML" + }, + new() + { + Name = "executeReports", + Label = "Execute Reports", + Description = "Execute reports from an in-memory configuration with event-based progress" } }; @@ -356,6 +374,9 @@ public async Task ExecuteAsync(string commandName, string payload, "loadIndexConfigs" => await ExecuteLoadIndexConfigsAsync(payload, cancellationToken), "saveFilterConfig" => await ExecuteSaveFilterConfigAsync(payload, cancellationToken), "loadFilterConfigs" => await ExecuteLoadFilterConfigsAsync(payload, cancellationToken), + "parseReportConfig" => ExecuteParseReportConfigAsync(payload), + "serializeReportConfig" => ExecuteSerializeReportConfigAsync(payload), + "executeReports" => await ExecuteExecuteReportsAsync(payload, cancellationToken), _ => throw new ArgumentException($"Unknown command: {commandName}", nameof(commandName)) }; } @@ -776,7 +797,7 @@ private async Task ExecuteFetchSolutionsAsync(string payload, Cance ColumnSet = new Microsoft.Xrm.Sdk.Query.ColumnSet("uniquename", "friendlyname", "version", "ismanaged", "publisherid") }; - var results = await Task.Run(() => serviceClient.RetrieveMultiple(query), cancellationToken); + var results = await serviceClient.RetrieveMultipleAsync(query, cancellationToken); var solutions = new List(); foreach (var entity in results.Entities) @@ -874,6 +895,137 @@ private async Task ExecuteGetAnalyticsAsync(string payload, Cancell return JsonSerializer.SerializeToElement(analytics, JsonOptions); } + private JsonElement ExecuteParseReportConfigAsync(string payload) + { + var request = JsonSerializer.Deserialize(payload, JsonOptions) + ?? throw new ArgumentException("Invalid parseReportConfig request payload", nameof(payload)); + + _context!.Logger.LogInformation("Parsing report config"); + + // Use a minimal service instance for parsing (no DB needed) + var reportService = new ReportService(null!, _context.Logger, null!); + var response = reportService.ParseConfig(request); + + return JsonSerializer.SerializeToElement(response, JsonOptions); + } + + private JsonElement ExecuteSerializeReportConfigAsync(string payload) + { + var request = JsonSerializer.Deserialize(payload, JsonOptions) + ?? throw new ArgumentException("Invalid serializeReportConfig request payload", nameof(payload)); + + _context!.Logger.LogInformation("Serializing report config to {Format}", request.Format); + + // Use a minimal service instance for serialization (no DB needed) + var reportService = new ReportService(null!, _context.Logger, null!); + var response = reportService.SerializeConfig(request); + + return JsonSerializer.SerializeToElement(response, JsonOptions); + } + + private async Task ExecuteExecuteReportsAsync(string payload, CancellationToken cancellationToken) + { + var request = JsonSerializer.Deserialize(payload, JsonOptions) + ?? throw new ArgumentException("Invalid executeReports request payload", nameof(payload)); + + var operationId = request.OperationId ?? Guid.NewGuid().ToString("N"); + + _context!.Logger.LogInformation("Starting report execution, operation: {OperationId}", operationId); + + // Return acknowledgment immediately + var ack = new ExecuteReportsAcknowledgment + { + OperationId = operationId, + Started = true + }; + + // Create new request with operation ID + var requestWithOperationId = new ExecuteReportsRequest + { + OperationId = operationId, + ConnectionId = request.ConnectionId, + Config = request.Config, + Verbosity = request.Verbosity, + Format = request.Format, + GenerateFile = request.GenerateFile + }; + + // Start execution in background (fire-and-forget with proper error handling) + _ = ExecuteReportsAndEmitEventsAsync(requestWithOperationId, cancellationToken); + + return JsonSerializer.SerializeToElement(ack, JsonOptions); + } + + private async Task ExecuteReportsAndEmitEventsAsync(ExecuteReportsRequest request, CancellationToken cancellationToken) + { + try + { + await using var dbContext = CreateDbContext(request.ConnectionId); + var queryService = new QueryService(dbContext); + var reportService = new ReportService(dbContext, _context!.Logger, queryService); + + // Create progress handler that emits events + var progress = new Progress(progressEvent => + { + try + { + var pluginEvent = new PluginEvent + { + PluginId = PluginId, + Type = "plugin:sla:report-progress", + Payload = JsonSerializer.Serialize(progressEvent, JsonOptions), + Timestamp = DateTimeOffset.UtcNow + }; + _context!.EmitEvent(pluginEvent); + _context.Logger.LogDebug("Emitted report progress event: {Phase} {Percent}%", progressEvent.Phase, progressEvent.Percent); + } + catch (Exception ex) + { + _context!.Logger.LogError(ex, "Failed to emit report progress event"); + } + }); + + // Execute reports + var completionEvent = await reportService.ExecuteReportsFromConfigAsync(request, progress, cancellationToken); + + // Emit completion event + var pluginCompletionEvent = new PluginEvent + { + PluginId = PluginId, + Type = "plugin:sla:report-complete", + Payload = JsonSerializer.Serialize(completionEvent, JsonOptions), + Timestamp = DateTimeOffset.UtcNow + }; + _context!.EmitEvent(pluginCompletionEvent); + _context.Logger.LogInformation( + "Report execution completed, operation: {OperationId}, reports: {ReportCount}, total findings: {TotalFindings}", + request.OperationId, + completionEvent.Summary?.TotalReports ?? 0, + (completionEvent.Summary?.CriticalFindings ?? 0) + (completionEvent.Summary?.WarningFindings ?? 0) + (completionEvent.Summary?.InformationalFindings ?? 0)); + } + catch (Exception ex) + { + _context!.Logger.LogError(ex, "Report execution failed, operation: {OperationId}", request.OperationId); + + // Emit failure event + var failureEvent = new ReportCompletionEvent + { + OperationId = request.OperationId ?? string.Empty, + Success = false, + ErrorMessage = ex.Message + }; + + var pluginEvent = new PluginEvent + { + PluginId = PluginId, + Type = "plugin:sla:report-complete", + Payload = JsonSerializer.Serialize(failureEvent, JsonOptions), + Timestamp = DateTimeOffset.UtcNow + }; + _context!.EmitEvent(pluginEvent); + } + } + /// public Task DisposeAsync() { diff --git a/src/plugins/solution-layer-analyzer/ui/.__mf__temp/sla_plugin/localSharedImportMap.js b/src/plugins/solution-layer-analyzer/ui/.__mf__temp/sla_plugin/localSharedImportMap.js new file mode 100644 index 0000000..ac36fd5 --- /dev/null +++ b/src/plugins/solution-layer-analyzer/ui/.__mf__temp/sla_plugin/localSharedImportMap.js @@ -0,0 +1,192 @@ + +// Windows temporarily needs this file, https://github.com/module-federation/vite/issues/68 + + import {loadShare} from "@module-federation/runtime"; + const importMap = { + + "@ddk/host-sdk": async () => { + let pkg = await import("__mf__virtual/sla_plugin__prebuild___mf_0_ddk_mf_1_host_mf_2_sdk__prebuild__.js"); + return pkg; + } + , + "@fluentui/react-components": async () => { + let pkg = await import("__mf__virtual/sla_plugin__prebuild___mf_0_fluentui_mf_1_react_mf_2_components__prebuild__.js"); + return pkg; + } + , + "@fluentui/react-icons": async () => { + let pkg = await import("__mf__virtual/sla_plugin__prebuild___mf_0_fluentui_mf_1_react_mf_2_icons__prebuild__.js"); + return pkg; + } + , + "react": async () => { + let pkg = await import("__mf__virtual/sla_plugin__prebuild__react__prebuild__.js"); + return pkg; + } + , + "react-dom": async () => { + let pkg = await import("__mf__virtual/sla_plugin__prebuild__react_mf_2_dom__prebuild__.js"); + return pkg; + } + + } + const usedShared = { + + "@ddk/host-sdk": { + name: "@ddk/host-sdk", + version: "1.0.0", + scope: ["default"], + loaded: false, + from: "sla_plugin", + async get () { + if (false) { + throw new Error(`Shared module '${"@ddk/host-sdk"}' must be provided by host`); + } + usedShared["@ddk/host-sdk"].loaded = true + const {"@ddk/host-sdk": pkgDynamicImport} = importMap + const res = await pkgDynamicImport() + const exportModule = {...res} + // All npm packages pre-built by vite will be converted to esm + Object.defineProperty(exportModule, "__esModule", { + value: true, + enumerable: false + }) + return function () { + return exportModule + } + }, + shareConfig: { + singleton: true, + requiredVersion: "workspace:*", + + } + } + , + "@fluentui/react-components": { + name: "@fluentui/react-components", + version: "9.72.10", + scope: ["default"], + loaded: false, + from: "sla_plugin", + async get () { + if (false) { + throw new Error(`Shared module '${"@fluentui/react-components"}' must be provided by host`); + } + usedShared["@fluentui/react-components"].loaded = true + const {"@fluentui/react-components": pkgDynamicImport} = importMap + const res = await pkgDynamicImport() + const exportModule = {...res} + // All npm packages pre-built by vite will be converted to esm + Object.defineProperty(exportModule, "__esModule", { + value: true, + enumerable: false + }) + return function () { + return exportModule + } + }, + shareConfig: { + singleton: true, + requiredVersion: "^9.56.4", + + } + } + , + "@fluentui/react-icons": { + name: "@fluentui/react-icons", + version: "2.0.317", + scope: ["default"], + loaded: false, + from: "sla_plugin", + async get () { + if (false) { + throw new Error(`Shared module '${"@fluentui/react-icons"}' must be provided by host`); + } + usedShared["@fluentui/react-icons"].loaded = true + const {"@fluentui/react-icons": pkgDynamicImport} = importMap + const res = await pkgDynamicImport() + const exportModule = {...res} + // All npm packages pre-built by vite will be converted to esm + Object.defineProperty(exportModule, "__esModule", { + value: true, + enumerable: false + }) + return function () { + return exportModule + } + }, + shareConfig: { + singleton: true, + requiredVersion: "^2.0.272", + + } + } + , + "react": { + name: "react", + version: "18.3.1", + scope: ["default"], + loaded: false, + from: "sla_plugin", + async get () { + if (false) { + throw new Error(`Shared module '${"react"}' must be provided by host`); + } + usedShared["react"].loaded = true + const {"react": pkgDynamicImport} = importMap + const res = await pkgDynamicImport() + const exportModule = {...res} + // All npm packages pre-built by vite will be converted to esm + Object.defineProperty(exportModule, "__esModule", { + value: true, + enumerable: false + }) + return function () { + return exportModule + } + }, + shareConfig: { + singleton: true, + requiredVersion: "^18.3.1", + + } + } + , + "react-dom": { + name: "react-dom", + version: "18.3.1", + scope: ["default"], + loaded: false, + from: "sla_plugin", + async get () { + if (false) { + throw new Error(`Shared module '${"react-dom"}' must be provided by host`); + } + usedShared["react-dom"].loaded = true + const {"react-dom": pkgDynamicImport} = importMap + const res = await pkgDynamicImport() + const exportModule = {...res} + // All npm packages pre-built by vite will be converted to esm + Object.defineProperty(exportModule, "__esModule", { + value: true, + enumerable: false + }) + return function () { + return exportModule + } + }, + shareConfig: { + singleton: true, + requiredVersion: "^18.3.1", + + } + } + + } + const usedRemotes = [ + ] + export { + usedShared, + usedRemotes + } + \ No newline at end of file diff --git a/src/plugins/solution-layer-analyzer/ui/package.json b/src/plugins/solution-layer-analyzer/ui/package.json index dd05172..478d585 100644 --- a/src/plugins/solution-layer-analyzer/ui/package.json +++ b/src/plugins/solution-layer-analyzer/ui/package.json @@ -25,12 +25,12 @@ "zustand": "^5.0.2" }, "devDependencies": { - "@originjs/vite-plugin-federation": "^1.3.6", + "@module-federation/vite": "^1.11.0", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", "@types/react-window": "^1.8.8", - "@vitejs/plugin-react": "^4.3.4", + "@vitejs/plugin-react": "^5.1.3", "typescript": "~5.7.3", - "vite": "^6.0.7" + "vite": "7.1.7" } } diff --git a/src/plugins/solution-layer-analyzer/ui/src/Plugin.tsx b/src/plugins/solution-layer-analyzer/ui/src/Plugin.tsx index b52e0bb..6ea25de 100644 --- a/src/plugins/solution-layer-analyzer/ui/src/Plugin.tsx +++ b/src/plugins/solution-layer-analyzer/ui/src/Plugin.tsx @@ -14,11 +14,13 @@ import { ChartMultipleRegular, CodeRegular, ChartPerson24Regular, + ClipboardTaskListLtrRegular, } from '@fluentui/react-icons'; import { ImprovedIndexTab } from './components/ImprovedIndexTab'; import { AnalysisTab } from './components/AnalysisTab'; import { DiffTab } from './components/DiffTab'; import { AnalysisDashboard } from './components/AnalysisDashboard'; +import { ReportBuilderTab } from './components/ReportBuilderTab'; import { Footer } from './components/Footer'; import { ProgressIndicator } from './components/ProgressIndicator'; import { SaveConfigDialog } from './components/SaveConfigDialog'; @@ -232,6 +234,7 @@ const Plugin: React.FC = ({ instanceId }) => { } value="index">Index } value="analysis">Analysis } value="advanced">Advanced Analytics + } value="reports">Report Builder } value="diff">Diff @@ -247,6 +250,10 @@ const Plugin: React.FC = ({ instanceId }) => { )} + {selectedTab === 'reports' && ( + + )} + {selectedTab === 'diff' && ( = ({ onNavigateToDiff }) => setAnalysisState({ groupBy: by }), [setAnalysisState]); const [fullscreenViz, setFullscreenViz] = useState(false); + const [showSaveToReport, setShowSaveToReport] = useState(false); const loadComponents = useCallback(async (filter?: FilterNode | null) => { console.log('[AnalysisTab] loadComponents called with filter:', JSON.stringify(filter, null, 2)); @@ -345,6 +347,12 @@ export const AnalysisTab: React.FC = ({ onNavigateToDiff }) => )} + + ); }; diff --git a/src/plugins/solution-layer-analyzer/ui/src/components/ComponentFilterBar.tsx b/src/plugins/solution-layer-analyzer/ui/src/components/ComponentFilterBar.tsx index 07ec651..30ecc43 100644 --- a/src/plugins/solution-layer-analyzer/ui/src/components/ComponentFilterBar.tsx +++ b/src/plugins/solution-layer-analyzer/ui/src/components/ComponentFilterBar.tsx @@ -16,6 +16,7 @@ import { DismissRegular, FilterRegular, InfoRegular, + SaveRegular, } from '@fluentui/react-icons'; import { ComponentResult, FilterNode } from '../types'; import { AdvancedFilterBuilder } from './AdvancedFilterBuilder'; @@ -53,6 +54,7 @@ interface ComponentFilterBarProps { availableSolutions?: string[]; onFilterChange: (filteredComponents: ComponentResult[]) => void; onAdvancedFilterChange?: (filter: FilterNode | null) => void; + onSaveToReport?: () => void; loading?: boolean; } @@ -61,6 +63,7 @@ export const ComponentFilterBar: React.FC = ({ availableSolutions, onFilterChange, onAdvancedFilterChange, + onSaveToReport, loading, }) => { const styles = useStyles(); @@ -237,12 +240,23 @@ export const ComponentFilterBar: React.FC = ({ {activeFilterCount > 0 && ( - + <> + + {onSaveToReport && ( + + )} + )} diff --git a/src/plugins/solution-layer-analyzer/ui/src/components/ImprovedIndexTab.tsx b/src/plugins/solution-layer-analyzer/ui/src/components/ImprovedIndexTab.tsx index 72309bf..db6b110 100644 --- a/src/plugins/solution-layer-analyzer/ui/src/components/ImprovedIndexTab.tsx +++ b/src/plugins/solution-layer-analyzer/ui/src/components/ImprovedIndexTab.tsx @@ -167,7 +167,7 @@ export const ImprovedIndexTab: React.FC = ({ onIndexComplete }) = + Source Solutions } diff --git a/src/plugins/solution-layer-analyzer/ui/src/components/ReportBuilderTab.tsx b/src/plugins/solution-layer-analyzer/ui/src/components/ReportBuilderTab.tsx new file mode 100644 index 0000000..ae328e4 --- /dev/null +++ b/src/plugins/solution-layer-analyzer/ui/src/components/ReportBuilderTab.tsx @@ -0,0 +1,824 @@ +import React, { useState, useCallback, useRef } from 'react'; +import { + makeStyles, + tokens, + Card, + Text, + Button, + Input, + Dropdown, + Option, + Textarea, + Badge, + Divider, + Dialog, + DialogSurface, + DialogTitle, + DialogBody, + DialogActions, + DialogContent, + Label, + Spinner, +} from '@fluentui/react-components'; +import { + AddRegular, + ArrowUpRegular, + ArrowDownRegular, + DeleteRegular, + CopyRegular, + FolderRegular, + DocumentRegular, + PlayRegular, + SaveRegular, + FolderOpenRegular, + FilterRegular, + ArrowSyncRegular, + EditRegular, + CheckmarkRegular, + DismissRegular, +} from '@fluentui/react-icons'; +import { usePluginApi } from '../hooks/usePluginApi'; +import { useAppStore } from '../store/useAppStore'; +import { AdvancedFilterBuilder } from './AdvancedFilterBuilder'; +import { RunReportsDialog } from './RunReportsDialog'; +import { ReportSummaryPanel } from './ReportSummaryPanel'; +import { FilterNode, Report, ReportGroup, ReportSeverity, ReportConfigFormat } from '../types'; +import { transformFilterForBackend } from '../utils/filterTransform'; + +const useStyles = makeStyles({ + container: { + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalM, + padding: tokens.spacingVerticalL, + }, + toolbar: { + display: 'flex', + gap: tokens.spacingHorizontalM, + alignItems: 'center', + paddingBlock: tokens.spacingVerticalM, + flexWrap: 'wrap', + }, + content: { + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalM, + }, + groupCard: { + marginBottom: tokens.spacingVerticalM, + }, + groupHeader: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + padding: tokens.spacingVerticalM, + backgroundColor: tokens.colorNeutralBackground3, + }, + groupNameContainer: { + display: 'flex', + alignItems: 'center', + gap: tokens.spacingHorizontalS, + }, + groupNameInput: { + minWidth: '200px', + }, + reportItem: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + padding: tokens.spacingVerticalM, + borderBottom: `1px solid ${tokens.colorNeutralStroke2}`, + '&:hover': { + backgroundColor: tokens.colorNeutralBackground2, + }, + }, + reportInfo: { + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalXS, + flex: 1, + }, + reportActions: { + display: 'flex', + gap: tokens.spacingHorizontalS, + alignItems: 'center', + }, + formField: { + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalXS, + marginBottom: tokens.spacingVerticalM, + }, + filterSection: { + border: `1px solid ${tokens.colorNeutralStroke2}`, + borderRadius: tokens.borderRadiusMedium, + padding: tokens.spacingVerticalM, + marginBottom: tokens.spacingVerticalM, + }, + emptyState: { + textAlign: 'center', + padding: tokens.spacingVerticalXXL, + color: tokens.colorNeutralForeground3, + }, +}); + +/** Generates a unique ID */ +const generateId = () => `${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; + +export const ReportBuilderTab: React.FC = () => { + const styles = useStyles(); + const pluginApi = usePluginApi(); + const fileInputRef = useRef(null); + + // Get state from Zustand store + const availableSolutions = useAppStore((state) => state.availableSolutions); + const indexConfig = useAppStore((state) => state.indexConfig); + const reportBuilderState = useAppStore((state) => state.reportBuilderState); + const reportRunState = useAppStore((state) => state.reportRunState); + const setFilterBarState = useAppStore((state) => state.setFilterBarState); + const setSelectedTab = useAppStore((state) => state.setSelectedTab); + + // Report builder actions from Zustand + const addReportGroup = useAppStore((state) => state.addReportGroup); + const updateReportGroup = useAppStore((state) => state.updateReportGroup); + const deleteReportGroup = useAppStore((state) => state.deleteReportGroup); + const addReport = useAppStore((state) => state.addReport); + const updateReport = useAppStore((state) => state.updateReport); + const deleteReport = useAppStore((state) => state.deleteReport); + const reorderReportGroups = useAppStore((state) => state.reorderReportGroups); + const reorderReports = useAppStore((state) => state.reorderReports); + const setReportBuilderState = useAppStore((state) => state.setReportBuilderState); + + // Local UI state + const [editingReport, setEditingReport] = useState<{ + groupId: string | null; + report: Report; + filterState: FilterNode | null; // Per-report filter state + } | null>(null); + const [showFilterBuilder, setShowFilterBuilder] = useState(false); + const [showRunDialog, setShowRunDialog] = useState(false); + const [editingGroupId, setEditingGroupId] = useState(null); + const [editingGroupName, setEditingGroupName] = useState(''); + const [saveFormat, setSaveFormat] = useState('yaml'); + const [isSaving, setIsSaving] = useState(false); + + const { reportGroups, ungroupedReports } = reportBuilderState; + + // Execute filter - navigate to Analysis tab with the report's filter + const handleExecuteFilter = useCallback((report: Report) => { + try { + const filter = JSON.parse(report.queryJson); + setFilterBarState({ + advancedFilter: filter, + advancedMode: true + }); + setSelectedTab('analysis'); + } catch (error) { + console.error('Failed to parse filter:', error); + } + }, [setFilterBarState, setSelectedTab]); + + // Add new group + const handleAddGroup = useCallback(() => { + const newGroup: ReportGroup = { + id: generateId(), + name: `New Group ${reportGroups.length + 1}`, + displayOrder: reportGroups.length, + reports: [], + }; + addReportGroup(newGroup); + }, [reportGroups.length, addReportGroup]); + + // Start editing group name + const handleStartEditGroupName = useCallback((group: ReportGroup) => { + setEditingGroupId(group.id); + setEditingGroupName(group.name); + }, []); + + // Save group name + const handleSaveGroupName = useCallback(() => { + if (editingGroupId && editingGroupName.trim()) { + updateReportGroup(editingGroupId, { name: editingGroupName.trim() }); + } + setEditingGroupId(null); + setEditingGroupName(''); + }, [editingGroupId, editingGroupName, updateReportGroup]); + + // Cancel editing group name + const handleCancelEditGroupName = useCallback(() => { + setEditingGroupId(null); + setEditingGroupName(''); + }, []); + + // Add new report + const handleAddReport = useCallback((groupId: string | null) => { + const newReport: Report = { + id: generateId(), + name: 'New Report', + severity: 'Information', + queryJson: JSON.stringify(null), + displayOrder: groupId + ? (reportGroups.find(g => g.id === groupId)?.reports.length || 0) + : ungroupedReports.length, + }; + + addReport(newReport, groupId || undefined); + + setEditingReport({ + groupId, + report: newReport, + filterState: null, + }); + }, [reportGroups, ungroupedReports.length, addReport]); + + // Move group up/down + const handleMoveGroup = useCallback((groupId: string, direction: 'up' | 'down') => { + const currentIndex = reportGroups.findIndex(g => g.id === groupId); + if (currentIndex === -1) return; + + const targetIndex = direction === 'up' ? currentIndex - 1 : currentIndex + 1; + if (targetIndex < 0 || targetIndex >= reportGroups.length) return; + + const newOrder = [...reportGroups.map(g => g.id)]; + [newOrder[currentIndex], newOrder[targetIndex]] = [newOrder[targetIndex], newOrder[currentIndex]]; + reorderReportGroups(newOrder); + }, [reportGroups, reorderReportGroups]); + + // Move report up/down + const handleMoveReport = useCallback((groupId: string | null, reportId: string, direction: 'up' | 'down') => { + const reports = groupId + ? reportGroups.find(g => g.id === groupId)?.reports || [] + : ungroupedReports; + + const currentIndex = reports.findIndex(r => r.id === reportId); + if (currentIndex === -1) return; + + const targetIndex = direction === 'up' ? currentIndex - 1 : currentIndex + 1; + if (targetIndex < 0 || targetIndex >= reports.length) return; + + const newOrder = [...reports.map(r => r.id)]; + [newOrder[currentIndex], newOrder[targetIndex]] = [newOrder[targetIndex], newOrder[currentIndex]]; + reorderReports(groupId, newOrder); + }, [reportGroups, ungroupedReports, reorderReports]); + + // Delete group + const handleDeleteGroup = useCallback((groupId: string) => { + deleteReportGroup(groupId); + }, [deleteReportGroup]); + + // Delete report + const handleDeleteReport = useCallback((groupId: string | null, reportId: string) => { + deleteReport(reportId, groupId || undefined); + }, [deleteReport]); + + // Duplicate report + const handleDuplicateReport = useCallback((groupId: string | null, report: Report) => { + const duplicated: Report = { + ...report, + id: generateId(), + name: `${report.name} (Copy)`, + }; + addReport(duplicated, groupId || undefined); + }, [addReport]); + + // Load config from file + const handleLoadConfig = useCallback(() => { + fileInputRef.current?.click(); + }, []); + + const handleFileSelected = useCallback(async (event: React.ChangeEvent) => { + const file = event.target.files?.[0]; + if (!file) return; + + try { + const content = await file.text(); + const format = file.name.endsWith('.json') ? 'json' + : file.name.endsWith('.xml') ? 'xml' + : 'yaml'; + + const result = await pluginApi.parseReportConfig(content, format); + + if (result.config) { + setReportBuilderState({ + reportGroups: result.config.reportGroups || [], + ungroupedReports: result.config.ungroupedReports || [], + }); + } + + if (result.warnings?.length) { + console.warn('Config load warnings:', result.warnings); + } + } catch (error) { + console.error('Failed to load config:', error); + } + + // Reset file input + event.target.value = ''; + }, [pluginApi, setReportBuilderState]); + + // Save config to file + const handleSaveConfig = useCallback(async () => { + setIsSaving(true); + try { + const config = { + sourceSolutions: indexConfig.sourceSolutions || [], + targetSolutions: indexConfig.targetSolutions || [], + componentTypes: [], + reportGroups, + ungroupedReports, + }; + + const result = await pluginApi.serializeReportConfig(config, saveFormat); + + const mimeTypes: Record = { + json: 'application/json', + yaml: 'application/x-yaml', + xml: 'application/xml', + }; + + const blob = new Blob([result.content], { type: mimeTypes[saveFormat] }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `report-config.${saveFormat}`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + } catch (error) { + console.error('Failed to save config:', error); + } finally { + setIsSaving(false); + } + }, [pluginApi, indexConfig, reportGroups, ungroupedReports, saveFormat]); + + // Save edited report + const handleSaveReport = useCallback(() => { + if (!editingReport) return; + + updateReport(editingReport.report.id, editingReport.report, editingReport.groupId || undefined); + setEditingReport(null); + }, [editingReport, updateReport]); + + const getSeverityColor = (severity: ReportSeverity): 'danger' | 'warning' | 'informative' => { + switch (severity) { + case 'Critical': return 'danger'; + case 'Warning': return 'warning'; + default: return 'informative'; + } + }; + + const totalReports = reportGroups.reduce((sum, g) => sum + g.reports.length, ungroupedReports.length); + + return ( +
+ {/* Hidden file input for loading configs */} + + + {/* Report Summary Panel (shown when results exist) */} + + + {/* Toolbar */} +
+ + + + + setSaveFormat(d.optionValue as ReportConfigFormat)} + style={{ minWidth: '80px' }} + > + + + + + + + +
+ + {/* Content */} +
+ {/* Empty state */} + {reportGroups.length === 0 && ungroupedReports.length === 0 && ( +
+ No reports configured + + Add a group or ungrouped report to get started, or load a configuration file. + +
+ )} + + {/* Report Groups */} + {reportGroups.map((group, groupIndex) => ( + +
+
+ + {editingGroupId === group.id ? ( + <> + setEditingGroupName(d.value)} + onKeyDown={(e) => { + if (e.key === 'Enter') handleSaveGroupName(); + if (e.key === 'Escape') handleCancelEditGroupName(); + }} + autoFocus + /> +
+
+
+
+ + {/* Reports in group */} + {group.reports.map((report, reportIndex) => ( +
+
+
+ + {report.name} + + {report.severity} + +
+ {report.description && ( + + {report.description} + + )} +
+
+ +
+
+ ))} + + {group.reports.length === 0 && ( +
+ No reports in this group. Click + to add one. +
+ )} +
+ ))} + + {/* Ungrouped Reports */} + {ungroupedReports.length > 0 && ( + +
+
+ Ungrouped Reports + {ungroupedReports.length} reports +
+
+ + {ungroupedReports.map((report, reportIndex) => ( +
+
+
+ + {report.name} + + {report.severity} + +
+ {report.description && ( + + {report.description} + + )} +
+
+ +
+
+ ))} +
+ )} +
+ + {/* Run Reports Dialog */} + setShowRunDialog(false)} + /> + + {/* Edit Report Dialog */} + {editingReport && ( + !data.open && setEditingReport(null)} + > + + + Edit Report + +
+ + { + setEditingReport({ + ...editingReport, + report: { ...editingReport.report, name: data.value }, + }); + }} + /> +
+ +
+ +