3

次のプロジェクトを含む Azure クラウド サービスを収容する Visual Studio ソリューションがあります。

  • クラウドサービス
  • CloudServiceRole
  • テスト

Testsプロジェクトは、プロジェクト内のビジネス ロジックの単体テストを含む標準の MSTest プロジェクトですCloudServiceRole

コードは Visual Studio Online に保存され、Azure が提供する自動化された CI ビルド デプロイを接続しました。コードをチェックインすると、クラウド サービスのステージング デプロイが自動的に更新されます。ただし、Tests プロジェクトは、CI ビルド中にビルドされることさえありません。もちろん、これは、ビルド プロセスの "単体テストの実行" 部分でテストを含むアセンブリが検出されないため、ビルド中に単体テストが実行されないことを意味します。

私の目標は、これを変更して、テスト プロジェクトがビルドされ、すべての単体テストが実行されるようにすることです。

CI 展開プロセスが使用する MSBuild 引数を見ると、CloudService:Publishターゲットのみが実行されているように見えます。プロジェクトはCloudServiceプロジェクトに依存しないTestsため、MSBuild は後者をビルドすることさえありません。

私が試したこと

CloudService->Testsクラウド サービス ロール プロジェクトではないプロジェクトに依存関係を追加すると、ビルド中にエラーが発生し ( The item "C:\a\src\MyProject\Tests\Tests.csproj" in item list "ProjectReferenceWithConfiguration" does not define a value for metadata "Name".)、依存関係を追加できないため、依存関係を手動で追加できませんCloudServiceRole->Tests。循環依存関係が発生するためです。

パラメータを手動で追加して完全なソリューションをビルドするように MSBuild に指示する/t:Buildと、さらに別のエラーが発生しました。C:\a\bin\ServiceDefinition.csdef: Need to specify the physical directory for the virtual path 'Web/' of role Web.

Testsプロジェクトを別のビルド ターゲットとしてソリューションと共に追加すると、テストがビルドされます。ただし、同時に、継続的配置機能が無効になります。More than one solution found. Continuous Deployment skipped.

プロジェクトを参照しているがインスタンスが構成されていない偽のクラウド サービス ロール プロジェクトを作成しようとするとTests、ビルド エラーが発生します: WAT100: The following roles 'Tests.FakeRole' have an instance count of 0. Instance count of 0 is not supported in deployments to Microsoft Azure。この検証を無効にしようとすると、Azure SDK の欠陥が原因でビルド エラーが発生します

4

2 に答える 2

1

Buildaと a をPublish別々に実行する必要があります。VSO (現在の VSTS) プロジェクトで同じ問題に遭遇し、これで修正されました。これは、クラウド サービスが単体テスト プロジェクトに依存していないために発生します。

1) 引数付きの Visual Studio ビルド (または MSBuild) アクション/t:Build(ここでは消去)

2) 引数付きの Visual Studio Build (または MSBuild) アクション/t:Publish(ここでは消去しないでください)

注:これらのアクションを ( ではなく) 個別に実行する必要/Build;Publishがありました。そうしないと、クラウド サービスのエントリ ポイントに関するエラーが発生しました。

this questionhereおよびhereからこれをつなぎ合わせました。

于 2016-04-22T18:24:45.213 に答える
0

結果をもたらすように見える 1 つの回避策は、MSBuild より前のスクリプトをビルド定義に追加し、そのスクリプトで Tests プロジェクトを明示的にビルドすることです。

:: This is used as a pre-build script in Continuous Deployment builds because on their own, they do not build the Tests project.
"c:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" %~dp0\..\..\Tests\Tests.csproj /t:Build /p:Configuration=Debug;Platform=AnyCPU;OutDir="%~dp0\..\..\..\..\bin\\"

効果があるように見えますが、注意すべき副作用についてはよくわかりません。私の主な懸念は、このビルドのバイナリが Cloud Service ビルドのバイナリと同じディレクトリに移動することです。ここで競合が発生する可能性はありますか?

于 2014-09-02T11:28:37.147 に答える