0

我已经设置了构建,以便可以将数字作为构建属性传递:

msbuild MyProject.sln /t:Build /p:Configuration="Debug" /p:SomeNumber="123"

MSBuild 项目生成一个文件并通过以下方式添加它:

<Compile Include="$(SomeFileContainingSomeNumber)" />

SomeNumber仅在指定时才会生成此文件。

当我更改或省略数字并第二次构建时,MSBuild 项目不会使用新值重新构建。我相信这是因为项目文件都没有改变。

如何设置我的项目以便更改SomeNumber属性触发重建?

4

1 回答 1

1

我正在使用 MSBuild 3.5。似乎将 a 放在 aConditionBeforeBuild Target会干扰其执行。当我ConditionTarget目标中的单个动作移动时,我能够获得所需的行为。

SomeNumber使用以下内容,无论属性是否更改,我都能让 MSBuild 每次都能正确编译。该项目可能SomeFile.cs每次都在重建,无论其内容是否已更改,因为其时间戳正在更改。

<PropertyGroup>
    <SomeFile>SomeFile.cs</SomeFile>
</PropertyGroup>
<Target Name="BeforeClean">
    <Delete Files="$(SomeFile)" />
</Target>
<Target Name="BeforeBuild">
    <WriteLinesToFile Condition="'$(SomeNumber)' == ''" File="$(SomeFile)" Lines="//" Overwrite="true" />
    <WriteLinesToFile Condition="'$(SomeNumber)' != ''" File="$(SomeFile)" Lines="$(SomeNumber)" Overwrite="true" />
</Target>
<ItemGroup>
    <Compile Include="$(SomeFile)" />
</ItemGroup>

Lines="//"是必需的,因为WriteLinesToFile如果您在此处不放任何内容或空格,则会删除该文件。

于 2012-10-08T14:49:47.080 回答