我开发了以下代码以使用Microsoft.CodeAnalysis.Emit库生成dll文件。该代码成功生成C#项目的dll文件。但是,它不能成功构建Visual Basic项目。它会为使用VS IDE成功构建的VB项目引发大量编译器错误。请参阅基本Windows应用程序项目引发的错误。 VB项目有没有特定的编译器选项?请咨询如何解决这个问题。使用Microsoft.CodeAnalysis.Emit的Visual Basic项目中的编译器问题
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.");
}
}
}
上基本的Windows应用程序编译器错误。
[0] C:\ B \ VBWinApp \ VBWinApp \我的项目\ Application.Designer.vb(34): 错误BC30284:子 'OnCreateMainForm' 不能声明为 '覆盖' 因为它不覆盖基类 类中的一个子类。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [1] C:\ B \ VBWinApp \ VBWinApp \ My Project \ Settings.Designer.vb(67):error BC30002:Type'Global.VBWinApp。 My.MySettings'不是 定义的。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [2] C:\ B \ VBWinApp \ VBWinApp \ My Project \ Settings.Designer.vb(69):error BC30456:'VBWinApp'is not a 'Global'的成员。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [3] C:\ B \ VBWinApp \ VBWinApp \ My Project \ Application.Designer.vb(26): 错误BC30057:太多的公共参数过载Sub New()'。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [4] C:\ B \ VBWinApp \ VBWinApp \ My Project \ Application.Designer.vb(27): 错误BC30456:'IsSingleInstance'不是 'MyApplication'的成员。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [5] C:\ B \ VBWinApp \ VBWinApp \ My Project \ Application.Designer.vb(28): 错误BC30456:'EnableVisualStyles'is not a 'MyApplication'的成员。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [6] C:\ B \ VBWinApp \ VBWinApp \ My Project \ Application.Designer.vb(29): 错误BC30456:'SaveMySettingsOnExit'不是 'MyApplication'的成员。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [7] C:\ B \ VBWinApp \ VBWinApp \ My Project \ Application.Designer.vb(30): 错误BC30456:'ShutDownStyle'不是 'MyApplication'的成员。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [8] C:\ B \ VBWinApp \ VBWinApp \ My Project \ Application.Designer.vb(35): 错误BC30456:'MainForm'不是 'MyApplication'的成员。 Microsoft.CodeAnalysis.Diagnostic 错误BC30456:VBWinApp不是一个 'Global'的成员。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [10] C:\ B \ VBWinApp \ VBWinApp \ My Project \ Settings.Designer。vb(33):错误 BC30456:'应用程序'不是 '我的'的成员。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [11] C:\ B \ VBWinApp \ VBWinApp \ My Project \ Settings.Designer.vb(47):error BC30456:'Application'is not a我的' 成员。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [12] C:\ B \ VBWinApp \ VBWinApp \ My Project \ AssemblyInfo.vb(1):隐藏 BC50001:未使用的导入语句。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [13] C:\ Users \ xxxxx \ AppData \ Local \ Temp.NETFramework,Version = v4.5.2.AssemblyAttributes.vb(4) :hidden BC50001 :未使用的进口 声明。 Microsoft.CodeAnalysis.Diagnostic {Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic} [14] C:\ Users \ xxxxx \ AppData \ Local \ Temp.NETFramework,Version = v4.5.2.AssemblyAttributes.vb(5) :hidden BC50001 :未使用的进口 声明。 Microsoft.CodeAnalysis.Diagnostic {} Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic
几乎不可能在没有看到VB代码的情况下帮助你,但看起来你可能缺少对某些程序集的引用。你已经使用'Overrides'关键字和'OnCreateMainForm'方法,但是基类显然没有这个方法。因为你没有显示任何只是猜测的代码。 –
VB项目是一个没有任何定制的Windows窗体应用程序。 – Bandara
VB.NET IDE自动生成一堆代码以支持My命名空间和应用程序框架功能。这是它所抱怨的代码。否则很难看,它很好隐藏。不完全是一个DLL项目。考虑实现你自己的IDE的可疑智慧,你已经有了。 –