1515 <Target Name =" CopyRoslynCompilerFilesToOutputDirectory" AfterTargets =" CopyFilesToOutputDirectory" >
1616 <Copy SourceFiles =" @(RoslyCompilerFiles)" DestinationFolder =" $(OutDir)roslyn" ContinueOnError =" true" SkipUnchangedFiles =" true" />
1717 </Target >
18+ <Target Name = " KillVBCSCompiler" BeforeTargets =" _CopyOutOfDateSourceItemsToOutputDirectory" >
19+ <KillProcess ProcessName =" VBCSCompiler" ImagePath =" $(MSBuildProjectDirectory)" />
20+ </Target >
21+ <UsingTask TaskName =" KillProcess" TaskFactory =" CodeTaskFactory" AssemblyFile =" $(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
22+ <ParameterGroup >
23+ <ProcessName ParameterType =" System.String" Required =" true" />
24+ <ImagePath ParameterType =" System.String" Required =" true" />
25+ </ParameterGroup >
26+ <Task >
27+ <Reference Include =" System" />
28+ <Reference Include =" System.Management" />
29+ <Using Namespace =" System" />
30+ <Using Namespace =" System.Linq" />
31+ <Using Namespace =" System.Diagnostics" />
32+ <Using Namespace =" System.Management" />
33+ <Code Type =" Fragment" Language =" cs" >
34+ <![CDATA[
35+ try
36+ {
37+ foreach(var p in Process.GetProcessesByName(ProcessName))
38+ {
39+ var wmiQuery = "SELECT ProcessId, ExecutablePath FROM Win32_Process WHERE ProcessId = " + p.Id;
40+ using(var searcher = new ManagementObjectSearcher(wmiQuery))
41+ {
42+ using(var results = searcher.Get())
43+ {
44+ var mo = results.Cast<ManagementObject>().FirstOrDefault();
45+ Log.LogMessage("ExecutablePath is {0}", (string)mo["ExecutablePath"]);
46+ if(mo != null && string.Compare((string)mo["ExecutablePath"], ImagePath, StringComparison.OrdinalIgnoreCase) > 0)
47+ {
48+ p.Kill();
49+ Log.LogMessage("{0} is killed", (string)mo["ExecutablePath"]);
50+ break;
51+ }
52+ }
53+ }
54+ }
55+ }
56+ catch (Exception ex)
57+ {
58+ Log.LogErrorFromException(ex);
59+ }
60+ return true;
61+ ]]>
62+ </Code >
63+ </Task >
64+ </UsingTask >
1865</Project >
0 commit comments