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>

但没有成功。

4

1 回答 1

2

由于在执行任何目标之前处理静态属性,因此您的目标更改了 $(AssemblyBaseName) 的值,但仅在设置静态声明的 $(AssemblyName) 的值之后 - 使用 $(AssemblyBaseName) 的原始值。

您还需要动态地重新定义 $(AssemblyName) (在您的目标内)。

此外,您已经覆盖了“构建”目标。我不确定这个程序集将如何构建,您需要使用不同命名的目标,并确保它在正常构建管道对 $(AssemblyName) 的任何使用之前执行。

于 2012-08-13T15:03:42.653 回答