3

Sync Framework 4.0 for Windows Phone のサンプル コードをコンパイルしようとしていますが、いくつかのファイルでエラーが発生しました。それらのファイルの1つは次のとおりです。

#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; }
    }
}

次の 2 つのエラーがあります。

  • 名前空間には、フィールドやメソッドなどのメンバーを直接含めることはできません -- 最初のかっこ
  • タイプまたは名前空間の定義、またはファイルの終わりが必要 -- 最後の括弧について

これらのエラーの両方をGoogleで検索しましたが、そのようなエラーに対する多くの回答が見つかりました-しかし、それらのどれも私のケースには適用できません(かっこが抜けていないことがわかりました)。

4

2 に答える 2

4

SERVER も CLIENT条件記号も定義されていないため、このエラーが発生します。前処理段階で#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 に設定します (名前は大文字と小文字が区別されます)。

于 2012-05-21T02:13:49.367 に答える
0

.TT ファイルに UNIX スタイルの改行が含まれていたため、このエラーが発生していました。おそらく、改行が git によって変換されたためです。.tt ファイルをテキスト エディターにコピーし、PC 形式で保存してから、Visual Studio にコピーし直すと、問題が解決しました。

于 2013-01-13T16:18:57.160 に答える