使用MSBuild更新程序集信息失败

时间:2008-12-03 14:49:26

标签: vb.net msbuild

全部

我正在尝试使用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 :(得分:0)

我认为您缺少AssemblyInfo任务上AssemblyInfoFiles属性的规范。以下是我正在研究的项目的样子......

<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构建标签放入Assembly Description字段,以便我们可以轻松地告诉它哪个团队构建组件来自。