在保存

时间:2018-03-22 13:13:01

标签: c# .net wpf visual-studio msbuild

在我添加新控件后的.xaml文件中,我能够为xaml.cs文件引用它,因为VS非常友好,可以在{{{{}}中为它生成C#代码1}}文件。

例如

在MainWindow.xaml中我添加

g.i.cs

我可以从MainWindow.xaml.cs访问它,如

<Grid>
    <Button x:Name="Test"/>
</Grid>

因为VS在包含

的obj文件夹中生成了MainWindow.g.i.cs
this.Test.Content = "TestButton";

我可以使用msbuild为自定义文件internal System.Windows.Controls.Button Test; 提供完全相同的行为,该文件是.xyz文件的设计者视图。我已经创建了一个msbuild目标,可以在构建和项目加载时重新生成.cs个文件,但我无法在文件保存上执行相同操作

现在我的问题:

  1. VS如何在保存时重新生成.cs
  2. 这是VS功能还是msbuild功能?
  3. 我可以在保存时触发增量构建吗?
  4. 更新

    我还浏览了一个WPF g.i.cs,它使用了与类库C#项目相同的.csproj文件。我可以发现的唯一区别是.targetsDependentUpon项元数据

1 个答案:

答案 0 :(得分:1)

  
      
  1. VS如何在保存时重新生成g.i.cs?
  2.   

AFAIK,Visual Studio调用XAML编译器xamlc.exe来编译XAML文件,在保存时重新生成g.i.cs

查看此博客Understanding In and Out of XAML in WPF

在博客中,作者说XAML的编译分两步进行:

  

步骤1.第一步是使用xamlc.exe编译器将XAML文件编译为BAML。例如,如果我们的项目包含文件名Window1.xaml,编译器将创建一个名为Window1.baml的临时文件并将其放在obj \ Debug子文件夹中(在我们的项目文件夹中)。同时,使用我们选择的语言为我们的窗口创建一个分部类。例如,如果我们使用C#,编译器将在obj \ Debug文件夹中创建一个名为Window1.g.cs的文件。 g代表生成。

     

步骤2.当XAML到BAML编译阶段完成时,Visual   Studio使用适当的语言编译器来编译我们的代码和   生成的部分类文件。在C#应用程序的情况下,   它是处理此任务的csc.exe编译器。编译后的代码   成为单个程序集Window1.exe)和每个窗口的BAML是   作为单独的资源嵌入。

  
      
  1. 这是VS功能还是msbuild功能?
  2.   

这应该是Visual Studio功能。如上所述,Visual Studio调用XAML编译器xamlc.exe来编译保存时的.xaml文件。 Visual Studio将调用MSBuild将这些文件编译为构建上的.exe / .dll 。此外,当你保存不构建项目时,你可以打开你的任务管理器,没有MSBuild.exe存在,只有当你构建项目时,它才会出现。所以这应该是Visual Studio功能而不是保存时的MSBuild。

  
      
  1. 我可以在保存时触发增量构建吗?
  2.   

在Visual Studio中,构建系统提供对增量构建的支持。但是,如果您希望使用自定义MSBuild文件.xyz触发增量构建,我恐怕您无法执行此操作,因为MSBuild仅适用于Build not save。

  

[!INCLUDETLA2 #tla_wpf]构建系统为增量构建提供支持。它非常智能地检测对标记或代码所做的更改,并且它仅编译受更改影响的工件。增量构建机制使用以下文件

查看Building a WPF Application (WPF)了解详情。

希望这有帮助。