Skip to content

Commit dfae9c7

Browse files
authored
Merge pull request #17 from dotnet-campus/t/lindexi/TargetFramework
2 parents eab8790 + 8e165dc commit dfae9c7

2 files changed

Lines changed: 35 additions & 9 deletions

File tree

Code/UsingMSBuildCopyOutputFileToFastDebug/TargetFrameworkChecker.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,11 @@ private static DotNetType GetTargetFrameworkDotNetType(string targetFramework)
175175
return DotNetType.Net10;
176176
}
177177

178+
if (targetFramework.Contains("net11."))
179+
{
180+
return DotNetType.Net11;
181+
}
182+
178183
if (Regex.IsMatch(targetFramework, @"net\d"))
179184
{
180185
return DotNetType.NetCore;
@@ -212,5 +217,6 @@ public enum DotNetType
212217
Net8 = 1 << 18 | NetCore,
213218
Net9 = 1 << 19 | NetCore,
214219
Net10 = 1 << 20 | NetCore,
220+
Net11 = 1 << 21 | NetCore,
215221
}
216222
}

README.md

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,39 @@
2626

2727
**基础方法**
2828

29-
通过右击底层库属性,点击调试,设置为可执行文件,路径修改为主项目的启动程序。就可以在底层库点击调试运行主项目调试,同时支持打断点和进行二进制兼容的更改
29+
在底层库项目的 `Properties/launchSettings.json` 文件中配置调试启动参数。可以通过 Visual Studio 右击底层库项目属性,点击调试,打开调试启动配置文件 UI 界面,选择启动方式为可执行文件,路径修改为主项目的启动程序。工具将自动读取 `launchSettings.json` 中首个 `commandName``Executable` 的配置项,从中获取 `executablePath` 作为主项目的可执行文件路径。配置完成之后就可以在底层库点击调试运行主项目调试,同时支持打断点和进行二进制兼容的更改
3030

31-
请注意,将使用首个可执行文件调试配置作为输出配置
31+
`launchSettings.json` 中可执行文件配置的路径支持相对路径,相对于当前底层库项目的输出文件夹。工具会从 `executablePath` 找到主项目的可执行文件,并将底层库的输出文件拷贝到该可执行文件所在的文件夹。
3232

3333
**高级方法**
3434

35-
编辑底层库项目的 csproj 文件,添加下面代码
35+
编辑底层库项目的 csproj 文件,添加 `MainProjectExecutablePath` 属性直接指定主项目的可执行文件路径。此方法将覆盖基础方法的 `launchSettings.json` 配置:
3636

3737
```xml
3838
<PropertyGroup>
39-
<MainProjectExecutablePathCommandArgs>主项目的输出可执行文件</MainProjectExecutablePathCommandArgs>
39+
<MainProjectExecutablePath>主项目的输出可执行文件</MainProjectExecutablePath>
4040
</PropertyGroup>
4141
```
4242

4343
请注意如果路径包含空格,记得加上引号,如下面例子
4444

4545
```xml
4646
<PropertyGroup>
47-
<MainProjectExecutablePathCommandArgs>"C:\dotnet campus\Foo\bin\release\net5.0\Foo.exe"</MainProjectExecutablePathCommandArgs>
47+
<MainProjectExecutablePath>"C:\dotnet campus\Foo\bin\release\net9.0\Foo.exe"</MainProjectExecutablePath>
4848
</PropertyGroup>
4949
```
5050

51-
以上主项目的输出文件夹支持相对路径,相对于当前底层库项目 csproj 的相对路径
51+
以上 `MainProjectExecutablePath` 支持相对路径,相对于当前底层库项目 csproj 的相对路径
52+
53+
### 多框架兼容性检查
54+
55+
当底层库项目使用多框架(`<TargetFrameworks>`)时,工具会自动检查当前编译的目标框架与主项目可执行文件的框架是否兼容。兼容规则如下:
56+
57+
- 主项目为 .NET Core / .NET 5+ 系列 → 仅拷贝 .NET Core / .NET 5+ 系列的输出
58+
- 主项目为 .NET Framework 系列 → 仅拷贝 .NET Framework 系列的输出
59+
- 跨系列框架(如 .NET Core 库拷贝到 .NET Framework 主项目)将自动跳过,不做拷贝
60+
61+
工具通过检测主项目可执行文件所在目录是否存在 `.runtimeconfig.json` / `.deps.json` 文件判断其框架类型。对于 .NET Framework 系列,工具还会进一步读取 `.exe.config` 文件中的 `supportedRuntime` 信息。
5262

5363
## 推荐使用方法
5464

@@ -60,7 +70,7 @@
6070

6171
## 原理
6272

63-
在软件运行的时候依然可以移动 dll 或 exe 的路径,而此工具将底层库项目的输出 dll 和 pdb 文件拷贝到主项目的文件夹或 MainProjectPath 设置的文件夹,将原本的 dll 和 pdb 重命名,然后通过调试的可执行文件方式启动主项目
73+
在软件运行的时候依然可以移动 dll 或 exe 的路径,而此工具将底层库项目的输出 dll 和 pdb 文件拷贝到主项目可执行文件所在的文件夹(通过 `MainProjectExecutablePath``launchSettings.json` 获取),将原本的 dll 和 pdb 重命名为 `.bak` 文件,然后通过调试的可执行文件方式启动主项目
6474

6575
此时的主项目将会加载新的 dll 文件,同时因为存在 pdb 文件也能进去代码调试
6676

@@ -74,15 +84,25 @@
7484

7585
## 细节
7686

77-
默认仅有在 Debug 下开启此功能,如需在 Release 也开启,请通过设置 EnableUsingMSBuildCopyOutputFileToFastDebug 属性为 true 开启
87+
### 启用控制
88+
89+
默认仅有在 Debug 下开启此功能,如需在 Release 也开启,请通过设置 `EnableUsingMSBuildCopyOutputFileToFastDebug` 属性为 `true` 开启:
7890

7991
```xml
8092
<PropertyGroup>
8193
<EnableUsingMSBuildCopyOutputFileToFastDebug>true</EnableUsingMSBuildCopyOutputFileToFastDebug>
8294
</PropertyGroup>
8395
```
8496

85-
此项设置之后将会在 Debug 和 Release 下都开启复制
97+
此项设置之后将会在 Debug 和 Release 下都开启复制。
98+
99+
### 复制文件
100+
101+
工具默认将当前项目的输出 dll 和 pdb 文件(`$(AssemblyName).dll``$(AssemblyName).pdb`)拷贝到主项目可执行文件所在的文件夹。如需复制更多文件,可在项目文件中自行扩展 `OutputFileToCopy` 项组。
102+
103+
### 文件占用处理
104+
105+
目标文件夹如果已存在同名 dll 或 pdb 文件,工具会先将其重命名为 `{原文件名}{序号}.{扩展名}.bak`,再拷贝新文件。被重命名的 bak 文件会被记录到清理列表文件(位于 `$(IntermediateOutputPath)CleanUsingMSBuildCopyOutputFileToFastDebugFile.txt`),在执行 MSBuild Clean 目标时统一清理。
86106

87107
## 感谢
88108

0 commit comments

Comments
 (0)