通过相对路径引用msbuild社区任务
在过去的两天里,我一直在试图弄清楚如何在MSBuild社区任务包中使用SvnInfo任务。它在我的机器上工作,因为我使用了安装程序。当然,我应该能够使它以相对的方式工作。如果我没有在CI服务器上安装包,我应该能够将包存储在svn中,并且当CI服务器获得构建它的所有代码时,我编写的构建脚本似乎试图引用通常安装但不存在的c:驱动器上的任务和DLL等。我不知道为什么。即使我使用属性引用相对任务,然后在整个任务中引用该属性,它似乎仍然会出错 我想从subversion(我们的svn)检索svn修订号,然后更新程序集修订号。因此,我们可以将实现的内容与该版本的变更集联系起来。我能找到的关于msbuild社区包的一点文档都说我应该只使用客户机,但我能找到的唯一可以使用的是slik svn。它似乎在本地工作,但不知何故,这也感觉不对劲。。。我应该坚持使用同样的svn吗 如果任何人有任何建议或改进或链接,他们能够找到,我不能。。。非常感谢通过相对路径引用msbuild社区任务,msbuild,continuous-integration,msbuildcommunitytasks,Msbuild,Continuous Integration,Msbuildcommunitytasks,在过去的两天里,我一直在试图弄清楚如何在MSBuild社区任务包中使用SvnInfo任务。它在我的机器上工作,因为我使用了安装程序。当然,我应该能够使它以相对的方式工作。如果我没有在CI服务器上安装包,我应该能够将包存储在svn中,并且当CI服务器获得构建它的所有代码时,我编写的构建脚本似乎试图引用通常安装但不存在的c:驱动器上的任务和DLL等。我不知道为什么。即使我使用属性引用相对任务,然后在整个任务中引用该属性,它似乎仍然会出错 我想从subversion(我们的svn)检索svn修订号,然
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0">
<PropertyGroup>
<RevisionNumber Condition=" '$(RevisionNumber)' == '' ">x</RevisionNumber>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
</PropertyGroup>
<!-- 1 -->
<Import Project=".\ThirdParty\Tools\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<UsingTask AssemblyFile=".\ThirdParty\Tools\MyMSBuildExtensions\BuildTasks.MSBuildTaks.dll"
TaskName="BuildTasks.MSBuildTasks.AssemblyInfoReader" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksPath)MSBuild.Community.Tasks.dll"
TaskName="MSBuild.Community.Tasks.Subversion.SvnInfo" />
<ItemGroup>
<!-- Required here in order to use the outDir syntax in the compile target - useage "@(BuildArtifacts)" -->
<BuildArtifacts Include=".\buildartifacts\" />
<SolutionFile Include=".\OnlineSales.sln" />
</ItemGroup>
<ItemGroup>
<NUnit Include=".\ThirdParty\Tools\NUnit\nunit-console.exe" />
<TestAssembly Include=".\buildArtifacts\OnlineSales.Tests.dll" />
<TestResults Include=".\buildartifacts\TestResults.xml" />
</ItemGroup>
<Target Name="Clean" >
<RemoveDir Directories="@(BuildArtifacts)" />
<Message Text="CLEAN COMPLETED." Importance="high" />
</Target>
<Target Name="Init" DependsOnTargets="Clean">
<MakeDir Directories="@(BuildArtifacts)" />
<Message Text="BUILDARTIFACTS DIRECTORY HAS BEEN CREATED." Importance="high" />
</Target>
<Target Name="Compile" DependsOnTargets="Init">
<SvnInfo RepositoryPath="https://cnfglfcdv01/svn/Primary/Users/kdonde/"
UserName="user"
Password="password"
ToolPath=".\ThirdParty\Tools\SlikSvn" >
<!-- 2 -->
<Output TaskParameter="Revision" PropertyName="RevisionNumber" />
</SvnInfo>
<Message Text="SVN INFO HAS BEEN EXECUTED." Importance="high" />
<Message Text="$(RevisionNumber) :================" Importance="high" />
<Message Text="$(MSBuildCommunityTasksPath) :================" Importance="high" />
<!-- 3 -->
<FileUpdate Files=".\Fit4Less.OnlineSales\Properties\AssemblyInfo.cs"
Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)"
ReplacementText="$1.$2.$3.$(RevisionNumber)" />
<Message Text="AssemblyInfo.cs has been updated with version info." />
<MSBuild Projects="@(SolutionFile)"
Targets="Rebuild"
Properties="OutDir=%(BuildArtifacts.FullPath);Configuration=$(Configuration)" />
<Message Text="BUILD HAS COMPLETED."
Importance="high" />
</Target>
<!-- 4 -->
<Target Name="Deploy"
DependsOnTargets="Compile">
<AssemblyInfoReader Path=".\OnlineSales\Properties\AssemblyInfo.cs"
Property="AssemblyVersion" >
<Output TaskParameter="Value"
ItemName="Version" />
</AssemblyInfoReader>
<Message Text="ASSEMBLYINFOREADER HAS COMPLETED."
Importance="high" />
</Target>
<Target Name="Test" DependsOnTargets ="Compile">
<Exec Command="@(NUnit) @(TestAssembly) /xml=@(TestResults)" />
<Message Text="UNIT TESTS HAVE COMPLETED."
Importance="high" />
</Target>
</Project>
x
调试
关于源代码管理,我有以下目录结构:
\BuildScripts\Bin\
\BuildScripts\Scripts\
我在本地PC上安装了MsBuild社区任务,并将所有相关文件移到\BuildScripts\Bin\文件夹中。在脚本中,我使用MSBuild.Community.Tasks.Targets文件的相对路径
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<!-- Import Community Tasks -->
<Import Project="..\Bin\MSBuild.Community.Tasks.Targets"/>
<Target Name="Compile">
<SvnInfo RepositoryPath="https://cnfglfcdv01/svn/Primary/Users/kdonde/"
UserName="user"
Password="password"
ToolPath=".\ThirdParty\Tools\SlikSvn" >
<Output TaskParameter="Revision" PropertyName="RevisionNumber" />
</SvnInfo>
<Message Text="SVN INFO HAS BEEN EXECUTED." Importance="high" />
<Message Text="$(RevisionNumber) :================" Importance="high" />
<Message Text="$(MSBuildCommunityTasksPath) :================" Importance="high" />
</Target>
</Project>
在构建服务器上,我在构建之前从源代码管理中获取BuildScripts文件夹。然后,我在BuildScripts\scripts文件夹中执行我的脚本,它正在工作。这也可以在本地为我们团队中的其他开发人员工作,而无需安装MsBuild社区任务。若要将具有相对路径的MsBuild社区任务引用到程序集,请尝试在顶部添加:
<PropertyGroup>
<MSBuildCommunityTasksPath>.</MSBuildCommunityTasksPath>
</PropertyGroup>
<Import Project="packages\MSBuildTasks.1.4.0.56\tools\MSBuild.Community.Tasks.Targets" />
.
Import
引入了所有UsingTask
,这些任务指向位于$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.dll的程序集,其中MSBuildCommunityTasksPath
是相对于“.Targets”项目文件的。这不是我现在正在做的事情。。。我不明白你上面提到的和我现在做的有什么不同?有什么不同?或者你们只是在确认我所做的应该是有效的?我试着在工作样本上向你们展示它对我是如何起作用的。它也应该以这种方式为您工作。SvnInfo的UsingTask
指向已安装的任务程序集($(MSBuildCommunityStaskspath)MSBuild.Community.tasks.dll
),此时它应该像AssemblyInfoReader中的路径一样完成。这是正确的答案。设置该属性至关重要,如果未设置该属性,则默认情况下会按照文件MSBuild.Community.Tasks.Targets中的逻辑在C:\Program Files中进行搜索。