【问题标题】:Public C# Properties are invisible on Xamarin Forms Android公共 C# 属性在 Xamarin Forms Android 上不可见
【发布时间】:2017-06-15 18:14:49
【问题描述】:

我的 Xamarin Forms 应用在 Android 上运行时表现异常。当我在 UWP 上运行时,一切似乎都运行良好,但是当我在 Android 上启动同一个应用程序时,我正在绑定的模型的公共属性似乎消失了,就好像它们不存在一样。

模型被定义为如下所示的接口:

public interface IRegionModel
{
    string Id { get; set; }
    string Name { get; set; }
    string ShortName { get; set; }
    string UrlName { get; set; }
    string Description { get; set; }
    string CityId { get; set; }
}

实现几乎相同:

public class RegionModel : IRegionModel
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string ShortName { get; set; }
    public string UrlName { get; set; }
    public string Description { get; set; }
    public string CityId { get; set; }
}

我正在使用 RegionModel 类型的可观察集合填充我的 ViewModel:

public class RegionListViewModel : ViewModelBase
    {
        public ObservableCollection<IRegionModel> Regions { get; set; } = new ObservableCollection<IRegionModel>();

        protected string CityId { get; set; }

        public void Init(string cityId)
        {
            CityId = cityId;
        }

        public async override void Start()
        {
            base.Start();

            LoadDesignData();

            IsLoading = false;
        }

        protected override void LoadDesignData()
        {
            base.LoadDesignData();

            for (var i = 1; i < 5; i++)
            {
                var model = new RegionModel()
                {
                    Id = i.ToString(),
                    Description = "Region description " + i.ToString(),
                    ShortName = "Downtown",
                    Name = "Downtown",
                    UrlName = "Downtown",
                    CityId = "mcallen"
                };

                Regions.Add(model);
            }
        }
    }

如您所见,我可以访问模型的每个属性,并用我的属性填充它们。

但是,当我在 android 上运行应用程序时,这些属性立即不可见:

我没有收到任何异常或错误,但属性根本不存在。

我认为这可能是由于过时的二进制文件(如此处建议:C# some public properties are not accessible, actually completely missing

但是,我进行了全面清理和手动清理,手动清除了每个项目上的所有 bin/obj 文件夹并重建了它。此外,我进行了一些代码更改和 XAML 更改,并且这些更改都显示出来了,因此该项目肯定似乎正在更新...

这里还有什么问题?属性怎么会消失?

【问题讨论】:

  • 检查链接选项,如果您选择了“全部链接”,那么如果分析器无法找到用法,它将删除“未使用”属性。
  • 另外,您确定它们不存在并且调试器没有问题吗?您是否尝试在声明后添加代码以检索值?我有时会看到这样的行为,调试器在调试时无法检索所有数据。
  • 该死的,就是这样!链接是 SDK 和用户程序集。当我更改为 none 时,它​​不会构建,但是当我将其更改为 SDK 时,它才起作用!请重新发布作为答案,以便我接受!顺便说一句,这个选项到底意味着什么?为什么我不想链接我的程序集?
  • 正是您禁用了程序集的链接,这会阻止优化器删除未使用的代码,这就是您要使用它的原因。如果代码工作正常,链接一切都会减少包大小,因为死代码将被删除

标签: c# xamarin.android xamarin.forms


【解决方案1】:

如果您已链接您的程序集,分析器可能无法确定这些属性是否真正被使用并且已将它们剥离。

将链接选项设置为“仅限 SDK”,它应该可以工作。

【讨论】:

    猜你喜欢
    • 2012-08-13
    • 2020-12-06
    • 2015-04-18
    • 2018-04-02
    • 2019-11-10
    • 2021-12-23
    • 2018-08-13
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多