【问题标题】:A namespace cannot directly contain members... + Type or namespace definition, or end-of-file expected errors命名空间不能直接包含成员... + 类型或命名空间定义,或文件结尾预期错误
【发布时间】:2014-09-09 07:28:47
【问题描述】:

我正在尝试编译适用于 Windows Phone 的 Sync Framework 4.0 的示例代码,但是我在几个文件中遇到了错误。其中一个文件是:

#if SERVER
namespace Microsoft.Synchronization.Services
#elif CLIENT
namespace Microsoft.Synchronization.ClientServices
#endif
{
    /// <summary>
    /// Represents the base interface that all offline cacheable object should derive from.
    /// </summary>
    public interface IOfflineEntity
    {
        /// <summary>
        /// Represents the sync and OData metadata used for the entity
        /// </summary>
        OfflineEntityMetadata ServiceMetadata { get; set; }
    }
}

有两个错误:

  • 命名空间不能直接包含字段或方法等成员 -- 对于第一个括号
  • 类型或命名空间定义,或预期的文件结尾 -- 最后一个括号

我已经通过谷歌搜索了这两个错误,并找到了很多此类错误的答案 - 但是这些都不能应用于我的案例(afaik 没有缺少括号)。

【问题讨论】:

    标签: c# windows-phone


    【解决方案1】:

    您收到此错误是因为您既未定义 SERVER 也未定义 CLIENT conditional symbol。在预处理阶段消除了#if...#endif 指令中的文本后,编译器只看到以下代码:

    {
        /// <summary>
        /// Represents the base interface that all offline cacheable object should derive from.
        /// </summary>
        public interface IOfflineEntity
        {
            /// <summary>
            /// Represents the sync and OData metadata used for the entity
            /// </summary>
            OfflineEntityMetadata ServiceMetadata { get; set; }
        }
    }
    

    这不是有效的 C# 代码(因为在打开花括号之前缺少“命名空间 xyz”)。

    在 Visual Studio 中转到项目属性并在页面 Build 上将 条件编译符号 设置为 SERVER 或 CLIENT(名称区分大小写)。

    【讨论】:

      【解决方案2】:

      我收到此错误是因为我的 .TT 文件中有 UNIX 样式的换行符,大概是因为换行符是由 git 转换的。将 .tt 文件复制到文本编辑器中,将其保存为 PC 格式,然后复制回 Visual Studio 为我解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多