4

Visual Studio ソリューションで 3 つのプロジェクトを作成したい:

  • Windows サービス (Business Layer、Common Layer、log4net.dll を参照)
  • ビジネス層 (共通層、log4net.dll を参照)
  • Common Layer (log4net.dll を参照)

手順:

  1. ウィザードを使用して、ビジネス レイヤーと共通レイヤーを変更せずに作成します。私は参照を設定し、すべてが機能しています。

  2. 次に、新しい Windows サービス プロジェクトを作成してソリューションに追加します。Any CPU の代わりに、ターゲット プラットフォーム x86 に追加されていることに気付きました。3 つのことを参照すると、コードが正しく色付けされ、コンパイル前のエラーが消えます。これは、参照が認識されたことを意味します。

  3. ソリューションをビルドすると、Windows サービス プロジェクトにコンパイル エラーが発生します。参照されているアセンブリが見つかりません。

ここで何が起きてるの?「型または名前空間名 'log4net' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)」エラーの原因は x86 構成ですか?

Windows サービス プロジェクトで任意の CPU 構成を使用するように強制しました。私はすべての参照を再確認しましたが、それらは正しいです。それでも私は何も参照できません。

システム仕様:

  • Windows 7 x64 SP1 Visual Studio 2010
  • 究極
4

3 に答える 3

6

さて、あなたはすでに答えを見つけました。Log4netは、クライアントプロファイルで使用できないアセンブリであるSystem.Web.dllに依存しています。この依存関係の考えられる主な理由はlog4net.Appender.AspNetTraceAppenderクラスであり、HttpContextクラスを使用し、System.Webが必要です。

今のところ、それはあなたが図書館のドキュメンテーションから、またはそれを難し​​い方法で見つけることによって知る必要があることです。建物は警告を生成しますが、それは警告であり、エラーではなく、見逃しがちです。

C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(1360,9):警告MSB3253:参照されているアセンブリ "C:\ projects \ WindowsFormsApplication2 \ ClassLibrary1 \ bin \ Debug \ClassLibrary1.dll"現在ターゲットになっているフレームワーク「.NETFramework、Version = v4.0、Profile = Client」にない「System.Web、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a」に依存しているため、解決できませんでした。 "。ターゲットフレームワークにないアセンブリへの参照を削除するか、プロジェクトの再ターゲットを検討してください。

log4net参照を含むアセンブリ内のクラスを参照しようとするコード内のステートメントからのエラーが続きます。

C:\ projects \ WindowsFormsApplication2 \ WindowsFormsApplication2 \ Form1.cs(12,9):エラーCS0246:タイプまたは名前空間名'ClassLibrary1'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

コードの記述中に段階的にビルドしないと、どちらも見逃すことはなく、多くのエラーが発生する可能性があります。あなたはエラーに焦点を合わせ、警告がエラーの本当の原因であることに気づきません。もう1つの厄介な落とし穴は、IntelliSenseが最初は満足していることです。これ、アセンブリ参照を適切に解決します。多くのプログラマーが警告を見逃しているように見えるという事実だけで、警告が常に生成されるとは限らないという証拠がいくつかあります。しかし、それが当てはまるシナリオはまだ見つかりません。わからない。

于 2011-07-03T15:59:10.247 に答える
3

ほんの一握りの髪を失った後、問題を解決するこの Stackoverflowの回答を見つけました。しかし、なぜ Visual Studio は、x86をターゲット プラットフォームとして、.Net Framework 4 Client Profileをターゲット フレームワークとして Windows サービスを追加するのでしょうか?

于 2011-07-03T09:13:11.750 に答える
0

ソリューションがビルドされているかどうかを確認します。これを行うには、ソリューション > プロパティ > 構成プロパティを右クリックします。すべてのソリューションがビルドされていることを確認してください

于 2011-07-03T09:13:59.457 に答える