在MSBuild中的属性更改时强制生成

在MSBuild中的属性更改时强制生成,msbuild,Msbuild,我已设置了生成,以便可以将数字作为生成属性传入: msbuild MyProject.sln /t:Build /p:Configuration="Debug" /p:SomeNumber="123" MSBuild项目生成文件并通过以下方式添加: <Compile Include="$(SomeFileContainingSomeNumber)" /> 仅当指定了SomeNumber时,才会生成此文件 当我更改或忽略数字并再次生成时,MSBuild项目不会使用新值重新生成。

我已设置了生成,以便可以将数字作为生成属性传入:

msbuild MyProject.sln /t:Build /p:Configuration="Debug" /p:SomeNumber="123"
MSBuild项目生成文件并通过以下方式添加:

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

仅当指定了
SomeNumber
时,才会生成此文件

当我更改或忽略数字并再次生成时,MSBuild项目不会使用新值重新生成。我相信这是因为所有的项目文件都没有改变


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

我使用的是MSBuild 3.5。似乎在构建
目标
之前将
条件
放在
上会干扰其执行。当我将
条件
目标
移动到目标中的单个操作时,我能够获得所需的行为

使用以下命令,无论
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>

SomeFile.cs

行=“/”
是必需的,因为如果您不在其中放置任何内容或空白,则
WriteListFile
将删除该文件。

为什么不只指定您想要的目标,例如
/t:“Clean;Build”
我想进行增量生成。我不想在单个C#文件发生更改时重建整个解决方案或整个项目。您可以查看