自动生成的 XAML.g.cs 文件无法在 Xamarin Forms PCL 项目中编译
Autogenerated XAML.g.cs files are not compilable in Xamarin Forms PCL project
我有一个 Xamarin 表单(我正在使用 Xamarin Studio 5.7)项目,其中包含一个包含 UI 个组件的通用 PCL。我只是使用 类(没有 XAML 设计师)来启动我的项目,它运行良好,可以编译,并且有一个带有几个子页面的 ContentPage。我决定添加一个新的 AboutPage.xaml 和 AboutPage.cs 文件并开始使用 UI 来编辑我的表单。所以,我通过 New File...Forms ContentPage XAML..... 创建了我的新页面,正如我上面提到的,它创建了我的两个文件。
AboutPage.cs
AboutPage.xaml
生成的文件如下所示...
AboutPage.cs
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace IPSND.Xamarin
{
public partial class AboutPage : ContentPage
{
public AboutPage ()
{
InitializeComponent ();
}
}
}
AboutPage.xaml
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="IPSND.Xamarin.AboutPage">
<ContentPage.Content>
<StackLayout>
<Image Id="ImageLogo" Aspect = "AspectFit"></Image>
</StackLayout>
</ContentPage.Content>
</ContentPage>
现在,这看起来没问题,我确保我的 class 声明包含命名空间。但是,当我编译时,生成的 AboutPage.xaml.g.cs 文件看起来像这样...请注意 using 语句是如何包含在命名空间内而不是文件顶部的。不幸的是,这是不可编译的。
我做错了什么?
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18408
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace IPSND.Xamarin {
using System;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
public partial class AboutPage : ContentPage {
private void InitializeComponent() {
this.LoadFromXaml(typeof(AboutPage));
}
}
}
这会导致以下错误
D:\SVN\IPSND.Xamarin\obj\Debug\AboutPage.xaml.g.cs(19,19): Error CS0234: The type or namespace name 'Forms' does not exist in the namespace 'IPSND.Xamarin' (are you missing an assembly reference?) (CS0234) (IPSND.Xamarin)
D:\SVN\IPSND.Xamarin\obj\Debug\AboutPage.xaml.g.cs(19,19): Error CS0234: The type or namespace name 'Forms' does not exist in the namespace 'IPSND.Xamarin' (are you missing an assembly reference?) (CS0234) (IPSND.Xamarin)
D:\SVN\IPSND.Xamarin\obj\Debug\AboutPage.xaml.g.cs(38,38): Error CS0246: The type or namespace name 'ContentPage' could not be found (are you missing a using directive or an assembly reference?) (CS0246) (IPSND.Xamarin)
所以,我想也许它混淆了我的命名空间 (IPSND.Xamarin) 的尾部和 Xamarin.Forms 命名空间的 using 头部...所以我改变了我的命名空间此表单集(.cs 命名空间和 XAML class 声明)为 IPSND.Test。不幸的是,这导致了同样的错误。
显然正如 Jason 在下面的评论中指出的那样,这种具有 using 语句的配置不仅是允许的,而且根据本文档 here,是为生成的文件设计的。所以,我想这个问题的症结可能与我在 PCL 库中对 Xamarin.Forms 的引用更相关(有点像错误所说的)。使用上面引用的文档,我进入了我的 .cs 和 .xaml 文件并使它们完全匹配(完全没有使用语句,也没有在 Partial 声明中从 ContentPage 继承,但这没有帮助。 ...还没有。
好的,感谢 Jason.....他走在正确的轨道上并成功了......我的 IPSND.Xamarin 命名空间是问题所在。只是更改特定 xaml/cs 上的命名空间不是问题,问题在于我的项目命名空间最后有 'Xamarin'。我复制了整个项目并将所有内容移至 IPSND.X 并且一切都编译正常。
我有一个 Xamarin 表单(我正在使用 Xamarin Studio 5.7)项目,其中包含一个包含 UI 个组件的通用 PCL。我只是使用 类(没有 XAML 设计师)来启动我的项目,它运行良好,可以编译,并且有一个带有几个子页面的 ContentPage。我决定添加一个新的 AboutPage.xaml 和 AboutPage.cs 文件并开始使用 UI 来编辑我的表单。所以,我通过 New File...Forms ContentPage XAML..... 创建了我的新页面,正如我上面提到的,它创建了我的两个文件。
AboutPage.cs AboutPage.xaml
生成的文件如下所示...
AboutPage.cs
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace IPSND.Xamarin
{
public partial class AboutPage : ContentPage
{
public AboutPage ()
{
InitializeComponent ();
}
}
}
AboutPage.xaml
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="IPSND.Xamarin.AboutPage">
<ContentPage.Content>
<StackLayout>
<Image Id="ImageLogo" Aspect = "AspectFit"></Image>
</StackLayout>
</ContentPage.Content>
</ContentPage>
现在,这看起来没问题,我确保我的 class 声明包含命名空间。但是,当我编译时,生成的 AboutPage.xaml.g.cs 文件看起来像这样...请注意 using 语句是如何包含在命名空间内而不是文件顶部的。不幸的是,这是不可编译的。
我做错了什么?
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18408
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace IPSND.Xamarin {
using System;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
public partial class AboutPage : ContentPage {
private void InitializeComponent() {
this.LoadFromXaml(typeof(AboutPage));
}
}
}
这会导致以下错误
D:\SVN\IPSND.Xamarin\obj\Debug\AboutPage.xaml.g.cs(19,19): Error CS0234: The type or namespace name 'Forms' does not exist in the namespace 'IPSND.Xamarin' (are you missing an assembly reference?) (CS0234) (IPSND.Xamarin)
D:\SVN\IPSND.Xamarin\obj\Debug\AboutPage.xaml.g.cs(19,19): Error CS0234: The type or namespace name 'Forms' does not exist in the namespace 'IPSND.Xamarin' (are you missing an assembly reference?) (CS0234) (IPSND.Xamarin)
D:\SVN\IPSND.Xamarin\obj\Debug\AboutPage.xaml.g.cs(38,38): Error CS0246: The type or namespace name 'ContentPage' could not be found (are you missing a using directive or an assembly reference?) (CS0246) (IPSND.Xamarin)
所以,我想也许它混淆了我的命名空间 (IPSND.Xamarin) 的尾部和 Xamarin.Forms 命名空间的 using 头部...所以我改变了我的命名空间此表单集(.cs 命名空间和 XAML class 声明)为 IPSND.Test。不幸的是,这导致了同样的错误。
显然正如 Jason 在下面的评论中指出的那样,这种具有 using 语句的配置不仅是允许的,而且根据本文档 here,是为生成的文件设计的。所以,我想这个问题的症结可能与我在 PCL 库中对 Xamarin.Forms 的引用更相关(有点像错误所说的)。使用上面引用的文档,我进入了我的 .cs 和 .xaml 文件并使它们完全匹配(完全没有使用语句,也没有在 Partial 声明中从 ContentPage 继承,但这没有帮助。 ...还没有。
好的,感谢 Jason.....他走在正确的轨道上并成功了......我的 IPSND.Xamarin 命名空间是问题所在。只是更改特定 xaml/cs 上的命名空间不是问题,问题在于我的项目命名空间最后有 'Xamarin'。我复制了整个项目并将所有内容移至 IPSND.X 并且一切都编译正常。