MSBuild在运行时导入可更改的项目

MSBuild在运行时导入可更改的项目,msbuild,msbuild-task,msbuild-4.0,Msbuild,Msbuild Task,Msbuild 4.0,我有一个msbuild脚本:Msi.msbuild,它导入变量.msbuild项目: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="CreateInstaller"> <Import Project="$(RedistDir)\Framework\Variables.msbuild" /> <Project> Msi.msbu

我有一个msbuild脚本:Msi.msbuild,它导入变量.msbuild项目:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="CreateInstaller">

  <Import Project="$(RedistDir)\Framework\Variables.msbuild" />
<Project>

Msi.msbuild在另一个msbuild脚本中多次生成:BuildMsi.msbuild

  <Target Name="CreateEnvironmentSpecificInstaller" DependsOnTargets="$(SpecificBuildSteps)">
    <Message Text="Write installer to $(OutputDir)" />
    <MSBuild Projects="$(RedistDir)\Framework\Msi.msbuild" Targets="CreateBatchScripts" StopOnFirstFailure="true" Properties="Configuration=$(Configuration);" RebaseOutputs="true" />
  </Target>

每次更改Variables.msbuild的内容时,都会多次调用目标CreateEnvironmentSpecificInstaller

但我看到变量中只有属性的第一个值用于所有运行时间,似乎它不再被导入,而不是第一个


请告诉我如何强制重新导入变量?

谢谢wkl的回答,基于那篇文章中的想法,我尝试重命名变量文件并导入这些变量,以防止缓存。

如何确保Variables.msbuild在您希望的时候被更改?您的脚本会更改文件吗?是的,我有一个脚本可以使用Xml.XslTransform更改它。就在这行之前,您是在命令行还是在VisualStudio中运行它?我在命令行中运行。VisualStudio中也存在类似的问题,但它可能也对您有所帮助?基本上是强制VS不缓存导入的文件。