命名空间不能直接包含成员... +类型或命名空间定义,或文件结束预期错误

时间:2012-05-21 01:38:57

标签: c# windows-phone

我正在尝试编译适用于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没有丢失的括号)。

2 个答案:

答案 0 :(得分:4)

您收到此错误,因为您既未定义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#代码(因为在打开大括号之前缺少“namespace xyz”)。

在Visual Studio中转到项目属性,然后在页面构建条件编译符号设置为SERVER或CLIENT(名称区分大小写)。

答案 1 :(得分:0)

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