private static void SetResolverForContext(EvaluationContext context, SdkResolver resolver) { var sdkService = (SdkResolverService)context.SdkResolverService; sdkService.InitializeForTests(null, new List <SdkResolver> { resolver }); }
private void SetResolverState(int submissionId, SdkResolver resolver, object state) { // Do not set state for resolution requests that are not associated with a valid build submission ID if (submissionId != BuildEventContext.InvalidSubmissionId) { ConcurrentDictionary <SdkResolver, object> resolverState = _resolverStateBySubmission.GetOrAdd(submissionId, new ConcurrentDictionary <SdkResolver, object>(NativeMethodsShared.GetLogicalCoreCount(), _resolvers.Count)); resolverState.AddOrUpdate(resolver, state, (sdkResolver, obj) => state); } }
private void SetResolverState(int submissionId, SdkResolver resolver, object state) { // Do not set state for resolution requests that are not associated with a valid build submission ID if (submissionId != BuildEventContext.InvalidSubmissionId) { ConcurrentDictionary <SdkResolver, object> resolverState = _resolverStateBySubmission.GetOrAdd(submissionId, new ConcurrentDictionary <SdkResolver, object>(Environment.ProcessorCount, _resolvers.Count)); resolverState.AddOrUpdate(resolver, state, (sdkResolver, obj) => state); } }
private void SetResolverState(int submissionId, SdkResolver resolver, object state) { // Do not set state for resolution requests that are not associated with a valid build submission ID if (submissionId != BuildEventContext.InvalidSubmissionId) { ConcurrentDictionary <SdkResolver, object> resolverState = _resolverStateBySubmission.GetOrAdd( submissionId, _ => new ConcurrentDictionary <SdkResolver, object>( NativeMethodsShared.GetLogicalCoreCount(), ChangeWaves.AreFeaturesEnabled(ChangeWaves.Wave17_4) ? _specificResolversManifestsRegistry.Count + _generalResolversManifestsRegistry.Count : _resolversList.Count)); resolverState.AddOrUpdate(resolver, state, (sdkResolver, obj) => state); } }
public static ProjectOptions CreateProjectOptionsWithResolver(SdkResolver resolver) { var context = EvaluationContext.Create(EvaluationContext.SharingPolicy.Isolated); var sdkService = (SdkResolverService)context.SdkResolverService; sdkService.InitializeForTests(null, new List <SdkResolver>() { resolver }); return(new ProjectOptions { EvaluationContext = context }); }
private object GetResolverState(int submissionId, SdkResolver resolver) { // Do not fetch state for resolution requests that are not associated with a valid build submission ID if (submissionId != BuildEventContext.InvalidSubmissionId) { ConcurrentDictionary <SdkResolver, object> resolverState; if (_resolverStateBySubmission.TryGetValue(submissionId, out resolverState)) { object state; if (resolverState.TryGetValue(resolver, out state)) { return(state); } } } return(null); }
protected override ConfigFile LoadConfig(ConfigFile config) { config = base.LoadConfig(config); var sdkResolver = new SdkResolver(SharpGenLogger); Log.LogMessage("Resolving SDKs..."); foreach (var cfg in config.ConfigFilesLoaded) { Log.LogMessage($"Resolving SDK for Config {cfg}"); foreach (var sdk in cfg.Sdks) { Log.LogMessage($"Resolving {sdk.Name}: Version {sdk.Version}"); foreach (var directory in sdkResolver.ResolveIncludeDirsForSdk(sdk)) { Log.LogMessage($"Resolved include directory {directory}"); cfg.IncludeDirs.Add(directory); } } } return(config); }
/// <summary> /// Run CodeGenerator /// </summary> public void Run() { Logger.Progress(0, "Starting code generation..."); try { var consumerConfig = new ConfigFile { Id = ConsumerBindMappingConfigId }; var(filesWithIncludes, filesWithExtensions) = Config.GetFilesWithIncludesAndExtensionHeaders(); var configsWithIncludes = new HashSet <ConfigFile>(); foreach (var config in Config.ConfigFilesLoaded) { if (filesWithIncludes.Contains(config.Id)) { configsWithIncludes.Add(config); } } var sdkResolver = new SdkResolver(Logger); foreach (var config in Config.ConfigFilesLoaded) { foreach (var sdk in config.Sdks) { config.IncludeDirs.AddRange(sdkResolver.ResolveIncludeDirsForSdk(sdk)); } } var cppHeadersUpdated = GenerateHeaders(filesWithExtensions, configsWithIncludes, consumerConfig); if (Logger.HasErrors) { Logger.Fatal("Failed to generate C++ headers."); } CppModule group; var groupFileName = $"{Config.Id}-out.xml"; if (cppHeadersUpdated.Count != 0) { var resolver = new IncludeDirectoryResolver(Logger); resolver.Configure(Config); var castXml = new CastXml(Logger, resolver, CastXmlExecutablePath, Array.Empty <string>()) { OutputPath = IntermediateOutputPath, }; group = GenerateExtensionHeaders(filesWithExtensions, cppHeadersUpdated, castXml); group = ParseCpp(castXml, group); if (IsGeneratingDoc) { ApplyDocumentation(DocumentationCache, group); } } else { Logger.Progress(10, "Config files unchanged. Read previous C++ parsing..."); if (File.Exists(Path.Combine(IntermediateOutputPath, groupFileName))) { group = CppModule.Read(Path.Combine(IntermediateOutputPath, groupFileName)); } else { group = new CppModule(); } } // Save back the C++ parsed includes group.Write(Path.Combine(IntermediateOutputPath, groupFileName)); Config.ExpandDynamicVariables(Logger, group); var(docAggregator, asm) = ExecuteMappings(group, consumerConfig); asm.Write(Path.Combine(IntermediateOutputPath, "Assembly.xml")); asm = CsAssembly.Read(Path.Combine(IntermediateOutputPath, "Assembly.xml")); GenerateConfigForConsumers(consumerConfig); GenerateCode(docAggregator, asm, new ExternalDocCommentsReader(ExternalDocumentation)); if (Logger.HasErrors) { Logger.Fatal("Code generation failed"); } // Update Checkfile for assembly File.WriteAllText(_assemblyCheckFile, ""); File.SetLastWriteTime(_assemblyCheckFile, _assemblyDatetime); // Update Checkfile for all config files File.WriteAllText(_allConfigCheck, ""); File.SetLastWriteTime(_allConfigCheck, DateTime.Now); } finally { Logger.Progress(100, "Finished"); } }
public SdkResolverException(string resourceName, SdkResolver resolver, SdkReference sdk, Exception innerException, params string[] args) : base(string.Format(ResourceUtilities.GetResourceString(resourceName), args), innerException) { Resolver = resolver; Sdk = sdk; }