0

ファイルの内容に基づいて、AssemblyName を動的に変更するにはどうすればよいですか?

たとえば、"Abcd" 文字列を含む "AssemblyBaseName.txt" という名前のファイルがあります。アセンブリ 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 に答える