.csproj文件中带有msbuild的$(SolutionDir)的奇怪行为是错误的

.csproj文件中带有msbuild的$(SolutionDir)的奇怪行为是错误的,msbuild,Msbuild,我有一个.sln解决方案文件,该文件引用了一个.csproj项目文件,该项目文件具有类似以下内容的生成后任务: <PropertyGroup> <PostBuildEvent> xcopy $(SolutionDir)\dir1\Somefle.xml $(ProjectDir) /Y /I </PostBuildEvent> </PropertyGroup> xcopy$(SolutionDir)\dir1\

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

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

xcopy$(SolutionDir)\dir1\Somefle.xml$(ProjectDir)/Y/I
该解决方案是使用msbuild生成的,其任务如下:

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

现在有一个奇怪的部分:

如果我:

  • 运行构建脚本(比如c:\MyWorkingCopy)
  • 重命名工作副本文件夹(例如c:\YourWorkingCopy)
  • 再次运行构建脚本
  • 在步骤3中,xcopy将失败,因为它将尝试从“c:\MyWorkingCopy”复制文件,而“c:\MyWorkingCopy”当然不是解决方案文件现在所在的位置

    为什么msbuild使用旧的解决方案目录?有什么方法可以重置它吗


    (我使用的是.NET Framework 3.5)

    它可能与生成sln文件时由msbuild创建的sln.cache文件有关(它是从sln文件生成的临时项目文件),如果存在或未修改sln,则可以使用sln.cache文件。。。我真的不知道,但我认为这可能会有所帮助。

    在执行msbuild期间,是否在某处重命名工作副本文件夹名称?或者我遗漏了什么?可能msbuild创建了一个应该删除的缓存文件?不,msbuild不会创建任何具有属性的缓存文件。但是你没有回答。在您的方案中是否运行msbuild一次或两次?它可能与生成sln文件时由msbuild创建的sln.cache文件有关(它是从sln文件生成的临时项目文件),如果存在该文件或sln未修改,则可以使用sln.cache文件。。。我真的不知道,但我认为这会有帮助。@alpha-mouse:对不起,耽搁了,我已经离开几天了。我不会在执行msbuild期间重命名工作副本生成。我遇到的奇怪行为是,如果它运行一次,然后重命名/移动工作副本,然后再次运行msbuild。sln.cache文件确实在初始生成后挂起。移除它们解决了问题。