c# - 如何在 PowerShell 中使用 envdte 从 ac# 获取函数?
问题描述
我想在 ac# 文件中找到一个函数,并使用 powershell 在正文中进行一些更改。我已阅读此页面,但我不明白。
解决方案
下面的代码找到 ac# 文件并返回一个 CodeElement 对象,您可以在其中操作函数体、参数、属性等。
#Find the file
function global:GetFile { param($Project,[string]$Path)
$result = $false
$directories = $Path -split '\\'
if($directories[0]) {
for($i=0;$i -lt $directories.count;$i++) {
if(($Project).ProjectItems) {
$Project = ($Project).ProjectItems | Where-Object { $_.Name -eq $directories[$i]}
}
}
if(!$Project)
{ write-host "File not found" }
else
{ $result = $Project }
}
return $result
}
#Find the function
function global:GetFunctionAsCM {
param([object] $Project,[string] $Path,[string] $rootnamespaceSpace,[string]$partialFileName=$null)
$file = GetFile -Project $Project -Path $Path
$namespaceParts = $rootnamespaceSpace.Split(".")
$codeModel = $file.ContainingProject.CodeModel
$rootnamespace = $namespaceParts[0]
for($i = 0; $i -lt $namespaceParts.Length;$i++) {
if ($codeModel.Kind -eq $null) {
$codeModel = $CodeModel.CodeElements | Where-Object {$_.FullName -eq $rootnamespace}
} elseif ($codeModel.Kind -eq [EnvDTE.vsCMElement]::vsCMElementNamespace) {
$codeModel = $CodeModel.Members | Where-Object {$_.FullName -eq $rootnamespace}
} elseif ($codeModel.Kind -eq [EnvDTE.vsCMElement]::vsCMElementClass) {
if($partialFileName -ne $null -and $codeModel.Parts.length>1) {
$codeModel = $codeModel.Parts | Where-Object {$_.ProjectItem.Name -eq $partialFileName}
}
$codeModel = $codeModel.Children | Where-Object {$_.FullName -eq $rootnamespace}
}
$rootnamespace = "$rootnamespace." + $namespaceParts[$i+1]
}
return $codeModel
}
推荐阅读
- javascript - 如何获得�符号的真实价值?
- c++ - 如何在运行时以最小的开销共享全局常量?
- python - Selenium:使用 WebElement 进行显式等待的预期条件
- linux - if语句在bash中的函数调用后未执行
- tensorflow - 如何跨网络的两个输入分支构建和重用网络?
- javascript - 如何在 NodeJS 中导入匿名闭包
- java - 运行junit表单命令行:initializationError(SLLTest):没有可运行的方法
- c# - 我可以使用 C# 对 VB 代码进行单元测试吗?
- sql - SQL SERVER - 根据一年内的最早日期获取记录
- c - 只有前几个多线程客户端可以从套接字读取响应