【问题标题】:'InitializeComponent' does not exist in the current context当前上下文中不存在“InitializeComponent”
【发布时间】:2018-08-23 08:22:47
【问题描述】:

我正在使用 Roslyn 解析一个非常基本的 WPF 解决方案。我设置了一个诊断程序,发现以下错误:

MainWindow.xaml.cs(25,13):错误 CS0103:名称 当前上下文中不存在“InitializeComponent”

错误 CS5001:程序不包含适合的静态“主要”方法 入口点

知道如何解决这个问题吗?

更新

所以我添加了一个 main 方法,现在我收到以下错误:

App.xaml.cs(20,17):错误 CS1061:“应用”不包含定义 对于'InitializeComponent'并且没有扩展方法 接受“App”类型的第一个参数的“InitializeComponent”可以 被发现(您是否缺少 using 指令或程序集引用?)

MainWindow.xaml.cs(25,13):错误 CS0103:名称 当前上下文中不存在“InitializeComponent”

这里是主要方法

public partial class App : Application
{
    [STAThread]
    public static void Main()
    {
        var app = new App();
        app.InitializeComponent();
        app.Run();
    }
}

【问题讨论】:

  • 看起来你给了它一组不完整的文件来处理。
  • 你有main方法吗?
  • 嗯,App.xaml 被设置为构建动作 ApplicationDefinition,因此应该自动定义主要内容。如果我将构建操作更改为页面,我可以定义自己的 main 方法。
  • 在 WPF 项目中除了编译代码之外还有很多事情要做。在使用 IDE 构建的普通 WPF 项目中很容易看到。之后查看 obj 子目录并注意那里的 .cs 文件。它们包含 Main() 入口点和 InitializeComponent 胶水。 MSBuild 这样做,它运行一个代码生成器,将 .xaml 文件作为输入。考虑到这个先有鸡还是先有蛋的问题,不太确定你想如何继续前进,你为什么要使用 Roslyn 并不明显。将这些 .cs 文件告诉 Roslyn 是一种解决方法。
  • 我用更多错误代码更新了我的问题。我会假设 Roslyn 会处理一个开箱即用的未更改的 hello world wpf 应用程序?

标签: c# roslyn


【解决方案1】:

如果您使用类似于以下的代码加载此解决方案:

var ws = MSBuildWorkspace.Create();
var solution = await ws.OpenSolutionAsync(path);

那么问题是您没有分析应该从 .xaml 文件生成的代码。这可以通过将上面的代码更改为:

var properties = new Dictionary<string, string> { ["DesignTimeBuild"] = "true" };
var ws = MSBuildWorkspace.Create(properties);
var solution = await ws.OpenSolutionAsync(path);

有关详细信息,另请参阅https://github.com/dotnet/roslyn/issues/2779

【讨论】:

    猜你喜欢
    • 2011-10-19
    • 2016-06-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多