繁体   English   中英

如何在Powershell中对文件更改运行MSBuild任务

[英]How can I run an MSBuild task in Powershell on file changed

我正在尝试在PowerShell中编写类似CSharp监视任务的内容。 所以,我想发生的是当CSharp文件在某个目录中更改时,它试图找到csproj文件并启动构建。

这是我目前所拥有的

    function Watch-CSharp-Files() {
    set-location "D:\path\to\csharp\files\"

    $originalPath = Get-Location

    Write-host "Welcome to The Watcher. It keeps track of changing files in this solution directory (including subdirectories) and triggers a build when something changes..."

    $existingEvents = get-eventsubscriber
    foreach ($item in $existingEvents) {
        Unregister-event -SubscriptionId $item.SubscriptionId
        write-host "Unsubscribed existing event:" $item.Action.Name
    }

    $folder = get-location
    $filter = '*.*'
    $watcher = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $true;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'} 

    Register-ObjectEvent $watcher Changed -SourceIdentifier FileChanged -Action {
        $path = $Event.SourceEventArgs.FullPath  

        if ($path -match "(\.cs~|.cs$)") {
            write-host "file changed: $path"
            Invoke-Expression -Command "Find-And-Build-Project '$path'"
        }
    }
}

function Find-And-Build-Project([string]$path) {
    write-host "BUILD PROJECT REPORTING FOR DUTY"

    $pathParts = "$path".Split("\\")
    $end = $pathParts.Count - 2 # skip the file name to the parent directory
    $testPath = $pathParts[0..$end] -join "\"
    write-host "testing path $testPath"
    $csproj = Get-ChildItem -path $testPath *.csproj

    For ($i = 0; $i -le 10; $i++) {    
        $newEnd = $end - $i
        $newPath = $pathParts[0..$newEnd] -join "\"
        $csproj = Get-ChildItem -path $newPath *.csproj
        write-host "$i. trying: $newPath, csproj: $csproj"
        if ($csproj) {
            write-host "found on $i, at $newPath, $csproj"
            break
        }
    }

    write-host "Ready: $newPath\$csproj"
    $msbuild = "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe"
    write-host "trying to MSBUILD"    
    & $msbuild ("$newPath\$csproj", "/target:Build", "/p:configuration=debug", "/verbosity:n")    
}

Watch-CSharp-Files

我发现的是,在Find-And-Build-Project函数中, & $msbuild不会被调用。 但是,我不明白为什么。

有任何想法吗?

好的,这对我有所帮助: https : //stackoverflow.com/a/37724701/1326235

该脚本以保存的.cs文件(或Visual Studio似乎创建的.cs~tmp[0-9].cs )为目标,然后在目录树中搜索以找到.csproj文件并进行构建。

我将该模块发布到了PowerShell画廊,称为CSharp-Watch

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM