2017-04-05 1 views
-2

J'ai développé le code suivant pour générer des fichiers dll à l'aide de la bibliothèque Microsoft.CodeAnalysis.Emit. Le code génère des fichiers dll pour les projets C#. Cependant, il ne réussit pas à générer des projets Visual Basic. Il jette beaucoup d'erreurs de compilation pour les projets VB qui se construisent avec succès en utilisant l'IDE VS. S'il vous plaît voir les erreurs lancées pour un projet d'application Windows de base. Existe-t-il des options de compilateur spécifiques pour les projets VB? S'il vous plaît aviser comment résoudre ceci.Problème de compilateur dans le projet Visual Basic avec Microsoft.CodeAnalysis.Emit

version package Microsoft.CodeAnalysis: 1.3.1

class Program 
{ 
    static void Main(string[] args) 
    { 
     const string UnitTestArtifactFolder = @"c:\VSUnitTest"; 
     string SolutionPath = @"C:\B\VBWinApp\VBWinApp\VBWinApp.vbproj"; 
     CompileProject(SolutionPath, UnitTestArtifactFolder); 
    } 

    private static void CompileProject(string projectFilePath, string outputFolderPath) 
    { 
     using (var workspace = MSBuildWorkspace.Create()) 
     { 
      var project = workspace.OpenProjectAsync(projectFilePath).Result; 
      Emit(project, outputFolderPath).Wait(); 
     } 
    } 

    private static async Task Emit(Project project, string outputFolderPath) 
    { 
     Directory.CreateDirectory(outputFolderPath); 
     var options = GetCompilationOptions(project); 
     var compilation = await project.GetCompilationAsync(); 
     compilation = compilation.WithOptions(options); 
     var outputFilePath = Path.Combine(outputFolderPath, Path.GetFileName(project.OutputFilePath)); 
     var pdbFilePath = Path.ChangeExtension(outputFilePath, "pdb"); 
     //LogInfo("Compiling the project..."); 
     var compilationStatus = compilation.Emit(outputFilePath, pdbPath: pdbFilePath); 

     if (!compilationStatus.Success) 
     { 
      //LogError(compilationStatus.Diagnostics.First(k => k.WarningLevel == 0)); 
     } 
     else 
     { 
      // LogInfo("Compilation successful."); 
     } 
    } 

    private static CompilationOptions GetCompilationOptions(Project project) 
    { 
     if (project.Language == "C#") 
     { 
      //LogInfo("Using C# Compilation Options"); 
      return new CSharpCompilationOptions 
      (OutputKind.DynamicallyLinkedLibrary, optimizationLevel: OptimizationLevel.Debug); 
     } 
     else if (project.Language == "Visual Basic") 
     { 
      //LogInfo("Using Visual Basic Compilation Options"); 
      return new VisualBasicCompilationOptions 
       (OutputKind.DynamicallyLinkedLibrary, optimizationLevel: OptimizationLevel.Debug); 
     } 
     else 
     { 
      //Throw if the language is other than C# or VB 
      throw new InvalidOperationException("Unsupported Language."); 
     } 
    } 
} 

erreurs de compilation sur l'application de base de Windows.

[0] C: \ B \ VBWinApp \ VBWinApp \ My Project \ Application.Designer.vb (34): erreur BC30284: sous 'OnCreateMainForm' ne peut être déclarée 'Dérogations' parce qu'il ne remplacer un sous-marin dans une classe de base. Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [1] C: \ B \ VBWinApp \ VBWinApp \ Mon Projet \ Settings.Designer.vb (67): erreur BC30002: Tapez 'Global.VBWinApp. My.MySettings 'n'est pas défini. Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [2] C: \ B \ VBWinApp \ VBWinApp \ mon projet \ Settings.Designer.vb (69): erreur BC30456: 'VBWinApp' n'est pas un membre de 'Global'. Microsoft.CodeAnalysis.Diagnostic {} Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic [3] C: \ B \ VBWinApp \ VBWinApp \ My Project \ Application.Designer.vb (26): erreur BC30057: Trop d'arguments « Public Surcharge Sub Nouveau() '. Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [4] C: \ B \ VBWinApp \ VBWinApp \ mon projet \ Application.Designer.vb (27): erreur BC30456: 'IsSingleInstance' n'est pas un membre de 'MyApplication'. Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [5] C: \ B \ VBWinApp \ VBWinApp \ mon projet \ Application.Designer.vb (28): erreur BC30456: 'EnableVisualStyles' n'est pas un membre de 'MyApplication'. Microsoft.CodeAnalysis.Diagnostic {} Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic [6] C: \ B \ VBWinApp \ VBWinApp \ My Project \ Application.Designer.vb (29): erreur BC30456: 'SaveMySettingsOnExit' est pas un membre de 'MyApplication'. Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [7] C: \ B \ VBWinApp \ VBWinApp \ mon projet \ Application.Designer.vb (30): erreur BC30456: 'ShutDownStyle' n'est pas un membre de 'MyApplication'. Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [8] C: \ B \ VBWinApp \ VBWinApp \ mon projet \ Application.Designer.vb (35): erreur BC30456: 'MainForm' n'est pas un membre de 'MyApplication'. Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [9] C: \ B \ VBWinApp \ VBWinApp \ mon projet \ Application.Designer.vb (35): erreur BC30456: 'VBWinApp' n'est pas un membre de 'Global'. Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [10] C: \ B \ VBWinApp \ VBWinApp \ mon projet \ Settings.Designer.vb (33): erreur BC30456: 'Application' n'est pas membre de 'Mon'. Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [11] C: \ B \ VBWinApp \ VBWinApp \ mon projet \ Settings.Designer.vb (47): erreur BC30456: 'Application' n'est pas un membre de 'Mon'. Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [12] C: \ B \ VBWinApp \ VBWinApp \ mon projet \ AssemblyInfo.vb (1): masqué BC50001: instruction d'importation inutilisée. Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [13] C: \ Utilisateurs \ xxxxx \ AppData \ Local \ Temp.NETFramework, Version = v4.5.2.AssemblyAttributes.vb (4) : caché BC50001 : Instruction d'importation inutilisée . Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [14] C: \ Utilisateurs \ xxxxx \ AppData \ Local \ Temp.NETFramework, Version = v4.5.2.AssemblyAttributes.vb (5) : masqué BC50001 : Instruction d'importation inutilisée . Microsoft.CodeAnalysis.Diagnostic {} Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic

+0

Il est presque impossible de vous aider sans voir le code VB, mais il semble qu'il vous manque des références à certains assemblages. Vous avez utilisé le mot clé 'Overrides' avec la méthode' OnCreateMainForm' mais la classe de base n'a apparemment pas cette méthode. Puisque vous n'avez montré aucun code, c'est juste une supposition. –

+0

Le projet VB est une application Windows Forms sans aucune personnalisation. – Bandara

+0

L'IDE VB.NET génère automatiquement un ensemble de codes pour prendre en charge les fonctionnalités Mon espace de noms et Cadre d'application. C'est le code dont il se plaint. Sinon très difficile à voir, c'est bien caché. Pas exactement un projet DLL. Considérez la sagesse discutable de la mise en œuvre de votre propre IDE, vous en avez déjà un. –

Répondre

4

Le problème est que la définition des options de par compilation, vous jetez toutes les options qui viennent du projet. Si vous ne faites que commenter la ligne compilation = compilation.WithOptions(options);, la compilation devrait aboutir (du moins pour un projet VB.NET WinForms nouvellement créé).

+0

Merci svick, Il semble que j'ai remplacé les options du compilateur par défaut du projet. J'ai commenté le code comme vous l'avez suggéré et cela a fonctionné. – Bandara