You've already forked linux-packaging-mono
							
							
		
			
	
	
		
			78 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			78 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|   | namespace Microsoft.Build.Tasks.Xaml | |||
|  | { | |||
|  |     using System; | |||
|  |     using System.Globalization; | |||
|  |     using System.Runtime; | |||
|  |     using System.Runtime.Remoting.Lifetime; | |||
|  |     using XamlBuildTask; | |||
|  | 
 | |||
|  |     internal static class XamlBuildTaskLeaseLifetimeHelper | |||
|  |     { | |||
|  |         const string RemotingLeaseLifetimeInMinutesEnvironmentVariableName = "XamlBuildTaskTimeoutInMinutes"; | |||
|  | 
 | |||
|  |         // In order to take advantage of the XamlBuildTaskRemotingLeaseLifetimeInMinutes environment variable from an MSBuild | |||
|  |         // project file (e.g. csproj file), the following needs to be added to that project file: | |||
|  |         // | |||
|  |         // After the initial "<Project ..." line: | |||
|  |         // <UsingTask TaskName="MySetEnv" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" > | |||
|  |         //   <ParameterGroup> | |||
|  |         //     <Name Required="true" /> | |||
|  |         //     <Value Required="false" /> | |||
|  |         //   </ParameterGroup> | |||
|  |         //   <Task> | |||
|  |         //     <Code Type="Fragment" Language="cs">System.Environment.SetEnvironmentVariable(Name, Value);</Code> | |||
|  |         //   </Task> | |||
|  |         // </UsingTask> | |||
|  |         // | |||
|  |         // And at the end of the project file, before the closing </Project> : | |||
|  |         // | |||
|  |         // <Target Name="BeforeBuild"> | |||
|  |         //   <MySetEnv Name="XamlBuildTaskTimeoutInMinutes" Value="24" /> | |||
|  |         // </Target> | |||
|  |         // <Target Name="AfterBuild"> | |||
|  |         //   <MySetEnv Name="XamlBuildTaskRemotingLeaseLifetimeInMinutes" Value="" /> | |||
|  |         // </Target> | |||
|  |         // | |||
|  |         // This example uses a task name of "MySetEnv", but it that name could be anything desired. | |||
|  |         // It also sets the timeout to 24 minutes, as defined as the Value specified to the MySetEnv task. | |||
|  |         // The AfterBuild target is not required, but is probably desired so that the environment variable setting | |||
|  |         // does not persist after the processing of this particular project file. | |||
|  |         // The valid values for the environment variable are numbers between 1 and 2147483647 inclusive | |||
|  |         // (positive 32-bit integers). Any other value will result in no change to the lease lifetime. | |||
|  |         internal static void SetLeaseLifetimeFromEnvironmentVariable(ILease lease) | |||
|  |         { | |||
|  |             // We can only change the lease lifetime if we have an ILease and it is still in the Initial state. | |||
|  |             if ((lease != null) && (lease.CurrentState == LeaseState.Initial)) | |||
|  |             { | |||
|  |                 try | |||
|  |                 { | |||
|  |                     string remotingLeaseLifetimeInMinutesStringValue = Environment.GetEnvironmentVariable(RemotingLeaseLifetimeInMinutesEnvironmentVariableName); | |||
|  |                     if (!string.IsNullOrEmpty(remotingLeaseLifetimeInMinutesStringValue)) | |||
|  |                     { | |||
|  |                         int remotingLeaseLifetimeInMinutes = -1; | |||
|  |                         if (Int32.TryParse(remotingLeaseLifetimeInMinutesStringValue, NumberStyles.Integer, CultureInfo.InvariantCulture, out remotingLeaseLifetimeInMinutes)) | |||
|  |                         { | |||
|  |                             // revert to the defauilt if the number specified is less than or equal to 0. | |||
|  |                             if (remotingLeaseLifetimeInMinutes > 0) | |||
|  |                             { | |||
|  |                                 lease.InitialLeaseTime = TimeSpan.FromMinutes(remotingLeaseLifetimeInMinutes); | |||
|  |                                 lease.RenewOnCallTime = TimeSpan.FromMinutes(remotingLeaseLifetimeInMinutes); | |||
|  |                             } | |||
|  |                         } | |||
|  |                     } | |||
|  |                 } | |||
|  |                 catch (Exception ex) | |||
|  |                 { | |||
|  |                     // simply ignore any exceptions that might have occurred and go with the default. We can't log it because | |||
|  |                     // we aren't initialized enough at this point. | |||
|  |                     if (Fx.IsFatal(ex)) | |||
|  |                     { | |||
|  |                         throw; | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  |     } | |||
|  | } | |||
|  | 
 |