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
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. –
Le projet VB est une application Windows Forms sans aucune personnalisation. – Bandara
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. –