CustomizableOutDir = trueは、チームビルド中にMSTest.exeを中断します
-
05-07-2019 - |
質問
CustomizableOutDirを使用する場合、TFSチームビルドがMSTest.exeを正しく起動できないという問題があります。
TFSBuild.rsp
/verbosity:diagnostic
/p:CustomizableOutDir=true
TFSBuild.proj(スニペットを構築するためのソリューション)
<!-- code -->
<SolutionToBuild Include="$(BuildProjectFolderPath)/../../foo.csproj">
<Properties>OutputPath=$(BinariesRoot)\WindowsServices\foo\</Properties>
</SolutionToBuild>
<!-- tests -->
<SolutionToBuild Include="$(BuildProjectFolderPath)/../../test/test.sln">
<Targets>t1;t2</Targets>
<Properties>OutputPath=$(BinariesRoot)\TestHarness\</Properties>
</SolutionToBuild>
<Properties>OutputPath=$(BinariesRoot)\TestHarness\</Properties>
と<Properties></Properties>
の両方で、ビルドの最後に次のエラーが表示されます:
<!> quot; C:\ build \ BuildType \ TFSBuild.proj <!> quot; (TestConfigurationターゲット)(1:12)-<!> gt; (CoreTestConfigurationターゲット)-<!> gt;
MSBUILD:警告MSB6003:は 指定されたタスク実行可能ファイル<!> quot; MSTest.exe <!> quot; 実行できませんでした。ディレクトリ名 無効です
この記事を見つけた後、私は次を追加しました:
<Target Name="AfterCompile">
<ItemGroup>
<SolutionOutputs Condition="'%(CompilationOutputs.Solution)' == '$(Solution)'" Include="%(RootDir)%(Directory)**\*.*" />
<ServiceOutputs Include="$(BinariesRoot)\WindowsServices\**\*.*" />
<TestHarnessOutputs Include="$(BinariesRoot)\TestHarness\*.*" />
</ItemGroup>
<Copy SourceFiles="@(SolutionOutputs)" DestinationFolder="$(TeamBuildOutDir)" />
<Copy SourceFiles="@(ServiceOutputs)" DestinationFolder="$(TeamBuildOutDir)" />
<Copy SourceFiles="@(TestHarnessOutputs)" DestinationFolder="$(TeamBuildOutDir)" />
</Target>
これは次のとおりです:
(AfterCompileターゲット)-<!> gt;
C:\ build \ BuildType \ TFSBuild.proj(289,5): エラーMSB3023:宛先なし コピーに指定されます。供給してください <!> quot; DestinationFiles <!> quot;または <!> quot; DestinationDirectory <!> quot;。
DestinationDirectoryはスキーマhttp://schemas.microsoft.com/developer/msbuild/2003
の一部ではありませんが、とにかく試してみようと思いました。そこで、コピータスクのすべてのDestinationFolder
をDestinationDirectory
に変更し、予想どおりこれを取得しました。
(AfterCompileターゲット)-<!> gt;
C:\ build \ BuildType \ TFSBuild.proj(288,44): エラーMSB4064: <!> quot; DestinationDirectory <!> quot;パラメータは <!> quot; Copy <!> quot;ではサポートされていません。仕事。 パラメータが存在することを確認します タスク、およびそれは設定可能なパブリックです インスタンスプロパティ。
C:\ build \ BuildType \ TFSBuild.proj(288,5): エラーMSB4063:<!> quot; Copy <!> quot;タスクができました 入力で初期化されない パラメータ。
CustomizeOutDirとMSTestがTFSチームビルドと調和して連携している人はいますか?
編集:
このディスカッションが見つかりましたおよびこの変更を適用しました:
<Target Name="BeforeTest">
<!-- The tests won't run if the binaries directory does not exist -->
<MakeDir
Directories="$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)"
Condition="!Exists('$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)')" />
</Target>
この結果:
<!> quot; C:\ build \ BuildType \ TFSBuild.proj <!> quot; (RunTestターゲット)(1:11)-<!> gt; <!> quot; C:\ build \ BuildType \ TFSBuild.proj <!> quot; (TestConfigurationターゲット)(1:12)-<!> gt; (CoreTestConfigurationターゲット)-<!> gt;
MSBUILD:警告MSB6006: <!> quot; MSTest.exe <!> quot;コード1で終了しました。
解決
これにより、tfs / mstest / msbuildが幸せになりました。
<Target Name="BeforeTest">
<!-- The tests won't run if the binaries directory does not exist -->
<MakeDir
Directories="$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)"
Condition="!Exists('$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)')" />
</Target>
テスト結果が得られないことは、展開とテストボックスの構成に関する別の問題でした。