13

VS2008 SP1 を使用して C# でコーディングします。ソース管理やタスクなどに使用する Team System Server 2008 を実行するサーバーがあります。このサーバーは、 Team Buildのビルド マシンでもあります。これは長い間うまく機能しています。今まで。1 つの外部アセンブリへの参照を持つプロジェクトの 1 つをビルドしようとすると、次のエラー メッセージが表示されます(これは、チーム ビルドを介して発生する場合と、物理的にログオンして Visual Studio を介して通常のビルドを実行する場合の両方で発生します)。

C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets : 警告 MSB3246:解決されたファイルのイメージが正しくないか、メタデータがないか、またはその他の理由でアクセスできません。ファイルまたはアセンブリ'C:\Program Files\Syncfusion\Essential Studio\7.1.0.21\Assemblies\3.5\Syncfusion.XlsIO.Base.dll' またはその依存関係の 1 つを読み込めませんでした。モジュールには、アセンブリ マニフェストが含まれている必要がありました。

C:\Program Files\MSBuild\Microsoft\VisualStudio\v9.0\ReportingServices\Microsoft.ReportingServices.targets(24,2): エラー MSB4062: "Microsoft.Reporting.RdlCompile" タスクをアセンブリ Microsoft. ReportViewer.Common、バージョン = 9.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b03f5f7f11d50a3a。ファイルまたはアセンブリ 'Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' またはその依存関係の 1 つを読み込めませんでした。モジュールには、アセンブリ マニフェストが含まれている必要がありました。宣言が正しいこと、およびアセンブリとそのすべての依存関係が利用可能であることを確認してください。

参照されているコンポーネント 'Syncfusion.XlsIO.Base' が見つかりませんでした。

これらのエラーは、問題のあるアセンブリ参照が 1 つある 1 つのプロジェクトに関するものです。ソリューション全体を構築しようとすると、もちろん、これが原因でさらに多くのエラーが発生します。また、他のアセンブリ参照で同じ問題を抱えているプロジェクトが他に 2 つあります。VS が解決できないと思われる参照アセンブリのリストがあります。

  • Microsoft.ReportViewer.Common
  • Microsoft.ReportViewer.WinForms
  • Syncfusion.Compression.Base
  • Syncfusion.Core
  • Syncfusion.XlsIO.Base

Syncfusion アセンブリは、サードパーティ コンポーネント パッケージからのものです。他の 2 つは、Microsoft ReportViewer コンポーネントに関連しています。

参照は [.NET] タブの [参照の追加] ウィンドウを介して追加されているため、疑わしい点はないと思います。アセンブリ参照のプロパティ ウィンドウで、カルチャ、説明、パス、ランタイム バージョン、または厳密な名前に値がありません。バージョンは 0.0.0.0 で、解決済みは False です。VSが参照を解決できないことは明らかだと思います。私の質問はなぜですか?私はこれについて頭を悩ませてきました。これはサーバー上でのみ発生し、ソリューションは私のマシンと同僚のマシンの両方で問題なくビルドされます。アセンブリ参照プロパティは、私たちのマシンでは問題ありません。

サードパーティのコンポーネントを(もちろんサーバー上で)アンインストールしてから、もう一度再インストールしてました。役に立ちませんでした。VS2008のインストールを修復しようとしました。役に立ちませんでした。ソース管理から以前のバージョンを取得しようとしました(以前にサーバーにビルドされていることがわかっています)、同じエラー メッセージが表示されました。ファイルのアクセス許可を確認しましたが、すべて問題ないようです。アイデアが尽きた…

これを解決するにはどうすればよいですか?

更新 16.02.2009: PC とサーバーの dll のildasm 出力を比較
しようとしました (それについて書いたコメントを参照してください)。1 行に 1 つの小さな違いがあり、それがコメントのように見えます。なぜ違いがあるのか​​ まったくわからないことを認めなければならないので、誰かが私にそれを説明してくれるでしょうか?また、サーバーでウイルススキャンを 実行してみました。役に立ちませんでした。参照削除してから、ディスク上のdllを参照して再読み込みしようとしました。うまくいきませんでした。

更新 17.03.2009:
解決策を見つけました! 犯人はPanda Antivirus の TruPrevent モジュールでした。モジュールを無効にすると、すべてが機能します。=) fuslogvw.exeとそれが生成したログ
の助けを借りて、これを発見しました。結果をグーグルで検索し、このブログエントリに出くわしました。. これが他の誰かに役立つことを願っています。

4

7 に答える 7

3

ほぼ確実に問題は環境にあり、発生源には関係ありません。

いくつかのアイデア...

(i) ウイルス対策/マルウェア対策ツールを無効にしてみてください - これらのツール (特に、何らかの理由でトレンド マイクロ ウイルス対策) がスキャン後 (最中?) に DLL ファイルをロックしたままにし、コンパイラに干渉するケースを見てきました。

(ii) PATH 環境変数を確認します。最近でも、PATH 変数はいくつかの問題を解決するために使用されます。これが台無しになると (長すぎる、最大長は 2048 文字 IIRC)、事態は奇妙になる可能性があります。

(iii) ファイルのアクセス許可を確認しました - レジストリのアクセス許可を確認しましたか? たとえば、SyncFusion はそのライセンス キーをユーザー ハイブとマシン ハイブの両方にインストールします。ビルド サーバーがどちらか一方を読み取ることができない場合、問題が発生する可能性があります。

幸運を!

于 2009-03-10T06:16:43.777 に答える
1

参照されているアセンブリが開発マシンの GAC にあるが、ビルド マシンにはない可能性もあります。GAC からソース リポジトリに取得し、パスで参照します。

于 2009-02-24T22:43:37.750 に答える
0

これがあなたのケースで役立つかどうかはわかりませんが、以前にdllがどうやら登録解除されたようで、dllでregsvr32を実行するとうまくいったことがありました。

于 2009-03-10T04:04:37.043 に答える
0

このファイルのildasmに違いはありますか

「C:\Program Files\Syncfusion\Essential Studio\7.1.0.21\Assemblies\3.5\Syncfusion.XlsIO.Base.dll」

あなたのマシンとサーバー上で?

于 2009-02-13T20:13:13.920 に答える
0

私の疑いでは、ビルド プロセスが行われているユーザーは、サード パーティのコントロールがあるフォルダーにアクセスできません。これはマシン上で適切に機能するため、ほぼ確実にユーザー/パーミッション固有です。

于 2009-02-24T22:34:41.593 に答える