类型或命名空间名称 'Description' 无法找到。

3
我目前正在为UWP开发MR应用程序。我正在使用Unity3D(在5.5.2和2017.1.2中测试),当我在Unity中按下播放时一切正常,没有任何编译错误......但是,当我去构建应用程序时,我会遇到错误Assets\Script\DMEWebRequest.cs(35,10): error CS0246: The type or namespace name 'DescriptionAttribute' could not be found (are you missing a using directive or an assembly reference?)Assets\Script\DMEWebRequest.cs(35,10): error CS0246: The type or namespace name 'Description' could not be found (are you missing a using directive or an assembly reference?)
据我所知,DescriptionAttribute是System.ComponentModel的一部分。
来自我的C#脚本的代码片段。
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;


//Makes a dropdown menu in the inspector
public enum EGU {
    [Description("")] None,
    [Description("ºC")] DegreesCelcius,
    [Description("kW")] KiloWatts,
    [Description("kW/h")] KiloWattsPerHour,
    [Description("MW")] MegaWatts,
    [Description("MW/h")] MegaWattsPerHour,
    [Description("M³")] CubicMeters,
    [Description("M³/h")] CubicMetersPerHour,
    [Description("%")] Procentage,
    [Description("º")] Degrees,
    [Description("l/s")] LiterPerSecond,
    [Description("cm")] CentiMeters,
    [Description("m")] Meters,
    [Description("mg/l")] MiliGramPerLiter,
    [Description("g/l")] GramPerLiter
    }

希望有人能帮我找出我缺少的指令或参考资料。
/T

它位于 System.ComponentModel 命名空间 中,您已经添加了它。 - mmushtaq
你是如何添加 ComponentModel 的引用的? - mmushtaq
除了打出来什么也没做...但是正如@Programmer在答案中所说,它不能与UWP一起使用 :/ - T. Nesset
2个回答

7

当构建 PC、Mac 和 Linux Standalone 时,您的代码应该运行良好。但是,当您将平台切换到 Universal Windows Platform 时,它不应该起作用,因为 System.ComponentModel.Description 使用的 DescriptionAttribute 在 UWP 上不受支持。UWP 移除了许多 .NET API 的支持。这是您制作 UWP 应用程序时需要记住的一件事。


哦,好的,非常感谢,现在我明白了 :) 你知道除了使用选择枚举的switch之外,我还能用什么方法来创建带有特殊字符(%,º,³等)的公共枚举吗? - T. Nesset
如果我知道解决这个问题的方法,我会将其添加到答案中。但实际上我并不确定,也许使用单一的源代码重新实现这个功能可能会行。尝试一下吧,但确保将该代码用UNITY_WSA宏进行包装,这样当你切换到UWP时才会使用它。 - Programmer
我会尝试一下,再次感谢您的答复。我已经试图理解这个问题几天了 :) - T. Nesset
试一下吧。如果可以的话,我会将其编辑到我的答案中。 - Programmer
无法使其正常工作。最终使用了一个转换枚举值为字符串的开关。 :/ - T. Nesset
说实话,我没有把它写下来。我有点匆忙地完成了一个展示的申请,而这个展示将在3小时内进行。在这个展示之后,我会尝试看看能否想出更好的解决方案。 - T. Nesset

0

它可以与IL2CPP作为脚本后端一起使用。如果您需要来自Unity 2018 LTS的已弃用的.NET脚本后端(在2019年中删除),您可以尝试添加来自Mono或反编译代码的DescriptionAttribute.cs,就像@Programmer建议的那样。在某些情况下可能有效,但在我的情况下,我遇到了更多错误。

最后,当我尝试为UWP(.NET)编译ARSubsystem包时放弃了,这是同一项目的iOS / Android构建所需的。相反,我操纵了包清单以根据平台排除/包含软件包。有几种方法可以实现这一点,例如InitializeOnLoad attributeIPreprocessBuildWithReport接口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接