用msbuild在.csproj文件中使用$(SolutionDir)出现错误行为

4

我有一个.sln解决方案文件,引用了一个.csproj项目文件,该文件具有类似于以下内容的构建后任务:

<PropertyGroup>
    <PostBuildEvent>
        xcopy $(SolutionDir)\dir1\Somefle.xml  $(ProjectDir) /Y /I
    </PostBuildEvent>
</PropertyGroup>

该解决方案是使用类似以下任务的msbuild构建的:

该解决方案是使用类似以下任务的msbuild构建的:

<Target Name="CompileSolution">
    <MSBuild Projects="@(SolutionToBuild)" Targets="Rebuild" Properties="Platform=Any CPU" />
</Target>

现在有一个奇怪的问题:
如果我:
1. 运行构建脚本(比如c:\MyWorkingCopy) 2. 重命名工作副本文件夹(比如改为c:\YourWorkingCopy) 3. 再次运行构建脚本
在第三步中,xcopy会失败,因为它会尝试从“c:\MyWorkingCopy”复制文件,而这当然不是解决方案文件现在所在的位置。
为什么msbuild会使用旧的解决方案目录?是否有一种方法可以重置它?
(我正在使用.NET Framework 3.5)

在执行msbuild期间,您是否在重命名工作副本文件夹名称?还是我错过了什么? - alpha-mouse
也许 MSBuild 会创建一个缓存文件,你应该删除它吗? - stijn
不,MSBuild没有创建任何带有属性的缓存文件。但你没有回答我的问题。在你的情况下,你是运行了一次还是两次MSBuild? - alpha-mouse
@Benjamin Baumann - 你是正确的。如果你想把你的评论转化为答案,我会接受它。 - Nathan
谢谢,我已经转换了它,尽管我并没有对msbuild sln.cache过程有很深刻的理解,也无法准确地解释你的问题。 - Benjamin Baumann
显示剩余3条评论
1个回答

2

这可能与使用msbuild构建sln文件时创建的sln.cache文件有关(它是从sln文件构建的临时proj文件),如果存在或者sln没有修改,则可以使用sln.cache文件...我不太确定,但我认为它可能会有所帮助。


在初始构建之后,确实有一些sln.cache文件残留。删除它们解决了问题。 - Nathan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接