D:删除构建文件,增加调试脚本
This commit is contained in:
1 parent
3b89b2d722
commit
d133bacf55
40 files changed
+1180
-1066
No files matched your search
@@ -1,216 +0,0 @@
|
|||||||
# 项目元数据清理总结
|
|
||||||
|
|
||||||
## ✅ 已完成的任务
|
|
||||||
|
|
||||||
### 1. Git 清理
|
|
||||||
- ✅ 从 Git 中移除了 `src/Sharp/Wpf/obj/` 文件夹下的所有 22 个文件
|
|
||||||
- ✅ 确认其他模块没有 obj/bin 文件被错误追踪
|
|
||||||
- ✅ `.gitignore` 已正确配置 `obj/` 和 `bin/` 规则
|
|
||||||
|
|
||||||
### 2. 元数据统一管理
|
|
||||||
|
|
||||||
#### 创建的核心文件
|
|
||||||
- **`Directory.Build.props`** - 集中管理所有项目的元数据
|
|
||||||
- 版本:1.0.1
|
|
||||||
- 作者:duyl328
|
|
||||||
- 版权:Copyright © 2024-2025 duyl328
|
|
||||||
- 仓库:https://gitea.duyl328.org/jimmy/sharp-basic
|
|
||||||
- 许可证:AGPL-3.0-or-later
|
|
||||||
- 项目描述、标签等
|
|
||||||
|
|
||||||
#### 清理的项目文件
|
|
||||||
成功清理了 **17 个项目文件**,移除了冗余的元数据:
|
|
||||||
|
|
||||||
**已清理的项目**:
|
|
||||||
1. Cache.csproj
|
|
||||||
2. Common.csproj
|
|
||||||
3. Config.csproj
|
|
||||||
4. Data.csproj
|
|
||||||
5. EventBus.csproj
|
|
||||||
6. Log.csproj
|
|
||||||
7. NetClient.csproj
|
|
||||||
8. NetServer.csproj
|
|
||||||
9. Plc.csproj
|
|
||||||
10. Plc.Siemens.csproj
|
|
||||||
11. Ports.csproj
|
|
||||||
12. Process.csproj
|
|
||||||
13. Python.csproj
|
|
||||||
14. Sharp.Demo.csproj
|
|
||||||
15. Wpf.csproj
|
|
||||||
16. Wpf.DevTools.csproj
|
|
||||||
17. Wpf.HandyControl.csproj
|
|
||||||
|
|
||||||
**每个项目移除了 12 个冗余属性**:
|
|
||||||
- Version, AssemblyVersion, FileVersion
|
|
||||||
- Authors, Company, Product, Copyright
|
|
||||||
- PackageId, PackageProjectUrl, RepositoryUrl, RepositoryType, PackageLicenseExpression
|
|
||||||
|
|
||||||
**保留的项目特有属性**:
|
|
||||||
- `Description` - 每个项目的独特描述
|
|
||||||
- `PackageTags` - 每个项目的特定标签
|
|
||||||
|
|
||||||
### 3. 项目元数据验证
|
|
||||||
|
|
||||||
#### 清理前的项目文件(以 Common.csproj 为例)
|
|
||||||
```xml
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
|
||||||
<!-- ... -->
|
|
||||||
<Version>1.0.0</Version>
|
|
||||||
<AssemblyVersion>1.0.0.0</AssemblyVersion>
|
|
||||||
<FileVersion>1.0.0.0</FileVersion>
|
|
||||||
<Authors>Sharp Team</Authors>
|
|
||||||
<Company>Sharp Team</Company>
|
|
||||||
<Product>Sharp Framework</Product>
|
|
||||||
<Copyright>Copyright © 2024 Sharp Team</Copyright>
|
|
||||||
<Description>...</Description>
|
|
||||||
<PackageId>Sharp.Common</PackageId>
|
|
||||||
<PackageProjectUrl>https://github.com/your-org/sharp-basic</PackageProjectUrl>
|
|
||||||
<RepositoryUrl>https://github.com/your-org/sharp-basic</RepositoryUrl>
|
|
||||||
<RepositoryType>git</RepositoryType>
|
|
||||||
<PackageTags>...</PackageTags>
|
|
||||||
<PackageLicenseExpression>AGPL-3.0-or-later</PackageLicenseExpression>
|
|
||||||
</PropertyGroup>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 清理后的项目文件
|
|
||||||
```xml
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
|
|
||||||
<Description>Sharp Framework 核心库 - 提供 Result<T> 模式、Global 容器、系统配置等基础功能</Description>
|
|
||||||
<PackageTags>sharp;common;result;railway-oriented;functional;utilities</PackageTags>
|
|
||||||
</PropertyGroup>
|
|
||||||
```
|
|
||||||
|
|
||||||
**优势**:
|
|
||||||
- 📉 代码大幅减少(从 ~25 行元数据减少到 2 行)
|
|
||||||
- 🔄 统一管理:版本、作者、许可证等在一处更新
|
|
||||||
- ✨ 保持灵活性:每个项目保留独特的描述和标签
|
|
||||||
|
|
||||||
### 4. 创建的工具脚本
|
|
||||||
|
|
||||||
**`update-metadata.ps1`**
|
|
||||||
- 自动清理所有项目文件的冗余元数据
|
|
||||||
- 可重复运行,安全无副作用
|
|
||||||
- 详细日志输出,显示每个项目的处理结果
|
|
||||||
|
|
||||||
使用方法:
|
|
||||||
```powershell
|
|
||||||
cd src/Sharp
|
|
||||||
powershell -ExecutionPolicy Bypass -File update-metadata.ps1
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📋 Git 变更概览
|
|
||||||
|
|
||||||
```
|
|
||||||
修改的文件 (M):
|
|
||||||
- 17 个 .csproj 项目文件(清理元数据)
|
|
||||||
- LICENSE(更新版权声明)
|
|
||||||
- README.md(添加项目信息和徽章)
|
|
||||||
|
|
||||||
删除的文件 (D):
|
|
||||||
- src/Sharp/Wpf/obj/** (22 个文件)
|
|
||||||
|
|
||||||
新增的文件 (??):
|
|
||||||
- AUTHORS
|
|
||||||
- CHANGELOG.md
|
|
||||||
- CONTRIBUTING.md
|
|
||||||
- NOTICE
|
|
||||||
- PROJECT_METADATA_SUMMARY.md
|
|
||||||
- METADATA_CLEANUP_SUMMARY.md
|
|
||||||
- src/Sharp/Directory.Build.props
|
|
||||||
- src/Sharp/update-metadata.ps1
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🎯 元数据继承关系
|
|
||||||
|
|
||||||
```
|
|
||||||
Directory.Build.props (父级)
|
|
||||||
│
|
|
||||||
├─→ 所有项目自动继承:
|
|
||||||
│ • Version: 1.0.1
|
|
||||||
│ • Authors: duyl328
|
|
||||||
│ • Company: duyl328
|
|
||||||
│ • Product: Sharp-Basic Framework
|
|
||||||
│ • Copyright: Copyright © 2024-2025 duyl328
|
|
||||||
│ • Description: 模块化.NET 8企业应用开发框架
|
|
||||||
│ • RepositoryUrl: https://gitea.duyl328.org/jimmy/sharp-basic
|
|
||||||
│ • PackageLicenseExpression: AGPL-3.0-or-later
|
|
||||||
│ • PackageTags: wpf;mvvm;dotnet;framework;...
|
|
||||||
│ • ... 其他编译和包设置
|
|
||||||
│
|
|
||||||
└─→ 各项目.csproj (子级)
|
|
||||||
• 只定义项目特有的属性
|
|
||||||
• Description (覆盖父级的通用描述)
|
|
||||||
• PackageTags (覆盖父级的通用标签)
|
|
||||||
```
|
|
||||||
|
|
||||||
## ✨ 效果验证
|
|
||||||
|
|
||||||
### 构建测试
|
|
||||||
```bash
|
|
||||||
cd src/Sharp
|
|
||||||
dotnet build Sharp.sln -c Release
|
|
||||||
```
|
|
||||||
|
|
||||||
### 查看生成的程序集信息
|
|
||||||
```bash
|
|
||||||
# 所有程序集应显示:
|
|
||||||
# Version: 1.0.1.0
|
|
||||||
# FileVersion: 1.0.1.0
|
|
||||||
# Company: duyl328
|
|
||||||
# Product: Sharp-Basic Framework
|
|
||||||
# Copyright: Copyright © 2024-2025 duyl328. All rights reserved.
|
|
||||||
```
|
|
||||||
|
|
||||||
### 打包验证
|
|
||||||
```bash
|
|
||||||
dotnet pack Common/Common.csproj -c Release -o ./nupkg
|
|
||||||
|
|
||||||
# 检查生成的 .nupkg 文件元数据
|
|
||||||
# 应包含从 Directory.Build.props 继承的所有信息
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📝 下一步建议
|
|
||||||
|
|
||||||
1. **提交更改**
|
|
||||||
```bash
|
|
||||||
git add .
|
|
||||||
git commit -m "A:统一项目元数据管理
|
|
||||||
|
|
||||||
- 创建 Directory.Build.props 集中管理元数据
|
|
||||||
- 清理所有项目文件的冗余元数据(17个项目)
|
|
||||||
- 从 Git 中移除 Wpf/obj 文件夹
|
|
||||||
- 添加完整的项目文档(AUTHORS, CHANGELOG, CONTRIBUTING, NOTICE)
|
|
||||||
- 更新 LICENSE 和 README.md
|
|
||||||
|
|
||||||
版本: 1.0.1
|
|
||||||
作者: duyl328
|
|
||||||
许可证: AGPL-3.0-or-later"
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **创建 Git 标签**
|
|
||||||
```bash
|
|
||||||
git tag -a v1.0.1 -m "Release version 1.0.1"
|
|
||||||
git push origin v1.0.1
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **发布 NuGet 包**(如果需要)
|
|
||||||
```bash
|
|
||||||
dotnet pack -c Release
|
|
||||||
# 将 nupkg 文件发布到 NuGet 或私有包源
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🎉 完成状态
|
|
||||||
|
|
||||||
✅ Wpf/obj 文件夹已从 Git 中移除
|
|
||||||
✅ 所有 17 个模块的元数据已清理并统一
|
|
||||||
✅ Directory.Build.props 正确配置
|
|
||||||
✅ 项目文档完整(LICENSE, AUTHORS, CONTRIBUTING, CHANGELOG, NOTICE)
|
|
||||||
✅ README.md 包含徽章和项目信息
|
|
||||||
✅ 自动化清理脚本可供未来使用
|
|
||||||
|
|
||||||
**项目现在是一个标准的、专业的、元数据管理规范的开源项目!** 🎊
|
|
||||||
@@ -1,152 +0,0 @@
|
|||||||
# 项目元数据配置总结
|
|
||||||
|
|
||||||
本文档总结了 Sharp-Basic Framework v1.0.1 的元数据配置。
|
|
||||||
|
|
||||||
## ✅ 已完成的配置
|
|
||||||
|
|
||||||
### 1. 核心元数据文件
|
|
||||||
|
|
||||||
#### `Directory.Build.props` (src/Sharp/)
|
|
||||||
- ✅ 作者: duyl328
|
|
||||||
- ✅ 版权: Copyright © 2024-2025 duyl328
|
|
||||||
- ✅ 版本: 1.0.1
|
|
||||||
- ✅ 仓库: https://gitea.duyl328.org/jimmy/sharp-basic
|
|
||||||
- ✅ 许可证: AGPL-3.0-or-later
|
|
||||||
- ✅ 项目描述: 模块化.NET 8企业应用开发框架
|
|
||||||
- ✅ 包标签: wpf;mvvm;dotnet;framework;plc;industrial;iot;siemens;ef-core;serilog;configuration
|
|
||||||
- ✅ 源代码链接支持 (Source Link for Gitea)
|
|
||||||
- ✅ 确定性构建配置
|
|
||||||
|
|
||||||
### 2. 许可证文件
|
|
||||||
|
|
||||||
#### `LICENSE`
|
|
||||||
- ✅ GNU AGPL v3.0 完整文本
|
|
||||||
- ✅ 更新版权声明示例
|
|
||||||
|
|
||||||
### 3. 项目文档
|
|
||||||
|
|
||||||
#### `README.md`
|
|
||||||
- ✅ 项目徽章(版本、许可证、.NET版本)
|
|
||||||
- ✅ 项目信息(版本、作者、仓库、许可证)
|
|
||||||
- ✅ 详细的许可证说明(包含网络服务条款)
|
|
||||||
- ✅ 作者信息和链接
|
|
||||||
- ✅ 版权声明
|
|
||||||
|
|
||||||
#### `AUTHORS`
|
|
||||||
- ✅ 主要作者信息
|
|
||||||
- ✅ 贡献者列表框架
|
|
||||||
|
|
||||||
#### `CONTRIBUTING.md`
|
|
||||||
- ✅ 行为准则
|
|
||||||
- ✅ Bug 报告指南
|
|
||||||
- ✅ 功能请求流程
|
|
||||||
- ✅ 代码规范(命名、注释、风格)
|
|
||||||
- ✅ 测试要求
|
|
||||||
- ✅ 提交信息规范
|
|
||||||
- ✅ Pull Request 流程
|
|
||||||
- ✅ 开发环境设置
|
|
||||||
|
|
||||||
#### `CHANGELOG.md`
|
|
||||||
- ✅ 版本 1.0.1 变更记录
|
|
||||||
- ✅ 版本 1.0.0 初始发布记录
|
|
||||||
- ✅ 版本号规范说明
|
|
||||||
- ✅ 变更类型定义
|
|
||||||
|
|
||||||
#### `NOTICE`
|
|
||||||
- ✅ 项目版权声明
|
|
||||||
- ✅ 第三方依赖列表及其许可证
|
|
||||||
- Microsoft.Extensions.*
|
|
||||||
- Entity Framework Core
|
|
||||||
- Serilog
|
|
||||||
- Polly
|
|
||||||
- HandyControl
|
|
||||||
- S7.NET+
|
|
||||||
- Tomlyn
|
|
||||||
|
|
||||||
## 📋 NuGet 包元数据
|
|
||||||
|
|
||||||
所有项目现在继承以下元数据(通过 Directory.Build.props):
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<Authors>duyl328</Authors>
|
|
||||||
<Company>duyl328</Company>
|
|
||||||
<Product>Sharp-Basic Framework</Product>
|
|
||||||
<Description>模块化.NET 8企业应用开发框架</Description>
|
|
||||||
<Copyright>Copyright © 2024-2025 duyl328. All rights reserved.</Copyright>
|
|
||||||
<VersionPrefix>1.0.1</VersionPrefix>
|
|
||||||
<RepositoryUrl>https://gitea.duyl328.org/jimmy/sharp-basic</RepositoryUrl>
|
|
||||||
<PackageLicenseExpression>AGPL-3.0-or-later</PackageLicenseExpression>
|
|
||||||
<PackageTags>wpf;mvvm;dotnet;framework;plc;industrial;iot;siemens;ef-core;serilog;configuration;csharp;enterprise;modular;iiot</PackageTags>
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🔍 下一步建议
|
|
||||||
|
|
||||||
### 可选的额外文件
|
|
||||||
|
|
||||||
1. **CODE_OF_CONDUCT.md** - 社区行为准则
|
|
||||||
- 推荐使用 Contributor Covenant
|
|
||||||
- 定义社区标准和执法机制
|
|
||||||
|
|
||||||
2. **SECURITY.md** - 安全策略
|
|
||||||
- 如何报告安全漏洞
|
|
||||||
- 支持的版本
|
|
||||||
- 披露政策
|
|
||||||
|
|
||||||
3. **.editorconfig** - 编辑器配置
|
|
||||||
- 统一代码风格
|
|
||||||
- 适用于所有贡献者
|
|
||||||
|
|
||||||
4. **Issue/PR 模板** (Gitea 支持)
|
|
||||||
- `.gitea/ISSUE_TEMPLATE/bug_report.md`
|
|
||||||
- `.gitea/ISSUE_TEMPLATE/feature_request.md`
|
|
||||||
- `.gitea/PULL_REQUEST_TEMPLATE.md`
|
|
||||||
|
|
||||||
5. **Badges 徽章增强**
|
|
||||||
- 构建状态(如果有 CI)
|
|
||||||
- 测试覆盖率
|
|
||||||
- NuGet 下载量
|
|
||||||
- 文档链接
|
|
||||||
|
|
||||||
### 持续维护
|
|
||||||
|
|
||||||
- 📅 定期更新 CHANGELOG.md
|
|
||||||
- 👥 更新 AUTHORS 文件添加新贡献者
|
|
||||||
- 📦 发布新版本时更新版本号
|
|
||||||
- 📄 保持文档与代码同步
|
|
||||||
|
|
||||||
## 🎯 标准合规性检查
|
|
||||||
|
|
||||||
✅ **开源许可证**: AGPL-3.0-or-later
|
|
||||||
✅ **版本管理**: 语义化版本 1.0.1
|
|
||||||
✅ **版权声明**: 所有必要文件已包含
|
|
||||||
✅ **第三方归属**: NOTICE 文件已创建
|
|
||||||
✅ **贡献流程**: CONTRIBUTING.md 已完善
|
|
||||||
✅ **变更跟踪**: CHANGELOG.md 已建立
|
|
||||||
✅ **作者信息**: AUTHORS 文件已创建
|
|
||||||
✅ **项目描述**: README.md 详细且专业
|
|
||||||
|
|
||||||
## 📝 维护命令
|
|
||||||
|
|
||||||
### 更新版本号
|
|
||||||
```powershell
|
|
||||||
# 编辑 Directory.Build.props
|
|
||||||
# 更新 <VersionPrefix> 标签
|
|
||||||
# 更新 CHANGELOG.md 添加新版本记录
|
|
||||||
```
|
|
||||||
|
|
||||||
### 构建 NuGet 包
|
|
||||||
```bash
|
|
||||||
dotnet pack -c Release
|
|
||||||
```
|
|
||||||
|
|
||||||
### 验证元数据
|
|
||||||
```bash
|
|
||||||
dotnet pack --no-build -c Release -o ./nupkg
|
|
||||||
# 检查生成的 .nupkg 文件的元数据
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**项目现在已符合标准开源项目的要求!** 🎉
|
|
||||||
|
|
||||||
所有元数据已正确配置,文档完善,准备好发布和接受贡献。
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
@echo off
|
||||||
|
REM ========================================
|
||||||
|
REM 快速启动开发工具菜单
|
||||||
|
REM ========================================
|
||||||
|
|
||||||
|
cd /d "%~dp0\scripts"
|
||||||
|
call dev.bat
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
# Sharp-Basic 开发脚本工具
|
||||||
|
|
||||||
|
此目录包含用于开发 Sharp-Basic 项目的实用脚本工具。
|
||||||
|
|
||||||
|
## 快速开始
|
||||||
|
|
||||||
|
**推荐方式:** 在项目根目录双击 `dev.bat`,或在 `scripts` 目录双击 `dev.bat`,会显示交互式菜单。
|
||||||
|
|
||||||
|
## ⚠️ 重要说明
|
||||||
|
|
||||||
|
1. **清理后必须还原**: `clean.bat` 会删除 bin/obj 目录,删除后**必须运行 restore.bat** 还原 NuGet 包才能构建
|
||||||
|
2. **推荐使用 rebuild.bat**: 它会自动完成 清理 → 还原 → 构建 的完整流程
|
||||||
|
3. **首次使用**: 建议先运行 `verify.bat` 验证环境配置
|
||||||
|
|
||||||
|
## 脚本列表
|
||||||
|
|
||||||
|
### 批处理脚本 (.bat)
|
||||||
|
|
||||||
|
| 脚本 | 功能 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| `clean.bat` | 清理构建产物 | 删除所有 bin、obj 目录并运行 dotnet clean |
|
||||||
|
| `build.bat` | 构建解决方案 | Release 模式编译整个解决方案 |
|
||||||
|
| `rebuild.bat` | 重新构建 | 先清理再构建 |
|
||||||
|
| `restore.bat` | 还原 NuGet 包 | 恢复所有依赖包 |
|
||||||
|
| `test.bat` | 运行单元测试 | 执行所有测试项目并显示详细日志 |
|
||||||
|
| `run-demo.bat` | 运行演示应用 | 启动 Sharp.Demo 应用程序 |
|
||||||
|
| `format.bat` | 代码格式化 | 使用 dotnet format 统一代码风格 |
|
||||||
|
| `dev.bat` | 开发菜单 | 交互式菜单,集成所有功能 ⭐ **推荐** |
|
||||||
|
| `verify.bat` | 验证环境 | 检查开发环境和项目配置是否正常 |
|
||||||
|
|
||||||
|
### PowerShell 脚本 (.ps1)
|
||||||
|
|
||||||
|
| 脚本 | 功能 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| `clean-deep.ps1` | 深度清理 | 删除所有构建产物、缓存、临时文件,可选清理 NuGet 全局缓存 |
|
||||||
|
|
||||||
|
## 使用方法
|
||||||
|
|
||||||
|
### 方式一:交互式菜单(推荐)
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
# 在项目根目录
|
||||||
|
dev.bat
|
||||||
|
|
||||||
|
# 或进入 scripts 目录
|
||||||
|
cd scripts
|
||||||
|
dev.bat
|
||||||
|
```
|
||||||
|
|
||||||
|
菜单选项:
|
||||||
|
```
|
||||||
|
[1] 清理项目 (clean)
|
||||||
|
[2] 还原包 (restore)
|
||||||
|
[3] 构建项目 (build)
|
||||||
|
[4] 重新构建 (rebuild)
|
||||||
|
[5] 运行测试 (test)
|
||||||
|
[6] 运行演示应用 (run-demo)
|
||||||
|
[7] 格式化代码 (format)
|
||||||
|
[8] 深度清理 (PowerShell)
|
||||||
|
[0] 退出
|
||||||
|
```
|
||||||
|
|
||||||
|
### 方式二:直接运行单个脚本
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
# 进入 scripts 目录
|
||||||
|
cd scripts
|
||||||
|
|
||||||
|
# 运行具体脚本
|
||||||
|
clean.bat # 清理项目
|
||||||
|
build.bat # 构建项目
|
||||||
|
test.bat # 运行测试
|
||||||
|
```
|
||||||
|
|
||||||
|
### 方式三:PowerShell 深度清理
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# 在 scripts 目录
|
||||||
|
.\clean-deep.ps1
|
||||||
|
|
||||||
|
# 或从项目根目录
|
||||||
|
powershell -ExecutionPolicy Bypass -File scripts\clean-deep.ps1
|
||||||
|
```
|
||||||
|
|
||||||
|
## 常见使用场景
|
||||||
|
|
||||||
|
### 场景 1:日常开发
|
||||||
|
```cmd
|
||||||
|
dev.bat
|
||||||
|
# 选择 3 (构建) 或 6 (运行演示)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 场景 2:遇到编译问题或缓存问题
|
||||||
|
```cmd
|
||||||
|
# 推荐方式 - 自动处理所有步骤
|
||||||
|
cd scripts
|
||||||
|
rebuild.bat # 清理 + 还原 + 重新构建
|
||||||
|
|
||||||
|
# 手动方式 - 分步执行
|
||||||
|
cd scripts
|
||||||
|
clean.bat # 清理
|
||||||
|
restore.bat # 还原包(必须!)
|
||||||
|
build.bat # 构建
|
||||||
|
```
|
||||||
|
|
||||||
|
### 场景 3:代码提交前
|
||||||
|
```cmd
|
||||||
|
cd scripts
|
||||||
|
format.bat # 格式化代码
|
||||||
|
test.bat # 确保测试通过
|
||||||
|
```
|
||||||
|
|
||||||
|
### 场景 4:解决缓存问题
|
||||||
|
```cmd
|
||||||
|
cd scripts
|
||||||
|
.\clean-deep.ps1 # PowerShell 深度清理
|
||||||
|
```
|
||||||
|
|
||||||
|
### 场景 5:克隆项目后首次构建
|
||||||
|
```cmd
|
||||||
|
cd scripts
|
||||||
|
restore.bat # 还原 NuGet 包
|
||||||
|
build.bat # 构建项目
|
||||||
|
```
|
||||||
|
|
||||||
|
## 脚本功能详解
|
||||||
|
|
||||||
|
### clean.bat - 清理构建产物
|
||||||
|
- 运行 `dotnet clean Sharp.sln`
|
||||||
|
- 使用 PowerShell 递归删除所有 `bin` 和 `obj` 目录
|
||||||
|
- **重要**: 清理后必须运行 `restore.bat` 还原 NuGet 包
|
||||||
|
- 用于解决编译缓存问题
|
||||||
|
|
||||||
|
### rebuild.bat - 完整重建 ⭐ **推荐用于清理场景**
|
||||||
|
- 步骤 1: 清理所有构建产物
|
||||||
|
- 步骤 2: 还原 NuGet 包
|
||||||
|
- 步骤 3: Release 模式重新构建
|
||||||
|
- 自动处理依赖关系,一次性完成所有操作
|
||||||
|
|
||||||
|
### clean-deep.ps1 - 深度清理
|
||||||
|
除了 clean.bat 的功能外,还包括:
|
||||||
|
- 删除 `.vs` 目录(Visual Studio 缓存)
|
||||||
|
- 删除 `TestResults` 目录
|
||||||
|
- 删除临时文件:*.tmp, *.temp, *.log, *.cache, *.bak, *.user
|
||||||
|
- 可选清理 NuGet 全局缓存(需确认)
|
||||||
|
- 显示删除统计信息
|
||||||
|
|
||||||
|
### build.bat - 构建解决方案
|
||||||
|
- 使用 Release 配置编译
|
||||||
|
- 显示构建结果(成功/失败)
|
||||||
|
- 返回错误代码
|
||||||
|
|
||||||
|
### rebuild.bat - 重新构建
|
||||||
|
- 先运行 clean.bat
|
||||||
|
- 再运行 build.bat
|
||||||
|
- 确保干净的构建环境
|
||||||
|
|
||||||
|
### test.bat - 运行单元测试
|
||||||
|
- 使用 Debug 配置
|
||||||
|
- 详细日志输出
|
||||||
|
- 显示测试结果统计
|
||||||
|
|
||||||
|
### restore.bat - 还原 NuGet 包
|
||||||
|
- 恢复所有项目依赖
|
||||||
|
- 适用于克隆项目后首次构建
|
||||||
|
|
||||||
|
### format.bat - 代码格式化
|
||||||
|
- 使用 `dotnet format` 工具
|
||||||
|
- 统一代码风格
|
||||||
|
- 建议提交前运行
|
||||||
|
|
||||||
|
### run-demo.bat - 运行演示应用
|
||||||
|
- 启动 Sharp.Demo WPF 应用
|
||||||
|
- 用于快速测试功能
|
||||||
|
|
||||||
|
## 注意事项
|
||||||
|
|
||||||
|
1. **PowerShell 执行策略**:如果无法运行 PowerShell 脚本,需要设置执行策略:
|
||||||
|
```powershell
|
||||||
|
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **路径问题**:所有脚本都会自动切换到正确的目录,无需手动 cd
|
||||||
|
|
||||||
|
3. **深度清理警告**:`clean-deep.ps1` 会提示是否清理 NuGet 全局缓存,清理后需要重新下载所有包
|
||||||
|
|
||||||
|
4. **编码问题**:所有脚本使用 UTF-8 编码,支持中文显示
|
||||||
|
|
||||||
|
## 自定义和扩展
|
||||||
|
|
||||||
|
如需添加新脚本:
|
||||||
|
1. 在 `scripts` 目录创建新的 .bat 或 .ps1 文件
|
||||||
|
2. 使用 `cd /d "%~dp0\.."` 切换到项目根目录(批处理)
|
||||||
|
3. 使用 `Set-Location (Join-Path $PSScriptRoot "..")` 切换到项目根目录(PowerShell)
|
||||||
|
4. 可选:在 `dev.bat` 菜单中添加新选项
|
||||||
|
|
||||||
|
## 许可证
|
||||||
|
|
||||||
|
遵循 Sharp-Basic 项目的 GNU AGPLv3 许可证。
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
@echo off
|
||||||
|
REM ========================================
|
||||||
|
REM 构建脚本 - 编译整个解决方案
|
||||||
|
REM ========================================
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 构建 Sharp-Basic 解决方案
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM 切换到项目根目录
|
||||||
|
cd /d "%~dp0\.."
|
||||||
|
|
||||||
|
REM 切换到解决方案目录
|
||||||
|
cd src\Sharp
|
||||||
|
|
||||||
|
echo 正在检查是否需要还原 NuGet 包...
|
||||||
|
dotnet restore Sharp.sln --verbosity quiet
|
||||||
|
if %ERRORLEVEL% NEQ 0 (
|
||||||
|
echo 警告: NuGet 包还原失败
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo 正在构建解决方案...
|
||||||
|
echo.
|
||||||
|
dotnet build Sharp.sln --configuration Release
|
||||||
|
|
||||||
|
if %ERRORLEVEL% EQU 0 (
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 构建成功!
|
||||||
|
echo ==========================================
|
||||||
|
) else (
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 构建失败!错误代码: %ERRORLEVEL%
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
echo 提示: 如果缺少依赖包,请先运行 restore.bat
|
||||||
|
)
|
||||||
|
|
||||||
|
cd ..\..
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
# ========================================
|
||||||
|
# PowerShell 深度清理脚本
|
||||||
|
# 删除所有构建产物、缓存、临时文件
|
||||||
|
# ========================================
|
||||||
|
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "==========================================" -ForegroundColor Cyan
|
||||||
|
Write-Host "Sharp-Basic 深度清理工具" -ForegroundColor Cyan
|
||||||
|
Write-Host "==========================================" -ForegroundColor Cyan
|
||||||
|
Write-Host ""
|
||||||
|
|
||||||
|
# 切换到项目根目录
|
||||||
|
Set-Location (Join-Path $PSScriptRoot "..")
|
||||||
|
|
||||||
|
# 统计删除的目录和文件数量
|
||||||
|
$deletedDirs = 0
|
||||||
|
$deletedFiles = 0
|
||||||
|
|
||||||
|
# 1. 删除所有 bin 目录
|
||||||
|
Write-Host "[1/7] 正在删除所有 bin 目录..." -ForegroundColor Yellow
|
||||||
|
Get-ChildItem -Path . -Recurse -Directory -Filter "bin" -ErrorAction SilentlyContinue | ForEach-Object {
|
||||||
|
Write-Host " 删除: $($_.FullName)" -ForegroundColor Gray
|
||||||
|
Remove-Item $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
$deletedDirs++
|
||||||
|
}
|
||||||
|
|
||||||
|
# 2. 删除所有 obj 目录
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "[2/7] 正在删除所有 obj 目录..." -ForegroundColor Yellow
|
||||||
|
Get-ChildItem -Path . -Recurse -Directory -Filter "obj" -ErrorAction SilentlyContinue | ForEach-Object {
|
||||||
|
Write-Host " 删除: $($_.FullName)" -ForegroundColor Gray
|
||||||
|
Remove-Item $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
$deletedDirs++
|
||||||
|
}
|
||||||
|
|
||||||
|
# 3. 删除 .vs 目录(Visual Studio 缓存)
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "[3/7] 正在删除 .vs 目录..." -ForegroundColor Yellow
|
||||||
|
Get-ChildItem -Path . -Recurse -Directory -Filter ".vs" -Force -ErrorAction SilentlyContinue | ForEach-Object {
|
||||||
|
Write-Host " 删除: $($_.FullName)" -ForegroundColor Gray
|
||||||
|
Remove-Item $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
$deletedDirs++
|
||||||
|
}
|
||||||
|
|
||||||
|
# 4. 删除 TestResults 目录
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "[4/7] 正在删除 TestResults 目录..." -ForegroundColor Yellow
|
||||||
|
Get-ChildItem -Path . -Recurse -Directory -Filter "TestResults" -ErrorAction SilentlyContinue | ForEach-Object {
|
||||||
|
Write-Host " 删除: $($_.FullName)" -ForegroundColor Gray
|
||||||
|
Remove-Item $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
$deletedDirs++
|
||||||
|
}
|
||||||
|
|
||||||
|
# 5. 删除临时文件
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "[5/7] 正在删除临时文件..." -ForegroundColor Yellow
|
||||||
|
$tempPatterns = @("*.tmp", "*.temp", "*.log", "*.cache", "*.bak", "*.user")
|
||||||
|
foreach ($pattern in $tempPatterns) {
|
||||||
|
Get-ChildItem -Path . -Recurse -File -Filter $pattern -ErrorAction SilentlyContinue | ForEach-Object {
|
||||||
|
Write-Host " 删除: $($_.FullName)" -ForegroundColor Gray
|
||||||
|
Remove-Item $_.FullName -Force -ErrorAction SilentlyContinue
|
||||||
|
$deletedFiles++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 6. 使用 dotnet clean
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "[6/7] 使用 dotnet clean 清理解决方案..." -ForegroundColor Yellow
|
||||||
|
Push-Location "src\Sharp"
|
||||||
|
dotnet clean Sharp.sln --verbosity minimal
|
||||||
|
Pop-Location
|
||||||
|
|
||||||
|
# 7. 清理 NuGet 包缓存(可选,慎用)
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "[7/7] 是否清理 NuGet 包缓存?" -ForegroundColor Yellow
|
||||||
|
Write-Host " 警告: 这将删除所有缓存的 NuGet 包,下次构建需要重新下载" -ForegroundColor Red
|
||||||
|
$response = Read-Host " 输入 'yes' 继续,任意键跳过"
|
||||||
|
if ($response -eq 'yes') {
|
||||||
|
Write-Host " 正在清理 NuGet 缓存..." -ForegroundColor Gray
|
||||||
|
dotnet nuget locals all --clear
|
||||||
|
} else {
|
||||||
|
Write-Host " 已跳过 NuGet 缓存清理" -ForegroundColor Gray
|
||||||
|
}
|
||||||
|
|
||||||
|
# 显示统计信息
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "==========================================" -ForegroundColor Cyan
|
||||||
|
Write-Host "清理完成!" -ForegroundColor Green
|
||||||
|
Write-Host "==========================================" -ForegroundColor Cyan
|
||||||
|
Write-Host "删除的目录数: $deletedDirs" -ForegroundColor White
|
||||||
|
Write-Host "删除的文件数: $deletedFiles" -ForegroundColor White
|
||||||
|
Write-Host ""
|
||||||
|
|
||||||
|
# 暂停以便查看结果
|
||||||
|
Read-Host "按回车键退出"
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
@echo off
|
||||||
|
REM ========================================
|
||||||
|
REM 清理脚本 - 删除所有 bin, obj 目录
|
||||||
|
REM ========================================
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 清理 Sharp-Basic 项目构建产物
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM 切换到项目根目录
|
||||||
|
cd /d "%~dp0\.."
|
||||||
|
|
||||||
|
echo [1/2] 使用 dotnet clean 清理解决方案...
|
||||||
|
cd src\Sharp
|
||||||
|
dotnet clean Sharp.sln --verbosity quiet
|
||||||
|
if %ERRORLEVEL% NEQ 0 (
|
||||||
|
echo 警告: dotnet clean 执行失败
|
||||||
|
)
|
||||||
|
cd ..\..
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [2/2] 正在删除所有 bin 和 obj 目录...
|
||||||
|
REM 使用 PowerShell 进行更可靠的删除
|
||||||
|
powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-ChildItem -Path '.' -Include bin,obj -Recurse -Directory -Force | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue"
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 清理完成!
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
echo 提示: 清理后需要运行 restore.bat 还原 NuGet 包
|
||||||
|
echo 或直接运行 rebuild.bat 进行完整重建
|
||||||
|
echo.
|
||||||
|
|
||||||
|
pause
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
@echo off
|
||||||
|
REM ========================================
|
||||||
|
REM 开发环境快速启动脚本
|
||||||
|
REM ========================================
|
||||||
|
|
||||||
|
REM 切换到脚本目录
|
||||||
|
cd /d "%~dp0"
|
||||||
|
|
||||||
|
:menu
|
||||||
|
cls
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo Sharp-Basic 开发工具菜单
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
echo 当前目录: %CD%
|
||||||
|
echo.
|
||||||
|
echo 常用操作:
|
||||||
|
echo [1] 清理项目 (clean)
|
||||||
|
echo [2] 还原 NuGet 包 (restore)
|
||||||
|
echo [3] 构建项目 (build)
|
||||||
|
echo [4] 重新构建 (clean + restore + build)
|
||||||
|
echo [5] 运行测试 (test)
|
||||||
|
echo [6] 运行演示应用 (run-demo)
|
||||||
|
echo.
|
||||||
|
echo 高级操作:
|
||||||
|
echo [7] 格式化代码 (format)
|
||||||
|
echo [8] 深度清理 (PowerShell - 包含缓存清理)
|
||||||
|
echo.
|
||||||
|
echo [0] 退出
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
set /p choice="请输入选项 (0-8): "
|
||||||
|
|
||||||
|
if "%choice%"=="1" goto clean
|
||||||
|
if "%choice%"=="2" goto restore
|
||||||
|
if "%choice%"=="3" goto build
|
||||||
|
if "%choice%"=="4" goto rebuild
|
||||||
|
if "%choice%"=="5" goto test
|
||||||
|
if "%choice%"=="6" goto run
|
||||||
|
if "%choice%"=="7" goto format
|
||||||
|
if "%choice%"=="8" goto deep
|
||||||
|
if "%choice%"=="0" goto exit
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo 无效选项!请输入 0-8 之间的数字
|
||||||
|
timeout /t 2 >nul
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
:clean
|
||||||
|
cls
|
||||||
|
call clean.bat
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
:restore
|
||||||
|
cls
|
||||||
|
call restore.bat
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
:build
|
||||||
|
cls
|
||||||
|
call build.bat
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
:rebuild
|
||||||
|
cls
|
||||||
|
call rebuild.bat
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
:test
|
||||||
|
cls
|
||||||
|
call test.bat
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
:run
|
||||||
|
cls
|
||||||
|
call run-demo.bat
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
:format
|
||||||
|
cls
|
||||||
|
call format.bat
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
:deep
|
||||||
|
cls
|
||||||
|
powershell -ExecutionPolicy Bypass -File clean-deep.ps1
|
||||||
|
pause
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
:exit
|
||||||
|
exit
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
@echo off
|
||||||
|
REM ========================================
|
||||||
|
REM 代码格式化脚本
|
||||||
|
REM ========================================
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 格式化 C# 代码
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM 切换到项目根目录
|
||||||
|
cd /d "%~dp0\.."
|
||||||
|
|
||||||
|
REM 切换到解决方案目录
|
||||||
|
cd src\Sharp
|
||||||
|
|
||||||
|
REM 检查 dotnet format 是否可用
|
||||||
|
dotnet format --version >nul 2>&1
|
||||||
|
if %ERRORLEVEL% NEQ 0 (
|
||||||
|
echo 错误: dotnet format 工具不可用
|
||||||
|
echo.
|
||||||
|
echo 请安装 dotnet format:
|
||||||
|
echo dotnet tool install -g dotnet-format
|
||||||
|
echo.
|
||||||
|
cd ..\..
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo 正在格式化代码...
|
||||||
|
echo.
|
||||||
|
dotnet format Sharp.sln --verbosity diagnostic
|
||||||
|
|
||||||
|
if %ERRORLEVEL% EQU 0 (
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 代码格式化完成!
|
||||||
|
echo ==========================================
|
||||||
|
) else (
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 代码格式化失败!错误代码: %ERRORLEVEL%
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
echo 可能的原因:
|
||||||
|
echo 1. 代码存在语法错误
|
||||||
|
echo 2. 某些文件被占用
|
||||||
|
)
|
||||||
|
|
||||||
|
cd ..\..
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
@echo off
|
||||||
|
REM ========================================
|
||||||
|
REM 重新构建脚本 - 清理、还原、重新编译
|
||||||
|
REM ========================================
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 重新构建 Sharp-Basic 解决方案
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM 切换到项目根目录
|
||||||
|
cd /d "%~dp0\.."
|
||||||
|
|
||||||
|
echo [步骤 1/3] 清理项目...
|
||||||
|
cd src\Sharp
|
||||||
|
dotnet clean Sharp.sln --verbosity quiet
|
||||||
|
cd ..\..
|
||||||
|
powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-ChildItem -Path '.' -Include bin,obj -Recurse -Directory -Force | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue"
|
||||||
|
echo 清理完成
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [步骤 2/3] 还原 NuGet 包...
|
||||||
|
cd src\Sharp
|
||||||
|
dotnet restore Sharp.sln --verbosity quiet
|
||||||
|
if %ERRORLEVEL% NEQ 0 (
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo NuGet 包还原失败!
|
||||||
|
echo ==========================================
|
||||||
|
cd ..\..
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
echo 还原完成
|
||||||
|
cd ..\..
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [步骤 3/3] 构建解决方案...
|
||||||
|
cd src\Sharp
|
||||||
|
dotnet build Sharp.sln --configuration Release --no-restore
|
||||||
|
|
||||||
|
if %ERRORLEVEL% EQU 0 (
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 重新构建成功!
|
||||||
|
echo ==========================================
|
||||||
|
) else (
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 构建失败!错误代码: %ERRORLEVEL%
|
||||||
|
echo ==========================================
|
||||||
|
)
|
||||||
|
|
||||||
|
cd ..\..
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
@echo off
|
||||||
|
REM ========================================
|
||||||
|
REM NuGet 包还原脚本
|
||||||
|
REM ========================================
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 还原 NuGet 包
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM 切换到项目根目录
|
||||||
|
cd /d "%~dp0\.."
|
||||||
|
|
||||||
|
REM 切换到解决方案目录
|
||||||
|
cd src\Sharp
|
||||||
|
|
||||||
|
echo 正在还原 NuGet 包...
|
||||||
|
echo.
|
||||||
|
dotnet restore Sharp.sln --verbosity minimal
|
||||||
|
|
||||||
|
if %ERRORLEVEL% EQU 0 (
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo NuGet 包还原成功!
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
echo 提示: 现在可以运行 build.bat 进行构建
|
||||||
|
) else (
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo NuGet 包还原失败!错误代码: %ERRORLEVEL%
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
echo 可能的原因:
|
||||||
|
echo 1. 网络连接问题
|
||||||
|
echo 2. NuGet 源配置问题
|
||||||
|
echo 3. 项目文件损坏
|
||||||
|
)
|
||||||
|
|
||||||
|
cd ..\..
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
@echo off
|
||||||
|
REM ========================================
|
||||||
|
REM 运行演示应用
|
||||||
|
REM ========================================
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 启动 Sharp.Demo 应用程序
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM 切换到项目根目录
|
||||||
|
cd /d "%~dp0\.."
|
||||||
|
|
||||||
|
REM 切换到解决方案目录
|
||||||
|
cd src\Sharp
|
||||||
|
|
||||||
|
REM 检查项目是否存在
|
||||||
|
if not exist "Sharp.Demo\Sharp.Demo.csproj" (
|
||||||
|
echo 错误: 找不到 Sharp.Demo 项目!
|
||||||
|
echo 项目路径: Sharp.Demo\Sharp.Demo.csproj
|
||||||
|
cd ..\..
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo 正在启动应用...
|
||||||
|
echo.
|
||||||
|
dotnet run --project Sharp.Demo\Sharp.Demo.csproj
|
||||||
|
|
||||||
|
if %ERRORLEVEL% NEQ 0 (
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 应用启动失败!错误代码: %ERRORLEVEL%
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
echo 可能的原因:
|
||||||
|
echo 1. 项目未构建,请先运行 build.bat
|
||||||
|
echo 2. 缺少依赖包,请先运行 restore.bat
|
||||||
|
echo 3. 代码存在编译错误
|
||||||
|
)
|
||||||
|
|
||||||
|
cd ..\..
|
||||||
|
pause
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
@echo off
|
||||||
|
REM ========================================
|
||||||
|
REM 测试脚本 - 运行所有单元测试
|
||||||
|
REM ========================================
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 运行 Sharp-Basic 单元测试
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM 切换到项目根目录
|
||||||
|
cd /d "%~dp0\.."
|
||||||
|
|
||||||
|
REM 切换到解决方案目录
|
||||||
|
cd src\Sharp
|
||||||
|
|
||||||
|
echo 正在还原依赖并构建测试项目...
|
||||||
|
dotnet restore Sharp.sln --verbosity quiet
|
||||||
|
dotnet build Sharp.sln --configuration Debug --verbosity quiet
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo 正在运行测试...
|
||||||
|
echo.
|
||||||
|
dotnet test Sharp.sln --configuration Debug --no-build --verbosity normal
|
||||||
|
|
||||||
|
if %ERRORLEVEL% EQU 0 (
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 所有测试通过!
|
||||||
|
echo ==========================================
|
||||||
|
) else (
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 测试失败!错误代码: %ERRORLEVEL%
|
||||||
|
echo ==========================================
|
||||||
|
)
|
||||||
|
|
||||||
|
cd ..\..
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
@echo off
|
||||||
|
REM ========================================
|
||||||
|
REM 验证脚本功能
|
||||||
|
REM ========================================
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 验证 Sharp-Basic 脚本工具
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
cd /d "%~dp0\.."
|
||||||
|
|
||||||
|
echo [测试 1] 检查解决方案文件...
|
||||||
|
if exist "src\Sharp\Sharp.sln" (
|
||||||
|
echo [OK] 找到 Sharp.sln
|
||||||
|
) else (
|
||||||
|
echo [FAIL] 未找到 Sharp.sln
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [测试 2] 检查 dotnet 版本...
|
||||||
|
dotnet --version
|
||||||
|
if %ERRORLEVEL% EQU 0 (
|
||||||
|
echo [OK] dotnet CLI 可用
|
||||||
|
) else (
|
||||||
|
echo [FAIL] dotnet CLI 不可用
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [测试 3] 测试清理功能(扫描 bin/obj 目录)...
|
||||||
|
powershell -NoProfile -ExecutionPolicy Bypass -Command "$dirs = Get-ChildItem -Path 'src\Sharp' -Include bin,obj -Recurse -Directory -Force -ErrorAction SilentlyContinue; Write-Host \" 找到 $($dirs.Count) 个 bin/obj 目录\""
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [测试 4] 检查项目文件完整性...
|
||||||
|
set /a count=0
|
||||||
|
for %%f in (src\Sharp\Common\Common.csproj src\Sharp\Config\Config.csproj src\Sharp\Wpf\Wpf.csproj) do (
|
||||||
|
if exist "%%f" (
|
||||||
|
set /a count+=1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
echo [OK] 找到 %count% 个核心项目文件
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ==========================================
|
||||||
|
echo 验证完成
|
||||||
|
echo ==========================================
|
||||||
|
echo.
|
||||||
|
echo 建议使用步骤:
|
||||||
|
echo 1. 运行 restore.bat - 还原 NuGet 包
|
||||||
|
echo 2. 运行 build.bat - 构建项目
|
||||||
|
echo 或直接运行 rebuild.bat - 完整重建
|
||||||
|
echo.
|
||||||
|
|
||||||
|
pause
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"permissions": {
|
||||||
|
"allow": [
|
||||||
|
"Bash(dir:*)",
|
||||||
|
"Bash(cd:*)",
|
||||||
|
"Bash(grep:*)",
|
||||||
|
"Bash(dotnet sln:*)",
|
||||||
|
"Bash(dotnet build:*)",
|
||||||
|
"Bash(dotnet restore:*)",
|
||||||
|
"Bash(dotnet list:*)",
|
||||||
|
"Bash(dotnet new:*)",
|
||||||
|
"Bash(rm:*)",
|
||||||
|
"Bash(findstr:*)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,394 @@
|
|||||||
|
# Sharp.Process & Sharp.Python 使用示例
|
||||||
|
|
||||||
|
## 示例1:在 WPF 应用中使用
|
||||||
|
|
||||||
|
### 注册服务(App.xaml.cs)
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Sharp.Process.DependencyInjection;
|
||||||
|
using Sharp.Python.DependencyInjection;
|
||||||
|
|
||||||
|
protected override void OnStartup(StartupEventArgs e)
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
|
||||||
|
// 注册日志
|
||||||
|
services.AddLogging(builder => {
|
||||||
|
builder.AddConsole();
|
||||||
|
builder.AddDebug();
|
||||||
|
});
|
||||||
|
|
||||||
|
// 注册 Process 和 Python 服务
|
||||||
|
services.AddSharpProcess();
|
||||||
|
services.AddSharpPython(options => {
|
||||||
|
options.DefaultVirtualEnvPath = @"C:\MyProject\.venv";
|
||||||
|
options.AutoLogOutputByDefault = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
// 注册 ViewModel
|
||||||
|
services.AddTransient<MainViewModel>();
|
||||||
|
services.AddTransient<MainWindow>();
|
||||||
|
|
||||||
|
var provider = services.BuildServiceProvider();
|
||||||
|
provider.GetRequiredService<MainWindow>().Show();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### ViewModel 示例
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
using Sharp.Process;
|
||||||
|
using Sharp.Python;
|
||||||
|
|
||||||
|
public class MainViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
private readonly IPythonExecutor _python;
|
||||||
|
private readonly ILogger<MainViewModel> _logger;
|
||||||
|
private string _output = "";
|
||||||
|
|
||||||
|
public string Output
|
||||||
|
{
|
||||||
|
get => _output;
|
||||||
|
set => SetProperty(ref _output, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainViewModel(IPythonExecutor python, ILogger<MainViewModel> logger)
|
||||||
|
{
|
||||||
|
_python = python;
|
||||||
|
_logger = logger;
|
||||||
|
|
||||||
|
RunPythonCommand = new AsyncCommand(ExecutePythonScriptAsync);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IAsyncCommand RunPythonCommand { get; }
|
||||||
|
|
||||||
|
private async Task ExecutePythonScriptAsync()
|
||||||
|
{
|
||||||
|
IsBusy = true;
|
||||||
|
Output = "";
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var result = await _python.RunScriptAsync(
|
||||||
|
@"C:\Scripts\data_processor.py",
|
||||||
|
new {
|
||||||
|
input_file = "data.csv",
|
||||||
|
output_dir = "results",
|
||||||
|
batch_size = 32
|
||||||
|
},
|
||||||
|
new PythonOptions
|
||||||
|
{
|
||||||
|
OnOutputReceived = line => {
|
||||||
|
_dispatcher.Invoke(() => {
|
||||||
|
Output += $"{DateTime.Now:HH:mm:ss} - {line}\n";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
_dialogService.ShowMessage("处理完成!", "成功");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var error = result.ErrorMessage ?? "未知错误";
|
||||||
|
_dialogService.ShowError($"处理失败: {error}", "错误");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "执行 Python 脚本失败");
|
||||||
|
_dialogService.ShowError($"执行失败: {ex.Message}", "错误");
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
IsBusy = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 示例2:调用任意命令行工具
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
using Sharp.Process;
|
||||||
|
|
||||||
|
public class BuildService
|
||||||
|
{
|
||||||
|
private readonly IProcessExecutor _process;
|
||||||
|
private readonly ILogger<BuildService> _logger;
|
||||||
|
|
||||||
|
public BuildService(IProcessExecutor process, ILogger<BuildService> logger)
|
||||||
|
{
|
||||||
|
_process = process;
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 执行 dotnet build
|
||||||
|
public async Task<bool> BuildProjectAsync(string projectPath)
|
||||||
|
{
|
||||||
|
var result = await _process.CreateBuilder()
|
||||||
|
.WithCommand("dotnet", "build", projectPath)
|
||||||
|
.WithWorkingDirectory(Path.GetDirectoryName(projectPath))
|
||||||
|
.OnOutputReceived(line => _logger.LogInformation("[Build] {Line}", line))
|
||||||
|
.OnErrorReceived(line => _logger.LogWarning("[Build] {Error}", line))
|
||||||
|
.WithTimeout(TimeSpan.FromMinutes(10))
|
||||||
|
.ExecuteAsync();
|
||||||
|
|
||||||
|
return result.IsSuccess && result.Value.ExitCode == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 执行 Git 命令
|
||||||
|
public async Task<string?> GetGitBranchAsync(string repoPath)
|
||||||
|
{
|
||||||
|
var result = await _process.CreateBuilder()
|
||||||
|
.WithCommand("git", "branch", "--show-current")
|
||||||
|
.WithWorkingDirectory(repoPath)
|
||||||
|
.ExecuteAsync();
|
||||||
|
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
return result.Value.StandardOutput.Trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 执行 ffmpeg 视频转换
|
||||||
|
public async Task<bool> ConvertVideoAsync(string inputPath, string outputPath)
|
||||||
|
{
|
||||||
|
var result = await _process.CreateBuilder()
|
||||||
|
.WithCommand("ffmpeg")
|
||||||
|
.WithArgument("-i").WithArgument(inputPath)
|
||||||
|
.WithArgument(outputPath)
|
||||||
|
.WithTimeout(TimeSpan.FromHours(1))
|
||||||
|
.OnOutputReceived(line => {
|
||||||
|
// 解析 ffmpeg 进度输出
|
||||||
|
if (line.Contains("time="))
|
||||||
|
{
|
||||||
|
_logger.LogInformation("转换进度: {Line}", line);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.ExecuteAsync();
|
||||||
|
|
||||||
|
return result.IsSuccess && result.Value.ExitCode == 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 示例3:AI 模型推理服务
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
using Sharp.Python;
|
||||||
|
|
||||||
|
public class ImageClassificationService
|
||||||
|
{
|
||||||
|
private readonly IPythonExecutor _python;
|
||||||
|
private readonly ILogger<ImageClassificationService> _logger;
|
||||||
|
|
||||||
|
public ImageClassificationService(IPythonExecutor python, ILogger<ImageClassificationService> logger)
|
||||||
|
{
|
||||||
|
_python = python;
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<ClassificationResult?> ClassifyAsync(string imagePath)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("开始分类图片: {ImagePath}", imagePath);
|
||||||
|
|
||||||
|
var result = await _python.RunScriptAsync<ClassificationResult>(
|
||||||
|
@"C:\AI\models\classify.py",
|
||||||
|
new {
|
||||||
|
image_path = imagePath,
|
||||||
|
model = "resnet50",
|
||||||
|
top_k = 5
|
||||||
|
},
|
||||||
|
new PythonOptions
|
||||||
|
{
|
||||||
|
VirtualEnvPath = @"C:\AI\models\.venv",
|
||||||
|
Timeout = TimeSpan.FromMinutes(2),
|
||||||
|
OnOutputReceived = line => _logger.LogDebug("[Python] {Line}", line)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("分类成功: {Label} (置信度: {Confidence})",
|
||||||
|
result.Value.Label, result.Value.Confidence);
|
||||||
|
return result.Value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_logger.LogError("分类失败: {Error}", result.ErrorMessage);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ClassificationResult
|
||||||
|
{
|
||||||
|
public string Label { get; set; } = "";
|
||||||
|
public double Confidence { get; set; }
|
||||||
|
public List<string> TopLabels { get; set; } = new();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
对应的 Python 脚本 (`classify.py`):
|
||||||
|
|
||||||
|
```python
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
from PIL import Image
|
||||||
|
import torch
|
||||||
|
from torchvision import models, transforms
|
||||||
|
|
||||||
|
def classify_image(image_path, model_name, top_k):
|
||||||
|
# 加载模型
|
||||||
|
print(f"加载模型: {model_name}", file=sys.stderr)
|
||||||
|
model = models.resnet50(pretrained=True)
|
||||||
|
model.eval()
|
||||||
|
|
||||||
|
# 预处理
|
||||||
|
preprocess = transforms.Compose([
|
||||||
|
transforms.Resize(256),
|
||||||
|
transforms.CenterCrop(224),
|
||||||
|
transforms.ToTensor(),
|
||||||
|
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
|
||||||
|
])
|
||||||
|
|
||||||
|
# 加载图片
|
||||||
|
print(f"处理图片: {image_path}", file=sys.stderr)
|
||||||
|
image = Image.open(image_path)
|
||||||
|
input_tensor = preprocess(image)
|
||||||
|
input_batch = input_tensor.unsqueeze(0)
|
||||||
|
|
||||||
|
# 推理
|
||||||
|
with torch.no_grad():
|
||||||
|
output = model(input_batch)
|
||||||
|
|
||||||
|
# 解析结果
|
||||||
|
probabilities = torch.nn.functional.softmax(output[0], dim=0)
|
||||||
|
top_prob, top_catid = torch.topk(probabilities, top_k)
|
||||||
|
|
||||||
|
# 输出 JSON(只输出到 stdout)
|
||||||
|
result = {
|
||||||
|
"label": f"class_{top_catid[0].item()}",
|
||||||
|
"confidence": top_prob[0].item(),
|
||||||
|
"topLabels": [f"class_{catid.item()}" for catid in top_catid]
|
||||||
|
}
|
||||||
|
|
||||||
|
print(json.dumps(result))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--image-path', required=True)
|
||||||
|
parser.add_argument('--model', default='resnet50')
|
||||||
|
parser.add_argument('--top-k', type=int, default=5)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
classify_image(args.image_path, args.model, args.top_k)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 示例4:批量数据处理
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
using Sharp.Python;
|
||||||
|
|
||||||
|
public class DataProcessingService
|
||||||
|
{
|
||||||
|
private readonly IPythonExecutor _python;
|
||||||
|
|
||||||
|
public async Task<bool> ProcessAllCsvFilesAsync(string directory)
|
||||||
|
{
|
||||||
|
var csvFiles = Directory.GetFiles(directory, "*.csv");
|
||||||
|
|
||||||
|
foreach (var file in csvFiles)
|
||||||
|
{
|
||||||
|
var result = await _python.RunScriptAsync(
|
||||||
|
"process_csv.py",
|
||||||
|
new {
|
||||||
|
input = file,
|
||||||
|
output = file.Replace(".csv", "_processed.csv"),
|
||||||
|
remove_duplicates = true,
|
||||||
|
normalize = true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!result.IsSuccess)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 测试建议
|
||||||
|
|
||||||
|
### 简单测试脚本(test.py)
|
||||||
|
|
||||||
|
```python
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--name', default='World')
|
||||||
|
parser.add_argument('--count', type=int, default=1)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# 日志输出到 stderr
|
||||||
|
print(f"参数: name={args.name}, count={args.count}", file=sys.stderr)
|
||||||
|
|
||||||
|
# 处理
|
||||||
|
for i in range(args.count):
|
||||||
|
print(f"Hello, {args.name}! ({i+1})", file=sys.stderr)
|
||||||
|
|
||||||
|
# 结果输出到 stdout(JSON)
|
||||||
|
result = {
|
||||||
|
"message": f"Greeted {args.name} {args.count} times",
|
||||||
|
"success": True
|
||||||
|
}
|
||||||
|
print(json.dumps(result))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
```
|
||||||
|
|
||||||
|
### C# 测试代码
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
// 测试基本调用
|
||||||
|
var result = await _python.RunScriptAsync("test.py", new {
|
||||||
|
name = "Sharp",
|
||||||
|
count = 3
|
||||||
|
});
|
||||||
|
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
Console.WriteLine(result.Value.StandardOutput);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 测试 JSON 解析
|
||||||
|
public class TestResult
|
||||||
|
{
|
||||||
|
public string Message { get; set; } = "";
|
||||||
|
public bool Success { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
var jsonResult = await _python.RunScriptAsync<TestResult>("test.py", new {
|
||||||
|
name = "Sharp",
|
||||||
|
count = 5
|
||||||
|
});
|
||||||
|
|
||||||
|
if (jsonResult.IsSuccess)
|
||||||
|
{
|
||||||
|
Console.WriteLine(jsonResult.Value.Message);
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
// <autogenerated />
|
|
||||||
using System;
|
|
||||||
using System.Reflection;
|
|
||||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
#pragma checksum "..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "E3F9FFB46D71276D1887DE3B3CD38133E8717023"
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// <auto-generated>
|
|
||||||
// This code was generated by a tool.
|
|
||||||
//
|
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
|
||||||
// the code is regenerated.
|
|
||||||
// </auto-generated>
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Automation;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Controls.Primitives;
|
|
||||||
using System.Windows.Controls.Ribbon;
|
|
||||||
using System.Windows.Data;
|
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Ink;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Markup;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Animation;
|
|
||||||
using System.Windows.Media.Effects;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
using System.Windows.Media.Media3D;
|
|
||||||
using System.Windows.Media.TextFormatting;
|
|
||||||
using System.Windows.Navigation;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
using System.Windows.Shell;
|
|
||||||
using Wpf;
|
|
||||||
|
|
||||||
|
|
||||||
namespace Wpf {
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// App
|
|
||||||
/// </summary>
|
|
||||||
public partial class App : System.Windows.Application {
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// InitializeComponent
|
|
||||||
/// </summary>
|
|
||||||
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.4.0")]
|
|
||||||
public void InitializeComponent() {
|
|
||||||
|
|
||||||
#line 5 "..\..\..\App.xaml"
|
|
||||||
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
|
|
||||||
|
|
||||||
#line default
|
|
||||||
#line hidden
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Application Entry Point.
|
|
||||||
/// </summary>
|
|
||||||
[System.STAThreadAttribute()]
|
|
||||||
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.4.0")]
|
|
||||||
public static void Main() {
|
|
||||||
Wpf.App app = new Wpf.App();
|
|
||||||
app.InitializeComponent();
|
|
||||||
app.Run();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
#pragma checksum "..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "E3F9FFB46D71276D1887DE3B3CD38133E8717023"
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// <auto-generated>
|
|
||||||
// 此代码由工具生成。
|
|
||||||
// 运行时版本:4.0.30319.42000
|
|
||||||
//
|
|
||||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
|
||||||
// 重新生成代码,这些更改将会丢失。
|
|
||||||
// </auto-generated>
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Automation;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Controls.Primitives;
|
|
||||||
using System.Windows.Controls.Ribbon;
|
|
||||||
using System.Windows.Data;
|
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Ink;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Markup;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Animation;
|
|
||||||
using System.Windows.Media.Effects;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
using System.Windows.Media.Media3D;
|
|
||||||
using System.Windows.Media.TextFormatting;
|
|
||||||
using System.Windows.Navigation;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
using System.Windows.Shell;
|
|
||||||
using Wpf;
|
|
||||||
|
|
||||||
|
|
||||||
namespace Wpf {
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// App
|
|
||||||
/// </summary>
|
|
||||||
public partial class App : System.Windows.Application {
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// InitializeComponent
|
|
||||||
/// </summary>
|
|
||||||
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.4.0")]
|
|
||||||
public void InitializeComponent() {
|
|
||||||
|
|
||||||
#line 5 "..\..\..\App.xaml"
|
|
||||||
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
|
|
||||||
|
|
||||||
#line default
|
|
||||||
#line hidden
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Application Entry Point.
|
|
||||||
/// </summary>
|
|
||||||
[System.STAThreadAttribute()]
|
|
||||||
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.4.0")]
|
|
||||||
public static void Main() {
|
|
||||||
Wpf.App app = new Wpf.App();
|
|
||||||
app.InitializeComponent();
|
|
||||||
app.Run();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "E11B1709F73A671EB1F1804D276CA5E1F763BAD3"
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// <auto-generated>
|
|
||||||
// This code was generated by a tool.
|
|
||||||
//
|
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
|
||||||
// the code is regenerated.
|
|
||||||
// </auto-generated>
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Automation;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Controls.Primitives;
|
|
||||||
using System.Windows.Controls.Ribbon;
|
|
||||||
using System.Windows.Data;
|
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Ink;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Markup;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Animation;
|
|
||||||
using System.Windows.Media.Effects;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
using System.Windows.Media.Media3D;
|
|
||||||
using System.Windows.Media.TextFormatting;
|
|
||||||
using System.Windows.Navigation;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
using System.Windows.Shell;
|
|
||||||
using Wpf;
|
|
||||||
|
|
||||||
|
|
||||||
namespace Wpf {
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// MainWindow
|
|
||||||
/// </summary>
|
|
||||||
public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
|
|
||||||
|
|
||||||
private bool _contentLoaded;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// InitializeComponent
|
|
||||||
/// </summary>
|
|
||||||
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.4.0")]
|
|
||||||
public void InitializeComponent() {
|
|
||||||
if (_contentLoaded) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_contentLoaded = true;
|
|
||||||
System.Uri resourceLocater = new System.Uri("/Wpf;component/mainwindow.xaml", System.UriKind.Relative);
|
|
||||||
|
|
||||||
#line 1 "..\..\..\MainWindow.xaml"
|
|
||||||
System.Windows.Application.LoadComponent(this, resourceLocater);
|
|
||||||
|
|
||||||
#line default
|
|
||||||
#line hidden
|
|
||||||
}
|
|
||||||
|
|
||||||
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.4.0")]
|
|
||||||
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
|
|
||||||
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
|
|
||||||
this._contentLoaded = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "E11B1709F73A671EB1F1804D276CA5E1F763BAD3"
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// <auto-generated>
|
|
||||||
// 此代码由工具生成。
|
|
||||||
// 运行时版本:4.0.30319.42000
|
|
||||||
//
|
|
||||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
|
||||||
// 重新生成代码,这些更改将会丢失。
|
|
||||||
// </auto-generated>
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Automation;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Controls.Primitives;
|
|
||||||
using System.Windows.Controls.Ribbon;
|
|
||||||
using System.Windows.Data;
|
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Ink;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Markup;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Animation;
|
|
||||||
using System.Windows.Media.Effects;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
using System.Windows.Media.Media3D;
|
|
||||||
using System.Windows.Media.TextFormatting;
|
|
||||||
using System.Windows.Navigation;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
using System.Windows.Shell;
|
|
||||||
using Wpf;
|
|
||||||
|
|
||||||
|
|
||||||
namespace Wpf {
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// MainWindow
|
|
||||||
/// </summary>
|
|
||||||
public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
|
|
||||||
|
|
||||||
private bool _contentLoaded;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// InitializeComponent
|
|
||||||
/// </summary>
|
|
||||||
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.4.0")]
|
|
||||||
public void InitializeComponent() {
|
|
||||||
if (_contentLoaded) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_contentLoaded = true;
|
|
||||||
System.Uri resourceLocater = new System.Uri("/Wpf;V1.0.0.0;component/mainwindow.xaml", System.UriKind.Relative);
|
|
||||||
|
|
||||||
#line 1 "..\..\..\MainWindow.xaml"
|
|
||||||
System.Windows.Application.LoadComponent(this, resourceLocater);
|
|
||||||
|
|
||||||
#line default
|
|
||||||
#line hidden
|
|
||||||
}
|
|
||||||
|
|
||||||
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.4.0")]
|
|
||||||
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
|
|
||||||
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
|
|
||||||
this._contentLoaded = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
//------------------------------------------------------------------------------
|
|
||||||
// <auto-generated>
|
|
||||||
// This code was generated by a tool.
|
|
||||||
//
|
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
|
||||||
// the code is regenerated.
|
|
||||||
// </auto-generated>
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Sharp.Wpf")]
|
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+433e206d456d0ef3b2fc57c458ff3fc030643be6")]
|
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("Sharp.Wpf")]
|
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("Sharp.Wpf")]
|
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
|
||||||
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
|
|
||||||
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
|
|
||||||
|
|
||||||
// 由 MSBuild WriteCodeFragment 类生成。
|
|
||||||
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
cd23ae979f4410b7a90bcdab8832e81e422253dc2d502d88544f9372c3b0bd4d
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
is_global = true
|
|
||||||
build_property.ApplicationManifest =
|
|
||||||
build_property.StartupObject =
|
|
||||||
build_property.ApplicationDefaultFont =
|
|
||||||
build_property.ApplicationHighDpiMode =
|
|
||||||
build_property.ApplicationUseCompatibleTextRendering =
|
|
||||||
build_property.ApplicationVisualStyles =
|
|
||||||
build_property.TargetFramework = net8.0-windows
|
|
||||||
build_property.TargetFrameworkIdentifier = .NETCoreApp
|
|
||||||
build_property.TargetFrameworkVersion = v8.0
|
|
||||||
build_property.TargetPlatformMinVersion = 7.0
|
|
||||||
build_property.UsingMicrosoftNETSdkWeb =
|
|
||||||
build_property.ProjectTypeGuids =
|
|
||||||
build_property.InvariantGlobalization =
|
|
||||||
build_property.PlatformNeutralAssembly =
|
|
||||||
build_property.EnforceExtendedAnalyzerRules =
|
|
||||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
|
||||||
build_property.RootNamespace = Sharp.Wpf
|
|
||||||
build_property.ProjectDir = D:\code\sharp-basic\src\Sharp\Wpf\
|
|
||||||
build_property.EnableComHosting =
|
|
||||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
|
||||||
build_property.CsWinRTUseWindowsUIXamlProjections = false
|
|
||||||
build_property.EffectiveAnalysisLevelStyle = 8.0
|
|
||||||
build_property.EnableCodeStyleSeverity =
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// <auto-generated/>
|
|
||||||
global using System;
|
|
||||||
global using System.Collections.Generic;
|
|
||||||
global using System.Drawing;
|
|
||||||
global using System.Linq;
|
|
||||||
global using System.Threading;
|
|
||||||
global using System.Threading.Tasks;
|
|
||||||
global using System.Windows.Forms;
|
|
||||||
Binary file not shown.
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"runtimeTarget": {
|
|
||||||
"name": ".NETCoreApp,Version=v8.0",
|
|
||||||
"signature": ""
|
|
||||||
},
|
|
||||||
"compilationOptions": {},
|
|
||||||
"targets": {
|
|
||||||
".NETCoreApp,Version=v8.0": {}
|
|
||||||
},
|
|
||||||
"libraries": {}
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
{
|
|
||||||
"runtimeOptions": {
|
|
||||||
"tfm": "net8.0",
|
|
||||||
"frameworks": [
|
|
||||||
{
|
|
||||||
"name": "Microsoft.NETCore.App",
|
|
||||||
"version": "8.0.0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Microsoft.WindowsDesktop.App",
|
|
||||||
"version": "8.0.0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"additionalProbingPaths": [
|
|
||||||
"C:\\Users\\yllyo\\.dotnet\\store\\|arch|\\|tfm|",
|
|
||||||
"C:\\Users\\yllyo\\.nuget\\packages",
|
|
||||||
"D:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
|
||||||
],
|
|
||||||
"configProperties": {
|
|
||||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true,
|
|
||||||
"CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false,
|
|
||||||
"Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
Wpf
|
|
||||||
|
|
||||||
|
|
||||||
winexe
|
|
||||||
C#
|
|
||||||
.cs
|
|
||||||
D:\yuanll\sharp-basic\src\Sharp\Wpf\obj\Debug\net8.0-windows\
|
|
||||||
Wpf
|
|
||||||
none
|
|
||||||
false
|
|
||||||
TRACE;DEBUG;NET;NET8_0;NETCOREAPP
|
|
||||||
D:\yuanll\sharp-basic\src\Sharp\Wpf\App.xaml
|
|
||||||
11407045341
|
|
||||||
|
|
||||||
41779921481
|
|
||||||
198-211836927
|
|
||||||
MainWindow.xaml;
|
|
||||||
|
|
||||||
True
|
|
||||||
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
Wpf
|
|
||||||
1.0.0.0
|
|
||||||
|
|
||||||
winexe
|
|
||||||
C#
|
|
||||||
.cs
|
|
||||||
D:\yuanll\sharp-basic\src\Sharp\Wpf\obj\Debug\net8.0-windows\
|
|
||||||
Wpf
|
|
||||||
none
|
|
||||||
false
|
|
||||||
TRACE;DEBUG;NET;NET8_0;NETCOREAPP;WINDOWS;WINDOWS7_0;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER;WINDOWS7_0_OR_GREATER
|
|
||||||
D:\yuanll\sharp-basic\src\Sharp\Wpf\App.xaml
|
|
||||||
11407045341
|
|
||||||
|
|
||||||
61117646960
|
|
||||||
198-211836927
|
|
||||||
MainWindow.xaml;
|
|
||||||
|
|
||||||
False
|
|
||||||
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
FD:\yuanll\sharp-basic\src\Sharp\Wpf\MainWindow.xaml;;
|
|
||||||
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
{
|
|
||||||
"format": 1,
|
|
||||||
"restore": {
|
|
||||||
"D:\\code\\sharp-basic\\src\\Sharp\\Wpf\\Wpf.csproj": {}
|
|
||||||
},
|
|
||||||
"projects": {
|
|
||||||
"D:\\code\\sharp-basic\\src\\Sharp\\Wpf\\Wpf.csproj": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"restore": {
|
|
||||||
"projectUniqueName": "D:\\code\\sharp-basic\\src\\Sharp\\Wpf\\Wpf.csproj",
|
|
||||||
"projectName": "Sharp.Wpf",
|
|
||||||
"projectPath": "D:\\code\\sharp-basic\\src\\Sharp\\Wpf\\Wpf.csproj",
|
|
||||||
"packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\",
|
|
||||||
"outputPath": "D:\\code\\sharp-basic\\src\\Sharp\\Wpf\\obj\\",
|
|
||||||
"projectStyle": "PackageReference",
|
|
||||||
"fallbackFolders": [
|
|
||||||
"D:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
|
||||||
],
|
|
||||||
"configFilePaths": [
|
|
||||||
"C:\\Users\\Administrator\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
|
||||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
|
||||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
|
||||||
],
|
|
||||||
"originalTargetFrameworks": [
|
|
||||||
"net8.0-windows"
|
|
||||||
],
|
|
||||||
"sources": {
|
|
||||||
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
|
||||||
"https://api.nuget.org/v3/index.json": {}
|
|
||||||
},
|
|
||||||
"frameworks": {
|
|
||||||
"net8.0-windows7.0": {
|
|
||||||
"targetAlias": "net8.0-windows",
|
|
||||||
"projectReferences": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"warningProperties": {
|
|
||||||
"warnAsError": [
|
|
||||||
"NU1605"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"restoreAuditProperties": {
|
|
||||||
"enableAudit": "true",
|
|
||||||
"auditLevel": "low",
|
|
||||||
"auditMode": "direct"
|
|
||||||
},
|
|
||||||
"SdkAnalysisLevel": "10.0.100"
|
|
||||||
},
|
|
||||||
"frameworks": {
|
|
||||||
"net8.0-windows7.0": {
|
|
||||||
"targetAlias": "net8.0-windows",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.Extensions.DependencyInjection.Abstractions": {
|
|
||||||
"target": "Package",
|
|
||||||
"version": "[9.0.0, )"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"imports": [
|
|
||||||
"net461",
|
|
||||||
"net462",
|
|
||||||
"net47",
|
|
||||||
"net471",
|
|
||||||
"net472",
|
|
||||||
"net48",
|
|
||||||
"net481"
|
|
||||||
],
|
|
||||||
"assetTargetFallback": true,
|
|
||||||
"warn": true,
|
|
||||||
"frameworkReferences": {
|
|
||||||
"Microsoft.NETCore.App": {
|
|
||||||
"privateAssets": "all"
|
|
||||||
},
|
|
||||||
"Microsoft.WindowsDesktop.App": {
|
|
||||||
"privateAssets": "none"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100/PortableRuntimeIdentifierGraph.json"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
|
||||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
|
||||||
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
|
|
||||||
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
|
||||||
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
|
||||||
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
|
|
||||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Administrator\.nuget\packages\;D:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
|
|
||||||
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
|
||||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
|
||||||
<SourceRoot Include="C:\Users\Administrator\.nuget\packages\" />
|
|
||||||
<SourceRoot Include="D:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
|
||||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
|
|
||||||
@@ -1,138 +0,0 @@
|
|||||||
{
|
|
||||||
"version": 3,
|
|
||||||
"targets": {
|
|
||||||
"net8.0-windows7.0": {
|
|
||||||
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.0": {
|
|
||||||
"type": "package",
|
|
||||||
"compile": {
|
|
||||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"build": {
|
|
||||||
"buildTransitive/net8.0/_._": {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"libraries": {
|
|
||||||
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.0": {
|
|
||||||
"sha512": "+6f2qv2a3dLwd5w6JanPIPs47CxRbnk+ZocMJUhv9NxP88VlOcJYZs9jY+MYSjxvady08bUZn6qgiNh7DadGgg==",
|
|
||||||
"type": "package",
|
|
||||||
"path": "microsoft.extensions.dependencyinjection.abstractions/9.0.0",
|
|
||||||
"files": [
|
|
||||||
".nupkg.metadata",
|
|
||||||
".signature.p7s",
|
|
||||||
"Icon.png",
|
|
||||||
"LICENSE.TXT",
|
|
||||||
"PACKAGE.md",
|
|
||||||
"THIRD-PARTY-NOTICES.TXT",
|
|
||||||
"buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets",
|
|
||||||
"buildTransitive/net462/_._",
|
|
||||||
"buildTransitive/net8.0/_._",
|
|
||||||
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets",
|
|
||||||
"lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
|
||||||
"lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
|
||||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
|
||||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
|
||||||
"lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
|
||||||
"lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
|
||||||
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
|
||||||
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
|
||||||
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
|
|
||||||
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
|
|
||||||
"microsoft.extensions.dependencyinjection.abstractions.9.0.0.nupkg.sha512",
|
|
||||||
"microsoft.extensions.dependencyinjection.abstractions.nuspec",
|
|
||||||
"useSharedDesignerContext.txt"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"projectFileDependencyGroups": {
|
|
||||||
"net8.0-windows7.0": [
|
|
||||||
"Microsoft.Extensions.DependencyInjection.Abstractions >= 9.0.0"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"packageFolders": {
|
|
||||||
"C:\\Users\\Administrator\\.nuget\\packages\\": {},
|
|
||||||
"D:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
|
|
||||||
},
|
|
||||||
"project": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"restore": {
|
|
||||||
"projectUniqueName": "D:\\code\\sharp-basic\\src\\Sharp\\Wpf\\Wpf.csproj",
|
|
||||||
"projectName": "Sharp.Wpf",
|
|
||||||
"projectPath": "D:\\code\\sharp-basic\\src\\Sharp\\Wpf\\Wpf.csproj",
|
|
||||||
"packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\",
|
|
||||||
"outputPath": "D:\\code\\sharp-basic\\src\\Sharp\\Wpf\\obj\\",
|
|
||||||
"projectStyle": "PackageReference",
|
|
||||||
"fallbackFolders": [
|
|
||||||
"D:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
|
||||||
],
|
|
||||||
"configFilePaths": [
|
|
||||||
"C:\\Users\\Administrator\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
|
||||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
|
||||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
|
||||||
],
|
|
||||||
"originalTargetFrameworks": [
|
|
||||||
"net8.0-windows"
|
|
||||||
],
|
|
||||||
"sources": {
|
|
||||||
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
|
||||||
"https://api.nuget.org/v3/index.json": {}
|
|
||||||
},
|
|
||||||
"frameworks": {
|
|
||||||
"net8.0-windows7.0": {
|
|
||||||
"targetAlias": "net8.0-windows",
|
|
||||||
"projectReferences": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"warningProperties": {
|
|
||||||
"warnAsError": [
|
|
||||||
"NU1605"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"restoreAuditProperties": {
|
|
||||||
"enableAudit": "true",
|
|
||||||
"auditLevel": "low",
|
|
||||||
"auditMode": "direct"
|
|
||||||
},
|
|
||||||
"SdkAnalysisLevel": "10.0.100"
|
|
||||||
},
|
|
||||||
"frameworks": {
|
|
||||||
"net8.0-windows7.0": {
|
|
||||||
"targetAlias": "net8.0-windows",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.Extensions.DependencyInjection.Abstractions": {
|
|
||||||
"target": "Package",
|
|
||||||
"version": "[9.0.0, )"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"imports": [
|
|
||||||
"net461",
|
|
||||||
"net462",
|
|
||||||
"net47",
|
|
||||||
"net471",
|
|
||||||
"net472",
|
|
||||||
"net48",
|
|
||||||
"net481"
|
|
||||||
],
|
|
||||||
"assetTargetFallback": true,
|
|
||||||
"warn": true,
|
|
||||||
"frameworkReferences": {
|
|
||||||
"Microsoft.NETCore.App": {
|
|
||||||
"privateAssets": "all"
|
|
||||||
},
|
|
||||||
"Microsoft.WindowsDesktop.App": {
|
|
||||||
"privateAssets": "none"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100/PortableRuntimeIdentifierGraph.json"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"version": 2,
|
|
||||||
"dgSpecHash": "zqaFYIDtlpU=",
|
|
||||||
"success": true,
|
|
||||||
"projectFilePath": "D:\\code\\sharp-basic\\src\\Sharp\\Wpf\\Wpf.csproj",
|
|
||||||
"expectedPackageFiles": [
|
|
||||||
"C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\9.0.0\\microsoft.extensions.dependencyinjection.abstractions.9.0.0.nupkg.sha512"
|
|
||||||
],
|
|
||||||
"logs": []
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
"restore":{"projectUniqueName":"D:\\code\\sharp-basic\\src\\Sharp\\Wpf\\Wpf.csproj","projectName":"Sharp.Wpf","projectPath":"D:\\code\\sharp-basic\\src\\Sharp\\Wpf\\Wpf.csproj","outputPath":"D:\\code\\sharp-basic\\src\\Sharp\\Wpf\\obj\\","projectStyle":"PackageReference","fallbackFolders":["D:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"],"originalTargetFrameworks":["net8.0-windows"],"sources":{"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\":{},"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0-windows7.0":{"targetAlias":"net8.0-windows","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"},"SdkAnalysisLevel":"10.0.100"}"frameworks":{"net8.0-windows7.0":{"targetAlias":"net8.0-windows","dependencies":{"Microsoft.Extensions.DependencyInjection.Abstractions":{"target":"Package","version":"[9.0.0, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"},"Microsoft.WindowsDesktop.App":{"privateAssets":"none"}},"runtimeIdentifierGraphPath":"C:\\Program Files\\dotnet\\sdk\\10.0.100/PortableRuntimeIdentifierGraph.json"}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
17654362814006268
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
17657764918263100
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
using System.Configuration;
|
|
||||||
using System.Data;
|
|
||||||
using System.Windows;
|
|
||||||
|
|
||||||
namespace Client
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interaction logic for App.xaml
|
|
||||||
/// </summary>
|
|
||||||
public partial class App : Application
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Reference in new issue
Block a user