web-dev-qa-db-ja.com

フレームワーク4.0を使用しているときにSystem.Configuration DLLでファイルまたはアセンブリエラーをロードできませんでした。

Visual Studio 2010および4.0フレームワークにアップグレードした直後に、トランクビルドがファイルまたはアセンブリエラーをロードできませんでした

3.5プロジェクトは4.0プロジェクトを参照できないと判断しました。エラー状態としてこのアセンブリはより新しいランタイムによってビルドされるため、このエラーが発生します。現在ロードされているランタイムで、ロードできません

以来、これを解決し、トランクは正常に構築されています。

しかし、最近ブランチとタグを作成しましたが、ブランチを構築しようとすると、このエラーが突然現れました。エラーは、独自の.net 4.0プロジェクトのSystem.Configuration DLLへの参照に関するエラーを除きます。

Core.Dev\Towps\Projetcs\Application\MyServiceのTowps.Namespace.MyService.csproj:
RG0000:参照アセンブリをロードできませんでした

"C:\ Windows\Microsoft.Net\Assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll"。
「ファイルまたはアセンブリをロードできませんでした」というBadImageFormatExceptionをキャッチしました
'C:\ Windows\Microsoft.Net\Assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll'またはその依存関係の1つ。
このアセンブリは、現在ロードされているランタイムよりも新しいランタイムによってビルドされ、ロードできません。 "in ResGen(0、0)

そのシステムで特定のバージョンプロパティを設定しようとしました。ConfigurationDLL ref to true。
プロパティでは、ランタイムバージョンがv4.0.30319で、バージョンが4.0.0.0であることがわかります。
DLL refへのパスは、C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETFramework\v4です。 0\System.Configuration.dllこれは私には問題ありません。

CrusieControlがMSBuildを使用してビルドしようとするcsprojファイルのターゲットフレームワークは、フレームワーク4.0を対象としています。再び大丈夫だ。

トランクとブランチの両方でIDEでビルドします。CruiseControlはトランクでビルドします。CrusieControlがビルドを試みると、ブランチビルドは失敗します。

何が起こっているのでしょうか?

MSBuildの不一致の可能性がありますが、CruiseControlが使用している構成ファイルとmsbuild projファイルをスキャンしましたが、古いMSBuildへの参照はありません。これらはすべてトランクが機能するように更新されているため、これは理にかなっています。

ブランチは単にトランクのコピーであったため、違いが何であるかを判断するのが困難です!

18
topwik

分岐後、cc.netが使用するブランチビルドディレクトリ内のすべての.projファイルは、ToolVerison = "3.5"を使用するように戻ったことがわかりました。すべてのToolsVersion = "4.0" projと構成の変更を、ブランチを作成したトランクにコミットしたと思いました。明らかにそうではありません。

4
topwik

違いは簡単に、新しいブランチにヒントパスが並ばなくなることです。ただし、説明にはログがありません。渡すコマンドラインオプションは何ですか? ccnet.configおよびccnet.config.slnまたは.csprojファイルに直接ではなく、msbuildを呼び出すビルドスクリプトを指している場合に取得される可能性のある他のすべて。

両方で/v:d for the msbuildをオンにしてから、そのアセンブリまたは関連する/近くにある他のアセンブリの参照解像度(またはビルド順序など)を比較します。

また、両方でmsbuildへのパスを提供していますか?

msbuild4="C:\WINNT\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe"

<msbuild>
    <executable>$(msbuild4)</executable>

あなたのccnet.config

msbuild4 /tv:3.5中に2.0ビルド実行可能ファイルを報告するのを見ました:

<Message Text="MSBuildToolsPath:$(MSBuildToolsPath)" />
<Message Text="MSBuildToolsVersion:$(MSBuildToolsVersion)" />

MSBuildToolsPath:C:\WINNT\Microsoft.NET\Framework\v2.0.50727
MSBuildToolsVersion:2.0

それはあまり有用ではないようでした。

ブランチとトランクの両方の構成ブロックを見たいのですが。

ブランチには有効ではないハードコードされたパスがあったため、ビルドスクリプトでいくつかのパスがブランチで失敗したことを知っています。 ccnet.configを調整して、それらの項目の引数を渡してブランチをオーバーライドする必要がありました。

2
Maslow

クライアントでサポートされている.netフレームワークのバージョンを確認してください。たとえば、sharepoint2010は、4.0以降の.netフレームワークで構築されたdllをサポートしません。 3.5以下のみをサポートします。

0
raja

少し遅くなりましたが、他の誰かがこの問題を抱えている場合、RuntimeVersionを.dnaファイルに追加してください(まだ存在しない場合)。

<DnaLibrary Name="PROJECTNAME" RuntimeVersion="v4.0">
0
Blueberry