每次在 Xamarin.Forms 中创建 .XAML 页面时,都在三个不同的位置使用部分类定义。
您的实际 .xaml 文件将在定义命名空间和类名的根元素上具有 Class="" 属性。实际的根元素类型将定义新 .xaml 页面作为子类的基类。默认情况下,这将是 ContentPage。
您还将获得一个链接的 .xaml.cs 文件,其中还包含部分类定义。这是您的代码隐藏文件,您放置页面特定代码的位置,这也是从构造函数调用 InitializeComponent() 调用的位置。
此调用用于解析 xaml 内容并填写对您提供 id 的所有视图的引用,以便在 xaml 中使用 x:name="something"。
InitializeComponent() 由 xamarin 自动生成,它是项目输出的一部分,每次编辑 .xaml 文件时都应该重新生成它。
为此,在 .xaml 文件的属性中,需要将构建操作设置为“嵌入式资源”,并且需要将自定义工具设置为“MSBuild:UpdateDesignTimeXaml”
现在,即使这些值设置正确,Xamarin 中也存在错误,可能导致文件未生成并且您收到错误消息。
当您收到此错误时,首先要尝试的是右键单击 .xaml 文件并单击“运行自定义工具”。您只需执行一次,在一个 xaml 文件上,该工具将自动为您项目中的所有 .xaml 文件运行。
这是我在正常开发过程中每天必须做一次的事情,它从我切换到 VS 2015 开始。你的里程可能会担心。
要检查的另一件非常重要的事情是 .csproj 文件中的 BuildTargets。
Xamarin 能够做到这一点的方式是通过指定调用它的 DLL 的构建操作,您在安装 Xamarin.Forms nuget 包时获得。有时构建操作导入行搞砸了,这会导致各种问题。
卸载 .csproj 并找到导入 Xamarin.Forms.targets 的行。它应该看起来像这样:
<Import Project="..\..\packages\Xamarin.Forms.2.0.0.6484\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.0.0.6484\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
确保此处的版本与您的 packages.config 文件中的 Xamarin.Forms 版本相匹配,然后确保您实际上可以导航到项目的根文件夹,并找到重要行所指的实际文件。即,packages\xamarin...\Xamarin.Forms.targets
一个常见的做法是从 \packages\ 中删除所有内容,并让 nuget 在下一次构建时重新下载所有内容。只需确保 .csproj 导入中的版本和 packages.config 中的版本相同。
如果所有这些都完成了,你应该有一个有效的生成的部分类,它实现了 InitializeComponent() 并且错误应该消失了。