Динамическое имя сборки MSBuild

Как я могу динамически изменить 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>

но не удалось.


person adontz    schedule 13.08.2012    source источник


Ответы (1)


Поскольку статические свойства обрабатываются до выполнения каких-либо целей, ваша цель изменила значение $(AssemblyBaseName), но только после того, как было установлено значение статически объявленного $(AssemblyName) — с использованием исходного значения $(AssemblyBaseName).

Вам также необходимо динамически переопределить $(AssemblyName) (внутри вашей цели).

Кроме того, вы переопределили цель «Построить». Я не уверен, как будет собираться эта сборка, вам нужно использовать цель с другим именем и убедиться, что она выполняется до любого использования $(AssemblyName) обычным конвейером сборки.

person Brian Kretzler    schedule 13.08.2012