web-dev-qa-db-ja.com

MSBuildが参照を見つけることができません

私は現在、MSBuildがユニットテストdllの1つをコンパイルできない理由を理解しようとしています。この問題はこのDLLでのみ発生し、他の単体テストプロジェクトでは発生しません。

これは、ビルドが失敗したときにTeamCityから受け取る出力です。

[10:38:55]: NAnt output:
[10:38:55]: [exec]
[10:38:55]: [exec]
[10:38:55]: [exec] "C:\Robinson\trunk\Projects\Robinson\Robinson.sln" (default target) (1) ->
[10:38:55]: [exec] "C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj" (default target) (19) ->
[10:38:55]: [exec] (CoreCompile target) ->
[10:38:55]: [exec] Modules\SecurityModuleTests.cs(10,30): error CS0234: The type or namespace name 'Modules' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an Assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] Modules\SecurityModuleTests.cs(197,39): error CS0246: The type or namespace name 'SecurityModule' could not be found (are you missing a using directive or an Assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] TranslateTests.cs(10,30): error CS0234: The type or namespace name 'Utils' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an Assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] IPETests.cs(8,30): error CS0234: The type or namespace name 'Ajax' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an Assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] Pages\BasePageTest.cs(6,30): error CS0234: The type or namespace name 'Utils' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an Assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] Pages\BasePageTest.cs(7,30): error CS0234: The type or namespace name 'Pages' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an Assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] ServiceAsmxTests.cs(9,30): error CS0234: The type or namespace name 'Ajax' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an Assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] ServiceAsmxTests.cs(10,30): error CS0234: The type or namespace name 'Utils' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an Assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] Pages\BasePageTest.cs(16,17): error CS0246: The type or namespace name 'basepage' could not be found (are you missing a using directive or an Assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] ServiceAsmxTests.cs(22,17): error CS0246: The type or namespace name 'Service' could not be found (are you missing a using directive or an Assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec]
[10:38:55]: [exec] 2075 Warning(s)
[10:38:55]: [exec] 10 Error(s)
[10:38:55]: [exec]
[10:38:55]: [exec] Time Elapsed 00:01:40.06

プロジェクトTenForceExecutionTestsは、MBunitフレームワークのいくつかのUnitTestを含む単純なDLLです。このプロジェクトには、WebアプリケーションプロジェクトであるTenForceExecutionへの参照とTenForce.Executionへの別の参照があります.Test、これは両方のプロジェクトのロジックを含む別のDLLです。

開発マシンですべてをコンパイルすると、問題なく動作し、エラーなしでコンパイルが行われます。ビルドエージェントでは、しかしこれは失敗するようです...

[〜#〜] info [〜#〜]

  • ターゲットフレームワーク:.NET4
  • OS:Windows XP 32ビット
  • Windows 7SDKがインストールされています

[〜#〜]編集[〜#〜]

クリーンチェックアウトを行い、Visual Studioはソリューション全体をビルドできますが、msbuildはできません。

編集2

依存関係を確認しました:

  • プロジェクト間にプロジェクトの依存関係があります
  • プロジェクト間には解決策の依存関係があります

EDITwebApplicationプロジェクトへの参照を削除し、そのプロジェクトのコンパイル済みDLLへの参照に置き換えると、エラーが消え、プロジェクトはMSBuildで正常にコンパイルされます。

EDIT 4msbuildからLOGを介してビルド全体を実行し、問題を引き起こしているプロジェクトをコンパイルするための特定のタスクを調べました。

  Task "Csc"
    c:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:Prompt /warn:4 /define:DEBUG;TRACE /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\ASP.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\BUL\bin\Debug\BUL.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\BULTest\bin\Debug\BULTest.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\DAL\bin\Debug\DAL.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\Framework\bin\Debug\Framework.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\Gallio.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\Iesi.Collections.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\LanguageResource\bin\Debug\LanguageResource.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\log4net.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\MbUnit.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll" /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\NHibernate.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\PresentationBridge\bin\Debug\PresentationBridge.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\PresentationBridgeTest\bin\Debug\PresentationBridgeTest.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Configuration.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll" /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\System.Data.SQLite.DLL /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.Extensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.Services.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.dll" /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\TenForce.Execution.Test\bin\Debug\TenForce.Execution.Test.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\WatiN.Core.dll /debug+ /debug:full /optimize- /out:obj\Debug\TenForceExecutionTests.dll /target:library Modules\SecurityModuleTests.cs TestRunSetup.cs TranslateTests.cs WebBaseTest.cs MetaTests.cs IPETests.cs Pages\BasePageTest.cs Properties\AssemblyInfo.cs ServiceAsmxTests.cs Settings.Designer.cs "D:\Users\arne.de.herdt.TENFORCE2\AppData\Local\Temp\6\.NETFramework,Version=v4.0.AssemblyAttributes.cs"
    Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
    Copyright (C) Microsoft Corporation. All rights reserved.

私の知る限り、実際のWebApplicationは[〜#〜] not [〜#〜]参照リストに含まれています。

15
codingbunny

より多くの人々がこれに問題を抱えているので、明らかにこれはMSBuildの既知の問題のようです。これに関してMicrosoftからまだ有効な返信を受け取っていませんが、ここで議論が続けられました: http://social.msdn.Microsoft.com/Forums/en-CA/msbuild/thread/434abf1a-30db -4b13-8062-13755898dd71

3
codingbunny

今日同じ問題が発生し、参照できなかったプロジェクトに別のプラットフォームが指定されていることが終了しました。x86他のプロジェクトは任意のプラットフォームです。これを回避するには、パラメータを/ p:Platform = "Mixed Platforms"で設定する必要がありました。 Configuration Managerに移動し、右上で選択されているActive Solution Platformを確認すると、VSが何を使用しているかを確認できます。

5
Cobus Bernard

これは古い投稿だと思いますが、今日出会ったので、他の人にフィードバックを提供したいと思いました。

私はこれに数回遭遇し、ターゲットフレームワークを.NET Framework4クライアントプロファイルから.NETFramework4だけに変更することでうまくいくことがわかりました。

2
r584

UWP appxパッケージをビルドするときに、同様の参照の問題も見つかりました。次のようなエラーメッセージがたくさんあります。

App.xaml.cs(6,15): error CS0234: The type or namespace name 'ApplicationModel' does not exist in the namespace 'Windows' (are you missing an Assembly reference?)

VS2017でslnファイルを開くと、問題なくビルドされます。

この問題を修正するために2つのことを行いました。

  1. 元のソリューションにはwinSDK10.0.18362が必要であることに気付きましたが、ビルドマシンにはありません。 VS2017で開くと、インストールされている古いバージョンにSDKを再ターゲットするように求められます。 msbuildがリターゲットを実行できない可能性があると思うので、必要なwinSDK18362をダウンロードしてインストールしました。
  2. / t:restore」オプションをmsbuildコマンドラインに追加し、msbuildを2回実行しました。
    msbuild mySolution.sln /p:Configuration="Release" /p:Platform="x64" /t:restore
    msbuild mySolution.sln /p:Configuration="Release" /p:Platform="x64"

復元については、 https://docs.Microsoft.com/en-us/nuget/reference/msbuild-targets#restore-target を参照してください。

1
Yan Liang

欠落しているdllプロパティを調べたところ、アセンブリ名がデフォルトの名前空間と同じ名前であることがわかりました。次に、アセンブリ名を別の名前に変更して、問題を解決しました。

0
Claudio Santos

マシン上の新しいフォルダーにクリーンチェックアウトを行うと、そこでも機能しますか?

ほとんどの場合、これらの問題は、ローカルでは利用できるがソース管理では利用できないものへの参照があるために発生します。これは、プロジェクトの構築に必要なすべてのものが正しく参照され、ソース管理下にあるかどうかを確認するための良いチェックです。

0
thekip

AnyCPUとPrefer-32ビットを使用してみましたが、それでも機能しませんでした。また、Prefer-32ビットをチェックせずにAnyCPUで試しましたが、何も機能しませんでした。 Bambooを使用してコードをデプロイするときにこの問題が発生していました。 パッケージがすべてコードにチェックインされている(bambooでのnugetの復元に問題があるため)を確認し、プロジェクト内のdll参照がパス内のパッケージを参照していることを確認しました。 .gitignoreファイルから/ packagesを削除して、パッケージをチェックインしました。また、プロジェクト内のpackages.configファイルを更新して、使用するパッケージとバージョンについて言及しました。例:また、展開タスクが実行されているエージェントに、必要な.NETFrameworkバージョンがあることを確認します。上記のすべての変更により、この参照の問題を解決できました。

0
Hari

私も同じ問題を経験しました。

MSBuildとJenkinsを介してソリューションファイルを実行するときにMSBuildが欠落しているアセンブリ参照をスローする理由は本当に疑わしいですが、Visual Studioの魅力のように機能します。2日間戦った後、この結論を見つけました。

最初にVisualStudioを介してソリューションファイルを実行し、次にソリューションファイルを実行するバッチスクリプトを作成しました。正常に動作していません。

必要なのは、バッチスクリプトを呼び出してから、MSBuild/Jenkinsを実行することだけです。

バッチスクリプト:

cd C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\Common7\IDE devenv "C:\ Program Files(x86)\ Jenkins\workspace\TFS\Product\Solution.sln"/Rebuild

devenv:コマンドラインでVisualStudioを実行します。

注:サーバーでMSBuild/Jenkinsを実行している場合は、VisualStudioが本当に必要です。

これに関する問題があれば私にメールしてください........。

デバッグモードは正常に機能し、両方ともVisual Studioで機能したにもかかわらず、リリースモードでMSBuildを使用してソリューションをビルドしたときに、このエラーメッセージが表示されました。ソリューション設定で、プロジェクトが「リリース|混合プラットフォーム」または「リリース|任意のCPU」用にビルドされるように構成されていないことが判明しました。

0
marsze

また、VSからビルドすることは、単にmsbuildを使用することと必ずしも同じではないという問題も経験しました。次に私を助けたのは、msbuild実行(/ flスイッチ)のログを作成し、ログを確認してビルド手順を追跡し、問題のあるタスクを見つけようとすることです。

0
ZFE