ссылки на задачи сообщества msbuild через относительный путь - PullRequest
2 голосов
/ 25 ноября 2011

Последние 2 дня я потратил, пытаясь понять, как использовать задачу SvnInfo в пакете задач сообщества MSBuild относительно.Это работает на моей машине, потому что я использовал установщик.Хотя, конечно, я должен быть в состоянии заставить его работать с относительным путем.Если я не установлю пакет на CI-сервере, я смогу сохранить пакет в svn, и когда ci-сервер получит весь код для его сборки, сценарий сборки, который я написал, похоже, попытается ссылаться на задачии dll и т. д. с диска c: где он обычно устанавливается, но не существует.Я не уверен почему.Даже если я использую свойство для ссылки на относительную задачу, а затем ссылаюсь на свойство по всей задаче, оно все равно кажется ошибочным.

Я хочу получить номер ревизии SVN из Subversion (наша SVN), а затем обновить номер ревизии сборки.Так что мы можем связать то, что было реализовано, с тем, что было изменено для этого выпуска.В той небольшой документации, которую я мог найти для пакета сообщества msbuild, говорилось, что я должен использовать только клиент, но единственной, которую я смог найти для использования, был slik 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>

Ответы [ 2 ]

4 голосов
/ 03 апреля 2013

Чтобы сослаться на MSBuild Community Task с относительным путем к сборке, попробуйте добавить это вверху:

<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 '.

2 голосов
/ 25 ноября 2011

У меня следующая структура каталогов в системе контроля версий:

\BuildScripts\Bin\
\BuildScripts\Scripts\

Я установил Задачи сообщества 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.

...