代码之家  ›  专栏  ›  技术社区  ›  Nathan

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

  •  4
  • Nathan  · 技术社区  · 13 年前

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

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

    该解决方案是使用带有如下任务的msbuild生成的:

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

    奇怪的是:

    如果我:

    1. 运行构建脚本(例如c:\myworkingcopy)
    2. 重命名工作副本文件夹(对c:\yourWorkingCopy说)
    3. 再次运行生成脚本

    在步骤3中,xcopy将失败,因为它将尝试从“c:\myworkingcopy”复制文件-当然,解决方案文件现在不在该位置。

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

    (我正在使用.NET Framework 3.5)

    1 回复  |  直到 13 年前
        1
  •  2
  •   Benjamin Baumann    13 年前

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