You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell修改VS Solution配置属性,设置指定项目不参与构建?

用PowerShell设置VS解决方案指定项目不参与构建的实现方法

以下是两种常用的落地方案,可根据使用场景选择:

方案1:直接解析修改.sln文件(无VS依赖,通用场景)

直接操作解决方案文本文件修改对应项目的构建标记,适合CI/CD等无VS环境的场景,操作逻辑简单,无需额外依赖。

# 配置参数
$slnPath = "C:\Path\To\Your\Solution.sln"
$excludeProjectNames = @("项目名1", "项目名2") # 填要排除的项目名,需和解决方案中显示的名称完全一致
$targetConfigurations = @("Release|x64", "Debug|x64") # 要生效的配置平台组合,填*表示对所有配置生效

# 读取sln原始内容
$slnContent = Get-Content $slnPath -Raw
$inProjectConfigSection = $false
$newSlnLines = @()

foreach ($line in $slnContent -split "`n") {
    if ($line.TrimStart().StartsWith("GlobalSection(ProjectConfigurationPlatforms)")) {
        $inProjectConfigSection = $true
        $newSlnLines += $line
        continue
    }
    if ($inProjectConfigSection -and $line.TrimStart().StartsWith("EndGlobalSection")) {
        $inProjectConfigSection = $false
        $newSlnLines += $line
        continue
    }
    
    if ($inProjectConfigSection) {
        $isExclude = $false
        foreach ($projName in $excludeProjectNames) {
            # 匹配需要排除的项目构建标记行
            if (($targetConfigurations -eq "*" -and $line.Contains($projName) -and $line.Contains("Build.0")) `
                -or ($targetConfigurations -ne "*" -and $targetConfigurations.Any({$line.Contains($_)}) -and $line.Contains($projName) -and $line.Contains("Build.0"))) {
                $isExclude = $true
                break
            }
        }
        if (-not $isExclude) {
            $newSlnLines += $line
        }
    } else {
        $newSlnLines += $line
    }
}

# 写回修改后的sln文件
$newSlnLines -join "`n" | Out-File $slnPath -Encoding utf8
  • 操作前请备份原.sln文件,避免格式错误导致解决方案无法加载
  • 项目名区分大小写,需和解决方案资源管理器中显示的名称完全匹配

方案2:调用VS自动化接口(本地有VS安装场景,兼容性更高)

通过VS官方COM接口直接操作解决方案配置,不会破坏sln文件格式,适合本地开发自动化场景。

# 加载VS自动化程序集
Add-Type -AssemblyName "EnvDTE"
Add-Type -AssemblyName "EnvDTE80"

# 配置参数
$slnPath = "C:\Path\To\Your\Solution.sln"
$excludeProjectNames = @("项目名1", "项目名2")
$targetConfiguration = "Release"
$targetPlatform = "x64"

# 启动VS实例,版本号对应:VS2022=17.0,VS2019=16.0,VS2017=15.0
$dte = New-Object -ComObject VisualStudio.DTE.17.0
$dte.Solution.Open($slnPath)

# 遍历项目禁用指定项目的构建开关
foreach ($proj in $dte.Solution.Projects) {
    if ($excludeProjectNames -contains $proj.Name) {
        $config = $proj.ConfigurationManager.Item($targetConfiguration, $targetPlatform)
        $config.ShouldBuild = $false
    }
}

# 保存修改并释放COM资源
$dte.Solution.SaveAs($slnPath)
$dte.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($dte) | Out-Null
  • 需根据本地安装的VS版本修改代码中的VisualStudio.DTE.xx.0版本号
  • 若运行提示权限不足,可尝试以管理员身份运行PowerShell

内容的提问来源于stack exchange,提问作者Kylie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:27:05