【问题标题】:Compiling pages with custom extension (for ex .custx) as if they were .xaml files in Visual Studio使用自定义扩展名(例如 .custx)编译页面,就像它们是 Visual Studio 中的 .xaml 文件一样
【发布时间】:2010-10-04 09:34:13
【问题描述】:

在 VS 包(Visual Studio 可扩展性)中,我使用 XamlLanguageService 注册了一个自定义扩展(例如“.custx”),因此在 Visual Studio 中,当用户打开 .custx 时,它会在 Xaml 设计器/编辑器中打开就像一个 .xaml 文件。

但是,当我将其编译为“页面”(BuildAction) 时,WINFX 目标/编译器会出错并显示以下错误消息。

MySample\Page1.custx:错误:标记文件无效。指定扩展名为 .xaml 的源标记文件。

我正在寻找一种解决方案,以便将 .custx 页面编译为页面,就像 WPF 应用程序中的 .xaml 页面一样

非常感谢任何帮助

【问题讨论】:

    标签: wpf visual-studio xaml vsx extensibility


    【解决方案1】:

    我建议简单地重用 XAML 文件扩展名(没有办法在目标中解决此检查)。您是否有理由需要自己的文件扩展名?

    【讨论】:

    • 是的,很多事情都依赖于自定义扩展 - 处理程序、特殊设计器等,因此自定义扩展是前进的方向
    • 自定义设计器不需要您自己的文件扩展名。 VS 支持多个编辑器/设计器注册单个文件扩展名(具有优先级)的概念。然后,在 IVsEditorFactory 的 CreateEditorInstance 方法中,编辑器工厂可以检查被请求打开的文档以确保其兼容。这是 Windows 工作流设计器在 VS 2010 中的工作方式。他们也注册 .XAML,但首先检查文档以确保它是工作流文档(而不是 WPF 或其他某种 XAML)。
    • 这应该被支持(即使它不被支持)。我遇到了同样的事情。你找到解决方案了吗?
    • 阻止此操作的主要问题是编译 XAML 的 MSBuild 任务->BAML 实际上检查文件扩展名是否为“.xaml”。如果它不完全是“.xaml”,它甚至不会尝试处理该文件。
    • 感谢您的 cmets,看来没有办法做到这一点,使用自定义设计器作为替代设计器可能是一种选择。您提到的其他选项是将其称为 .xaml
    【解决方案2】:

    此问题的修复非常简单。基本上,我打赌您正在使用自定义构建操作,并且您将其设置为这样的整数:

    Property 属性 = projectItem.Properties.Item("BuildAction"); 属性.值 = 4; //0-3 保留,自定义操作将是 4 或更大。

    这些整数值会因机器和项目类型而变化...所以这个错误可能是由于 ItemType 被设置为 ApplicationDefinition。

    要解决此问题,您需要将 ItemType 设置为您的自定义操作,如下所示:

    projectItem.Properties.Item("ItemType").Value = "MyCustomActionName"。

    谢谢

    -布莱克·涅米斯基

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2018-10-11
      相关资源
      最近更新 更多