在我添加新控件后的.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.csthis.Test.Content = "TestButton";
我可以使用msbuild为自定义文件internal System.Windows.Controls.Button Test;
提供完全相同的行为,该文件是.xyz
文件的设计者视图。我已经创建了一个msbuild目标,可以在构建和项目加载时重新生成.cs
个文件,但我无法在文件保存上执行相同操作
现在我的问题:
.cs
更新
我还浏览了一个WPF g.i.cs
,它使用了与类库C#项目相同的.csproj
文件。我可以发现的唯一区别是.targets
和DependentUpon
项元数据
答案 0 :(得分:1)
- VS如何在保存时重新生成g.i.cs?
醇>
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是 作为单独的资源嵌入。
- 这是VS功能还是msbuild功能?
醇>
这应该是Visual Studio功能。如上所述,Visual Studio调用XAML编译器xamlc.exe
来编译保存时的.xaml
文件。 Visual Studio将调用MSBuild将这些文件编译为构建上的.exe
/ .dll
。此外,当你保存不构建项目时,你可以打开你的任务管理器,没有MSBuild.exe存在,只有当你构建项目时,它才会出现。所以这应该是Visual Studio功能而不是保存时的MSBuild。
- 我可以在保存时触发增量构建吗?
醇>
在Visual Studio中,构建系统提供对增量构建的支持。但是,如果您希望使用自定义MSBuild文件.xyz
触发增量构建,我恐怕您无法执行此操作,因为MSBuild仅适用于Build not save。
[!INCLUDETLA2 #tla_wpf]构建系统为增量构建提供支持。它非常智能地检测对标记或代码所做的更改,并且它仅编译受更改影响的工件。增量构建机制使用以下文件
查看Building a WPF Application (WPF)了解详情。
希望这有帮助。