Esempio n. 1
0
        private void AdditionalFileAction(AdditionalFileAnalysisContext context)
        {
            if (context.AdditionalFile.Path.EndsWith(".manifest", StringComparison.OrdinalIgnoreCase))
            {
                VerifyAppManifest(context, context.AdditionalFile);
            }

            // TODO: look for app.config?
        }
Esempio n. 2
0
        private static void VerifyAppManifest(AdditionalFileAnalysisContext context, AdditionalText appManifest)
        {
            SourceText?appManifestXml = appManifest.GetText(context.CancellationToken);

            if (appManifestXml is null)
            {
                return;
            }

            // If the manifest file is corrupt - let the build fail
            XmlDocument doc = new();

            try
            {
                doc.LoadXml(appManifestXml.ToString());
            }
            catch
            {
                // Invalid xml, don't care
                return;
            }

            XmlNamespaceManager nsmgr = new(doc.NameTable);

            nsmgr.AddNamespace("v1", "urn:schemas-microsoft-com:asm.v1");
            nsmgr.AddNamespace("v3", "urn:schemas-microsoft-com:asm.v3");
            nsmgr.AddNamespace("v3ws", "http://schemas.microsoft.com/SMI/2005/WindowsSettings");

            if (doc.DocumentElement.SelectSingleNode("//v3:application/v3:windowsSettings/v3ws:dpiAware", nsmgr) is not null)
            {
                switch (context.Compilation.Language)
                {
                case LanguageNames.CSharp:
                    context.ReportDiagnostic(Diagnostic.Create(DiagnosticDescriptors.s_migrateHighDpiSettings_CSharp,
                                                               Location.None,
                                                               appManifest.Path,
                                                               ApplicationConfig.PropertyNameCSharp.HighDpiMode));
                    break;

                case LanguageNames.VisualBasic:
                    context.ReportDiagnostic(Diagnostic.Create(DiagnosticDescriptors.s_migrateHighDpiSettings_VB,
                                                               Location.None,
                                                               appManifest.Path,
                                                               ApplicationConfig.PropertyNameVisualBasic.HighDpiMode));
                    break;

                default:
                    throw new NotSupportedException();
                }
            }
        }
 /// <summary>
 /// Creates a new instance of the <see cref="ReadonlyContextualDiagnosticReceiver{T}"/> class that accepts only <see cref="AdditionalFileAnalysisContext"/>.
 /// </summary>
 /// <param name="context">Context of this <see cref="ReadonlyContextualDiagnosticReceiver{T}"/>.</param>
 public static ReadonlyContextualDiagnosticReceiver <AdditionalFileAnalysisContext> AdditionalFile(AdditionalFileAnalysisContext context)
 {
     return(new ReadonlyContextualDiagnosticReceiver <AdditionalFileAnalysisContext>((in AdditionalFileAnalysisContext context, Diagnostic diag) => context.ReportDiagnostic(diag), context));
 }
Esempio n. 4
0
 private void AnalyzeAdditionalFile(AdditionalFileAnalysisContext context)
 {
     OnAbstractMember("AdditionalFile");
     OnOptions(context.Options);
 }
Esempio n. 5
0
 /// <summary>
 /// Creates a new instance of the <see cref="ReadonlyContextualLoggableGeneratorDiagnosticReceiver{T}"/> class that accepts only <see cref="AdditionalFileAnalysisContext"/>.
 /// </summary>
 /// <param name="generator">Target <see cref="LoggableSourceGenerator"/>.</param>
 /// <param name="context">Context of this <see cref="ReadonlyContextualLoggableGeneratorDiagnosticReceiver{T}"/>.</param>
 public static ReadonlyContextualLoggableGeneratorDiagnosticReceiver <AdditionalFileAnalysisContext> AdditionalFile(LoggableSourceGenerator generator, AdditionalFileAnalysisContext context)
 {
     return(new ReadonlyContextualLoggableGeneratorDiagnosticReceiver <AdditionalFileAnalysisContext>(generator, (in AdditionalFileAnalysisContext context, Diagnostic diag) => context.ReportDiagnostic(diag), context));
 }