MSBuild动态AssemblyName

时间:2012-08-13 09:03:10

标签: msbuild msbuild-4.0

如何根据某个文件的内容动态更改AssemblyName?

例如,我有一个名为“AssemblyBaseName.txt”的文件,其中包含“Abcd”字符串我希望我的汇编DLL / EXE名称为Abcd.Common.dll,其中“Common”是常量。

我试过像这样使用ReadLinesFromFile

  <Target Name="Build">
    <ItemGroup>
      <AssemblyBaseNameFile Include="Test.txt"/>
    </ItemGroup>
    <ReadLinesFromFile File="@(AssemblyBaseNameFile)">
      <Output TaskParameter="Lines" ItemName="AssemblyBaseName" />
    </ReadLinesFromFile>
    <Message Text="AssemblyBaseName: $(AssemblyBaseName)" />
  </Target>
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
    <ProductVersion>9.0.30729</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{FEE469DB-44BD-4CD9-BA08-91F1DFDE9679}</ProjectGuid>
    <OutputType>Exe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Common</RootNamespace>
    <AssemblyName Condition=" '$(AssemblyName)' == '' ">$(AssemblyBaseName).Common</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>

但没有成功。

1 个答案:

答案 0 :(得分:2)

您的目标更改了$(AssemblyBaseName)的值,但仅在使用原始值$(AssemblyBaseName)设置静态声明的$(AssemblyName)的值之后,因为在执行任何目标之前处理静态属性。您还需要动态(在目标内)重新定义$(AssemblyName)。此外,您已覆盖“构建”目标。我不确定这个程序集将如何构建,你需要使用一个不同命名的目标,并确保它在正常构建管道使用$(AssemblyName)之前执行。