Не удается обновить информацию о сборке с помощью MSBuild - PullRequest
0 голосов
/ 03 декабря 2008

Все

Я пытаюсь автоматически обновить информацию о сборке проекта с помощью задачи AssemblyInfo, но перед сборкой цель, похоже, ничего не делает (без сбоев / ошибок), просто без обновления / создания

Ниже приведен файл build.proj, который я использую (очевидно, изменено некоторое содержимое)

Кто-нибудь может помочь?

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build"  
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\AssemblyInfoTask\Microsoft.VersionNumber.targets"/>
  <PropertyGroup>
    <Major>1</Major>
    <Minor>0</Minor>
    <Build>0</Build>
    <Revision>0</Revision>
  </PropertyGroup>
  <PropertyGroup>
    <BuildDir>C:\svn\Infrastructure</BuildDir>
  </PropertyGroup>

  <ItemGroup>
    <SolutionsToBuild Include="Infrastructure.sln"/>
  </ItemGroup>

  <Target Name="Build" DependsOnTargets="ChangeDataAccessAssemblyInfo">
    <RemoveDir Directories="$(BuildDir)\Builds" Condition="Exists('$(BuildDir)\Builds')" />
    <MSBuild Projects="@(SolutionsToBuild)" Properties="Configuration=Debug" Targets="Rebuild" />
  </Target>

  <ItemGroup>
    <TestAssemblies Include="Build\Logging\Logging.UnitTests.dll" />
  </ItemGroup>

  <!--<UsingTask TaskName="NUnit" AssemblyFile="$(teamcity_dotnet_nunitlauncher_msbuild_task)" />
  <Target Name="Test" DependsOnTargets="Build">
    <NUnit NUnitVersion="NUnit-2.4.6" Assemblies="@(TestAssemblies)" />
  </Target>-->

  <Target Name="ChangeDataAccessAssemblyInfo" >
    <Message Text="Writing ChangeDataAccessAssemblyInfo file for 1"/>
    <Message Text="Will update $(BuildDir)\DataAccess\My Project\AssemblyInfo.vb" />
    <AssemblyInfo CodeLanguage="VB"
       OutputFile="$(BuildDir)\DataAccess\My Project\AssemblyInfo_new.vb"                
       AssemblyTitle="Data Access Layer"
       AssemblyDescription="Message1"
       AssemblyCompany="http://somewebiste"
       AssemblyProduct="the project"
       AssemblyCopyright="Copyright notice"
       ComVisible="true"
       CLSCompliant="true"
       Guid="hjhjhkoi-9898989"
       AssemblyVersion="$(Major).$(Minor).1.1"
       AssemblyFileVersion="$(Major).$(Minor).5.7"
       Condition="$(Revision) != '0' "
       ContinueOnError="false" />

    <Message Text="Updated Assembly File Info" 
             ContinueOnError="false"/>
  </Target>  
</Project>

1 Ответ

0 голосов
/ 04 декабря 2008

Я думаю, что вам не хватает спецификации атрибута AssemblyInfoFiles в вашей задаче AssemblyInfo. Вот как это выглядит для проекта, над которым я работаю ...

<Target Name="AfterGet">
    <Message Text="In After Get"/>

    <CreateItem Include="$(SolutionRoot)\Source\SomeProject\My Project\AssemblyInfo.vb">
        <Output ItemName="AssemblyInfoFiles" TaskParameter="Include"/>
    </CreateItem>

    <Attrib Files="@(AssemblyInfoFiles)"
            ReadOnly="false"/>

    <AssemblyInfo AssemblyInfoFiles="@(AssemblyInfoFiles)"
        AssemblyDescription="$(LabelName)">
    </AssemblyInfo>
</Target>

Сначала мы используем для создания свойства, которое содержит имя файла, который мы будем обновлять. Мы должны сделать это через createItem, потому что, когда мы запускаем сборку, файл не существует (и именно тогда MSBuild оценивает определения и определения в вашем файле сборки.

Затем мы снимаем бит readonly с файла.

Наконец, мы вызываем задачу AssemblyInfo, передавая ей файл (ы) для обновления и настраиваемое имя сборки, которое мы хотим ему дать (в этом случае мы помещаем метку сборки TFS в поле Описание сборки, чтобы мы могли легко определить из какой команды была собрана сборка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...