web-dev-qa-db-ja.com

CIビルドの参照Microsoft.VisualStudio.QualityTools.UnitTestFramework

VS2015 RCでC#テストプロジェクトを作成しました。ローカルでビルドしますが、CIビルドサーバー(TeamCity)でビルドしようとすると、エラーで失敗します。

UnitTest1.cs(2,17):エラーCS0234:名前空間名 'VisualStudio'が名前空間 'Microsoft'に存在しません(アセンブリ参照がありませんか?)[... .Tests.csproj] UnitTest1.cs (9,10):エラーCS0246:タイプまたは名前空間名 'TestMethod'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)[... .Tests.csproj]

明らかにこれは、これらの名前空間(_Microsoft.VisualStudio.QualityTools.UnitTestFramework_)を含むアセンブリがビルドサーバーにないためです。私のローカルマシンではC:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dllにあります。

アセンブリをコードベースの一部になるようにソリューションにコピーすることもできますが、手動でファイルを移動するのはちょっとエレガントなハックのように感じます。私はnugetを探し回って http://www.nuget.org/packages/Microsoft.VisualStudio.QualityTools.UnitTestFramework/ を見つけました。

Install-Package:パッケージ 'Microsoft.VisualStudio.QualityTools.UnitTestFramework 11.0.50727.1'をインストールできませんでした。 '.NETFramework、Version = v4.5.2'をターゲットとするプロジェクトにこのパッケージをインストールしようとしていますが、パッケージには、そのフレームワークと互換性のあるアセンブリ参照またはコンテンツファイルが含まれていません

これを解決する最善の方法は何ですか? VS2015でテストプロジェクトを作成しても、必要なすべての依存関係が自動的には含まれないことに驚いていますが、おそらく私は世間知らずです(私は生まれつきのドットネットのようなものです)。

32
jamiet

答えは eng.augustoの答え のオプション1に似ています。
Microsoftは、Microsoft.VisualStudio.QualityTools.UnitTestFrameworkの最新バージョンのNuGetを提供していませんが、Visual Studioの一部として提供しています( 通常は C:\ Program Files(x86 )\ Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

ソリューションのサブフォルダーとしてフォルダーMicrosoft.VisualStudio.QualityToolsを作成し、コピーしました

Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll Microsoft.VisualStudio.QualityTools.UnitTestFramework.xml

ファイルはソースコントロールに追加する必要があります(DLLが通常無視されている場合でも)。
その後、Test.csprojの参照を変更して、新しい場所を参照しました。

3

うーん、いくつかのアイデアがあるので、あなたのニーズに最適なものを選んでください

  1. 簡単な答えは、DLLをマークしてローカルをコピーし、ソリューションの同じフォルダー内のAssembliesのようなフォルダーを使用して、「Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll」を参照することです。
  2. ビルドサーバーにVisual Studioをインストールします。不自然に聞こえますが、それはあなたが持っている「開発機」に最も近いものです。
  3. GACのDLL をインストールすると、これに悩む必要がなくなります。
  4. NuGetパッケージを修正し(.NET Frameworkバージョンの参照を追加)、それを使用します。
  5. NuGetパッケージを使用できるように、.NET Frameworkバージョンをダウングレードします。
  6. 独自のNuGetサーバーを作成してください! (必要なDLLの参照を追加します)。

私見最初の答えを選びます。NuGetを使用してすべてのパッケージの問題を解決するのが「最善の方法」のようですが、DLLそれは信頼されるべきです。

CやC++などの「古い」言語で使用されているシステムでは、ソースコードと、コードの実行に必要なライブラリをダウンロードするのが一般的であるため、NuGetパッケージは最適なソリューションではないと思います。

最初のオプションを使用すると、常に同じバージョンがあり、ファイルのMD5をチェックして、ビルドサーバーで何が実行されているかを正確に知ることができます。

多分、本当の最良の選択肢は6でしょう。独自のNuGetサーバーを使用してDLLを処理すると、ライブがより素晴らしい信頼できるものになります。

2
eng.augusto

VS 2017で作成されたプロジェクトの場合。NugetパッケージMicrosoft.VisualStudio.QualityTools.UnitTestFramework.Updatedを追加すると、ビルドサーバーにVSがインストールされていないCIで単体テストプロジェクトをビルドできます。

enter image description here

2
Robo Burned

ITチームから開発サーバーからVS2013をアンインストールするように依頼された後、CI/CDプロセスを介して開発サーバーでMSBuildを使用しようとすると、この問題が発生しました。

私のビルド出力では、Word Consideredの行が数行ありました。これが意味することは、ファイルが置かれている可能性のある場所のフォルダーをビルドが検討していることです。これらの行の1つは次のとおりです。

Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll", but it didn't exist.

私はMicrosoft.VisualStudio.QualityTools.UnitTestFramework.dllをローカルマシンから開発サーバー上のそのフォルダーにコピーし、エラーは解消しました。

0
Versatile