1

RESTスターターキットを使用してコードを記述しましたが、開発マシンで正常に動作します。ただし、サーバーにアップロードすると、次のエラーメッセージが表示されます...

CS1684:エラーとしての警告:タイプ'System.Runtime.Serialization.Json.DataContractJsonSerializer'への参照は、'c:\ WINNT \ assembly \ GAC_MSIL \ System.ServiceModel.Web \ 3.5.0.0__31bf3856ad364e35\System.ServiceModelで定義されていると主張しています。 Web.dll'ですが、見つかりませんでした

コードを1行ずつ削除しましたが、次のコード行がエラーを引き起こしているようです...

HttpContent newOrganizationContent = HttpContentExtensions.CreateXmlSerializable(newOrganizationXml);

本当にそれを修正する方法の手がかりを持っていません。実行するには新しいバージョンのフレームワークが必要なためかもしれないと思いましたが、IISを見ると、フレームワーク3.5を使用している場合でも、最新バージョンであると思われるバージョン2.0.50727が実行されていることがわかります。

非常に混乱しています、何かアイデアはありますか?

ジョン

4

1 に答える 1

1

最初は、これは、展開先のサーバーに.NET Framework 3.5SP1がインストールされておらず、.NET3.5RTMのみがインストールされていることが原因であると考えました。

ただし、.NET 3.5 RTMSystem.ServiceModel.Web.dllアセンブリを確認すると、System.Runtime.Serialization.Json.DataContractJsonSerializerが実際に定義されていることがわかります。

コンパイラの警告CS1684は、サーバーのGACにアセンブリがあるが、定義されSystem.ServiceModel.Web.dllていないアセンブリがあることを示しています。System.Runtime.Serialization.Json. DataContractJsonSerializer

だから私がチェックすること:

  • 展開サーバーが少なくとも.NET3.5RTMを実行していること、およびベータ版またはリリース候補が使用されていないか、残っていないことを確認してください。

  • Visual Studio 2008では、プロジェクトのプロパティで.NET3.5の「ターゲットフレームワーク」を選択していることを確認してください。

問題がサーバーのフレームワークのインストールにあるかどうかを確認するために実行できる最後のチェックの1つは、単純なアプリケーションをノックアップしてDataContractJsonSerializer直接使用することです。クラスのMSDNドキュメントページに例があります。

DataContractJsonSerializerクラス(MSDN)

最後の手段として、サーバーが管理下にある場合は、.NET Framework 3.5をアンインストールしてから、次の場所から再インストールします。

Microsoft .NET Framework 3.5 Service Pack 1(フルインストール)

アップデート:

あなたのコメントによると:

3.5のベータ版を実行している場合は、アセンブリDataContractJsonSerializerに含まれていない可能性があります。System.ServiceModel.Web.dll

CTP、ベータ版、リリース候補版の周りで、この分野で最新の変更があったことを思い出しているようです。DataContractJsonSerializerJSONの人気の高まりとコミュニティの圧力により、これらの最近の追加/変更の1つであったことを漠然と覚えています。私の記憶は少し曖昧ですが、それは鐘を鳴らします。

DLLを置き換えるには、GACから現在のバージョンの登録を解除してから、ツールを使用してRTMのバージョンを登録する必要がありGACUTIL.exeます。RTMとベータビットを混在させることはお勧めしません。予測できない動作にさらされていることになります。

于 2010-03-25T07:24:50.553 に答える