如何在Visual Studio本地修改MSBuild的TargetFrameworks属性且不提交至Git
本地自定义MAUI TargetFrameworks的无Git提交方案
问题背景
需要让专注安卓、iOS的开发者在本地单独修改TargetFrameworks属性,且修改无需提交到Git版本控制。此前使用环境变量方案存在需要重启Visual Studio、清理项目后异常、MacOS上无法生效的问题,现有配置如下:
<TargetFrameworks></TargetFrameworks> <TargetFrameworks Condition="$(MAUI_BUILD.Contains('win'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks> <TargetFrameworks Condition="$(MAUI_BUILD.Contains('and'))">$(TargetFrameworks);net7.0-android</TargetFrameworks> <TargetFrameworks Condition="$(MAUI_BUILD.Contains('ios'))">$(TargetFrameworks);net7.0-ios</TargetFrameworks> <TargetFrameworks Condition="$(MAUI_BUILD.Contains('mac'))">$(TargetFrameworks);net7.0-maccatalyst</TargetFrameworks> <TargetFrameworks Condition="$(MAUI_BUILD.Length)==0">$(TargetFrameworks);net7.0-windows10.0.19041.0;net7.0-android;net7.0-ios;net7.0-maccatalyst</TargetFrameworks>
最优方案
方案一:本地专属项目扩展文件
这种方式类似web.config的环境转换逻辑,通过导入本地忽略的项目文件实现自定义配置:
- 在项目目录下创建
YourProjectName.Local.csproj(替换为你的实际项目名),内容根据开发需求编写:- 安卓开发者的文件内容:
<Project> <PropertyGroup> <TargetFrameworks>net7.0-android</TargetFrameworks> </PropertyGroup> </Project> - iOS开发者的文件内容:
<Project> <PropertyGroup> <TargetFrameworks>net7.0-ios</TargetFrameworks> </PropertyGroup> </Project>
- 安卓开发者的文件内容:
- 在主项目文件(
YourProjectName.csproj)的原有TargetFrameworks配置前添加导入语句:<Import Project="YourProjectName.Local.csproj" Condition="Exists('YourProjectName.Local.csproj')" /> - 在项目根目录的
.gitignore中添加规则:*.Local.csproj,确保该文件不会被提交到Git。
方案二:读取本地配置文件
通过MSBuild直接读取本地文本文件的内容来设置目标框架:
- 在项目目录下创建
TargetConfig.txt,直接写入需要的目标框架:- 安卓开发者写入:
net7.0-android - iOS开发者写入:
net7.0-ios
- 安卓开发者写入:
- 替换主项目文件中的原有
TargetFrameworks配置为以下内容:<PropertyGroup> <!-- 读取本地配置文件内容并去除首尾空白 --> <TargetFrameworks>$([System.IO.File]::ReadAllText('TargetConfig.txt').Trim())</TargetFrameworks> <!-- 若配置文件不存在或内容为空,使用默认全框架配置 --> <TargetFrameworks Condition="!Exists('TargetConfig.txt') Or '$(TargetFrameworks)' == ''">net7.0-windows10.0.19041.0;net7.0-android;net7.0-ios;net7.0-maccatalyst</TargetFrameworks> </PropertyGroup> - 在
.gitignore中添加规则:TargetConfig.txt,避免提交到版本控制。
方案优势
- 无需重启Visual Studio,修改后重新加载项目即可生效
- 完全兼容Windows和MacOS的MSBuild,Visual Studio for Mac可正常识别
- 所有自定义配置仅保存在本地,不会影响仓库中的共享代码
- 解决了原环境变量方案在MacOS上失效、重启异常的问题
内容的提问来源于stack exchange,提问作者Luke Vo
相关产品推荐
相关产品推荐

