.net ItemGroup中的MSBuild通配符有时扩展,有时不扩展';T
我有一个msbuild脚本,我正试图通过jenkins运行该脚本,基于通配符扩展,它有时成功,有时失败。这是脚本的主体:.net ItemGroup中的MSBuild通配符有时扩展,有时不扩展';T,.net,jenkins,msbuild,.net,Jenkins,Msbuild,我有一个msbuild脚本,我正试图通过jenkins运行该脚本,基于通配符扩展,它有时成功,有时失败。这是脚本的主体: <?xml version="1.0" encoding="utf-8"?> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="FinalCopy"> <PropertyGroup> <Configura
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="FinalCopy">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Dev</Configuration>
<BuildPlatform Condition=" '$(BuildPlatform)' == '' ">Any CPU</BuildPlatform>
<DeployDir>$(MSBuildThisFileDirectory)Deploy_$(Configuration)</DeployDir>
<BuildOutput>$(DeployDir)\Build_Output</BuildOutput>
<AdminDir>$(DeployDir)\Admin</AdminDir>
<TempDir>$(DeployDir)\Temp</TempDir>
<SolutionFile>$(MSBuildThisFileDirectory)MyApplication.sln</SolutionFile>
<NUnitConsole>C:\Program Files\NUnit 2.6.3\bin\nunit-console.exe</NUnitConsole>
<AdminConfigLocation>$(ConfigRepo)\Admin\$(Configuration)</AdminConfigLocation>
<WebConfig>$(AdminConfigLocation)\Web.config</WebConfig>
</PropertyGroup>
<ItemGroup>
<TestConfigs Include="$(AdminConfigLocation)\MyApplication.*.Tests.dll.config" />
<TestResultsPath Include="$(DeployDir)\TestResults.xml" />
<ProjectsToBuild Include="$(SolutionFile)">
<AdditionalProperties>
VisualStudioVersion=$(VisualStudioVersion);
Configuration=$(Configuration);
OutputPath=$(BuildOutput);
WebPublishMethod=FileSystem;
publishUrl=$(TempDir);
DeleteExistingFiles=True;
DeployOnBuild=True;
DeployTarget=WebPublish;
PublishProfile=$(MSBuildThisFileFullPath);
Platform=$(BuildPlatform)
</AdditionalProperties>
</ProjectsToBuild>
</ItemGroup>
<ItemGroup>
<TestDlls Include="$(BuildOutput)\MyApplication.*.Tests.dll" />
</ItemGroup>
<Target Name="FinalCopy" DependsOnTargets="RunUnitTests">
<Message Text="Moving files to final destination" Importance="high" />
<Exec Command='move "$(TempDir)" "$(AdminDir)"' />
<Message Text="Finished moving files to final destination" Importance="high" />
</Target>
<!-- This target runs the unit tests and publishes the results -->
<Target Name="RunUnitTests" DependsOnTargets="CopyTestConfigs">
<Exec Command='"$(NUnitConsole)" "%(TestDlls.Identity)" /xml="@(TestResultsPath)"' />
</Target>
<!-- This target copies config files for tests from our config repo -->
<Target Name="CopyTestConfigs" DependsOnTargets="CopyWebConfig">
<Message Text="Copying test configuration files" Importance="high" />
<Copy SourceFiles="@(TestConfigs)" DestinationFolder="$(BuildOutput)" />
<Message Text="Finished copying test configuration files" Importance="high" />
</Target>
<!-- This target copies the web.config files from our config repo -->
<Target Name="CopyWebConfig" DependsOnTargets="DeployAdmin">
<Message Text="Copying web configuration files" Importance="high" />
<Copy SourceFiles="$(WebConfig)" DestinationFolder="$(TempDir)" />
<Message Text="Finished copying web configuration files" Importance="high" />
</Target>
<!-- This target builds and deploys the admin application to a temp folder -->
<Target Name="DeployAdmin" DependsOnTargets="Init">
<Message Text="Copying admin files" Importance="high" />
<MSBuild Projects="@(ProjectsToBuild)" />
<Message Text="Finished copying admin files" Importance="high" />
</Target>
<!-- This target creates the directory in which deployment files are going to be held -->
<Target Name="Init" DependsOnTargets="Clean">
<Message Text="Making deployment directory" Importance="high" />
<MakeDir Directories="$(DeployDir)" />
<Message Text="Finished making deployment directory" Importance="high" />
</Target>
<!-- This target removes any existing build/deploy artifacts -->
<Target Name="Clean">
<Message Text="Removing existing deployment directory" Importance="high" />
<RemoveDir Directories="$(DeployDir)" />
<Message Text="Finished removing existing deployment directory" Importance="high" />
</Target>
</Project>
发展
任何CPU
$(MSBuildThisFileDirectory)部署$(配置)
$(DeployDir)\Build\u输出
$(部署目录)\Admin
$(部署目录)\Temp
$(MSBuildThisFileDirectory)MyApplication.sln
C:\Program Files\NUnit 2.6.3\bin\NUnit-console.exe
$(ConfigRepo)\Admin\$(配置)
$(AdminConfigLocation)\Web.config
VisualStudioVersion=$(VisualStudioVersion);
配置=$(配置);
OutputPath=$(BuildOutput);
WebPublishMethod=文件系统;
publishUrl=$(TempDir);
DeleteExistingFiles=True;
DeployOnBuild=True;
DeployTarget=WebPublish;
PublishProfile=$(MSBuildThisFileFullPath);
平台=$(构建平台)
导致问题的线路如下所示:
<Exec Command='"$(NUnitConsole)" "%(TestDlls.Identity)" /xml="@(TestResultsPath)"'
我找到了一个解决这个问题的方法,它实际上是一个更干净的解决方案。我更改了名为RunUnitTests的目标:
<!-- This target runs the unit tests and publishes the results -->
<Target Name="RunUnitTests" DependsOnTargets="CopyTestConfigs">
<ItemGroup>
<TestDlls Include="$(BuildOutput)\MyApplication.*.Tests.dll" />
</ItemGroup>
<Exec Command=""$(NUnitConsole)" @(TestDlls->'"%(FullPath)"', ' ') /xml="@(TestResultsPath)"" />
</Target>
这样做的好处是,所有测试(位于不同的DLL中)都会立即传递到对NUnit的调用中,并且所有测试的结果都会输出到结果文件中。我已经在本地和我们的构建服务器上对此进行了测试,它工作正常。我遇到了类似的问题:
<ItemGroup>
<NuGetPackageConfigs Include="../**/packages.config " />
</ItemGroup>
<Target Name="LoadNuGetPackages">
<Message Importance="high" Text="%0ARetrieving packages for %(NuGetPackageConfigs.Identity)" />
<PropertyGroup>
<Comm>nuget install %(NuGetPackageConfigs.Identity) -o packages"</Comm>
</PropertyGroup>
<Exec Command="$(Comm)" />
</Target>
nuget安装%(NuGetPackageConfigs.Identity)-o程序包“
当我从jenkins working dir:C:\Program Files(x86)\jenkins\jobs\project\workspace运行localy时,
msbuild未解析../**/packages.config。
当我从C:\ProgramFiles(x86)\a\project运行它时,它可以工作
我改成
<ItemGroup>
<NuGetPackageConfigs Include="../*/*/packages.config " />
<NuGetPackageConfigs Include="../*/packages.config " />
</ItemGroup>
它能工作,但它不一样,仍然不知道发生了什么。你试过在受控环境中本地运行它吗?它能工作吗?是的,我试过在jenkins的本地实例上运行它,得到了相同的结果。这是我看到的输出:RunUnitTests:“C:\Program Files\NUnit 2.6.3\bin\NUnit-console.exe“/xml=“C:\Program Files\Jenkins\workspace\admin test\Deploy\u Dev\TestResults.xml”
您可以看到项目组没有展开,而是输出一个空字符串”“因此,当您在本地执行此操作时,在生成期间在$(DeployDir)
中可以找到什么?我怀疑由于某种原因它没有被填充(可能,您的构建失败或将二进制文件放入其他目录-将构建详细性设置为detailed/diagnostic并检查日志)