在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#文件发生更改时重建整个解决方案或整个项目。您可以查看