暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  2. <Import Project="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.Extensions.props"/>
  3. <ItemGroup>
  4. <RoslynCompilerFiles Include="$(RoslynToolPath)\*">
  5. <Link>roslyn\%(RecursiveDir)%(Filename)%(Extension)</Link>
  6. </RoslynCompilerFiles>
  7. </ItemGroup>
  8. <Target Name="IncludeRoslynCompilerFilesToFilesForPackagingFromProject" BeforeTargets="PipelineCollectFilesPhase" >
  9. <ItemGroup>
  10. <FilesForPackagingFromProject Include="@(RoslynCompilerFiles)">
  11. <DestinationRelativePath>bin\roslyn\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
  12. <FromTarget>IncludeRoslynCompilerFilesToFilesForPackagingFromProject</FromTarget>
  13. <Category>Run</Category>
  14. </FilesForPackagingFromProject>
  15. </ItemGroup>
  16. </Target>
  17. <Target Name="LocateRoslynToolsDestinationFolder" Condition=" '$(RoslynToolsDestinationFolder)' == '' ">
  18. <PropertyGroup>
  19. <RoslynToolsDestinationFolder>$(WebProjectOutputDir)\bin\roslyn</RoslynToolsDestinationFolder>
  20. <RoslynToolsDestinationFolder Condition=" '$(WebProjectOutputDir)' == '' ">$(OutputPath)\roslyn</RoslynToolsDestinationFolder>
  21. </PropertyGroup>
  22. </Target>
  23. <Target Name="CopyRoslynCompilerFilesToOutputDirectory" AfterTargets="CopyFilesToOutputDirectory" DependsOnTargets="LocateRoslynToolsDestinationFolder">
  24. <Copy SourceFiles="@(RoslynCompilerFiles)" DestinationFolder="$(RoslynToolsDestinationFolder)" ContinueOnError="true" SkipUnchangedFiles="true" Retries="0" />
  25. <ItemGroup Condition="'$(MSBuildLastTaskResult)' == 'True'" >
  26. <FileWrites Include="$(RoslynToolsDestinationFolder)\*" />
  27. </ItemGroup>
  28. </Target>
  29. <Target Name="CheckIfShouldKillVBCSCompiler">
  30. <CheckIfVBCSCompilerWillOverride src="$(RoslynToolPath)\VBCSCompiler.exe" dest="$(RoslynToolsDestinationFolder)\VBCSCompiler.exe">
  31. <Output TaskParameter="WillOverride" PropertyName="ShouldKillVBCSCompiler" />
  32. </CheckIfVBCSCompilerWillOverride>
  33. </Target>
  34. <Target Name = "KillVBCSCompilerBeforeCopy" BeforeTargets="CopyRoslynCompilerFilesToOutputDirectory" DependsOnTargets="LocateRoslynToolsDestinationFolder;CheckIfShouldKillVBCSCompiler" >
  35. <KillProcess ProcessName="VBCSCompiler" ImagePath="$(RoslynToolsDestinationFolder)" Condition="'$(ShouldKillVBCSCompiler)' == 'True'" />
  36. </Target>
  37. <Target Name = "KillVBCSCompilerBeforeClean" AfterTargets="BeforeClean" DependsOnTargets="LocateRoslynToolsDestinationFolder">
  38. <KillProcess ProcessName="VBCSCompiler" ImagePath="$(RoslynToolsDestinationFolder)" />
  39. </Target>
  40. <UsingTask TaskName="KillProcess" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
  41. <ParameterGroup>
  42. <ProcessName ParameterType="System.String" Required="true" />
  43. <ImagePath ParameterType="System.String" Required="true" />
  44. </ParameterGroup>
  45. <Task>
  46. <Reference Include="System" />
  47. <Reference Include="System.Management" />
  48. <Using Namespace="System" />
  49. <Using Namespace="System.Linq" />
  50. <Using Namespace="System.Diagnostics" />
  51. <Using Namespace="System.Management" />
  52. <Code Type="Fragment" Language="cs">
  53. <![CDATA[
  54. try
  55. {
  56. foreach(var p in Process.GetProcessesByName(ProcessName))
  57. {
  58. var wmiQuery = "SELECT ProcessId, ExecutablePath FROM Win32_Process WHERE ProcessId = " + p.Id;
  59. using(var searcher = new ManagementObjectSearcher(wmiQuery))
  60. {
  61. using(var results = searcher.Get())
  62. {
  63. var mo = results.Cast<ManagementObject>().FirstOrDefault();
  64. if(mo != null)
  65. {
  66. var path = (string)mo["ExecutablePath"];
  67. var executablePath = path != null ? path : string.Empty;
  68. Log.LogMessage("ExecutablePath is {0}", executablePath);
  69. if(executablePath.StartsWith(ImagePath, StringComparison.OrdinalIgnoreCase))
  70. {
  71. p.Kill();
  72. p.WaitForExit();
  73. Log.LogMessage("{0} is killed", executablePath);
  74. break;
  75. }
  76. }
  77. }
  78. }
  79. }
  80. }
  81. catch (Exception ex)
  82. {
  83. Log.LogWarning(ex.Message);
  84. }
  85. return true;
  86. ]]>
  87. </Code>
  88. </Task>
  89. </UsingTask>
  90. <UsingTask TaskName="CheckIfVBCSCompilerWillOverride" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
  91. <ParameterGroup>
  92. <Src ParameterType="System.String" Required="true" />
  93. <Dest ParameterType="System.String" Required="true" />
  94. <WillOverride ParameterType="System.Boolean" Output="true" />
  95. </ParameterGroup>
  96. <Task>
  97. <Reference Include="System.IO" />
  98. <Code Type="Fragment" Language="cs">
  99. <![CDATA[
  100. WillOverride = false;
  101. try {
  102. WillOverride = File.Exists(Src) && File.Exists(Dest) && (File.GetLastWriteTime(Src) != File.GetLastWriteTime(Dest));
  103. }
  104. catch { }
  105. ]]>
  106. </Code>
  107. </Task>
  108. </UsingTask>
  109. </Project>