2012-08-13 49 views
0

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

举例来说,我有一个名为“AssemblyBaseName.txt”,其中包含“ABCD”的字符串我想我的组件DLL/EXE名称是Abcd.Common.dll,其中“共同”是不变的文件。

我试着使用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> 

,但没有成功。

回答

2

你的目标改变了$(AssemblyBaseName)的值,但只有静态声明$的(的AssemblyName)的值后,使用$(AssemblyBaseName)初始值设定,因为执行的任何目标之前静态属性被处理。您需要动态地(在您的目标内)重新定义$(AssemblyName)。此外,你已经覆盖了“构建”目标。我不确定这个程序集是如何构建的,你需要使用一个不同名称的目标,并确保它在普通构建管道使用$(AssemblyName)之前执行。