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

本文关键字:命名空间 文件 结尾 错误 定义 类型 不能 包含 成员 | 更新日期: 2023-09-27 18:34:41

我正在尝试编译适用于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 没有缺少括号(。

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

您收到此错误是因为您既没有定义服务器也没有定义客户端条件符号。在预处理阶段消除 #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中,转到项目属性,并在"生成"页上将">条件编译符号"设置为"服务器"或"客户端"(名称区分大小写(。

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