首页 > 解决方案 > C++ Windows 驱动程序 MSB3030 无法复制文件 '' 因为找不到

问题描述

VS2017、SDK/WDK、C++项目

我们有一个 c++ 解决方案(驱动程序),通过 Team Foundation Services - visualstudio.com(现在称为 azure devops?)在开发人员之间共享。

当我执行获取最新源代码并想要重建解决方案时,我收到两个 MSB3030 错误:“无法复制文件“C:\path of my colleague his file”,因为找不到。”

我发现奇怪的是,我在两个错误之一中看到了我同事他的电脑的路径。他在 C:\ 上工作,我在 E:\ 上工作

卸载项目,我看到他在这里设置了路径:

<ItemGroup>
    <FilesToPackage Include="C:\path of my colleague\foo.xml" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
      <PackageRelativeDirectory>
      </PackageRelativeDirectory>
    </FilesToPackage>

由于 MSB3030,我们无法构建此解决方案。首先,我们必须单独清理特定项目,重建它,然后构建另一个项目等。几个步骤以正确的顺序手动执行,反复试验,喝咖啡,向电脑扔香蕉并祈祷猴子输出正确编码。

有没有人看到关于 MSB3030 错误的类似情况?在我的电脑上,我看到了我同事的路径,但他没有看到我的路径(奇怪!)。

C:\Program Files (x86)\Windows Kits\10\build\WindowsDriver.common.targets(1699,5):错误 MSB3030:无法复制文件“C:...”,因为找不到。

我已将 Any CPU 设置为 x64,因为它对 c++ 没有任何意义。

标签: c++visual-studiomsbuildvisual-studio-2017

解决方案


C++ Windows 驱动程序 MSB3030 无法复制文件 '' 因为找不到

出现这个问题的原因是ItemGroup项目文件中的路径是绝对路径:

<ItemGroup>
    <FilesToPackage Include="C:\path of my colleague\foo.xml" ...>
...
    </FilesToPackage>
</ItemGroup>

不管你的同事有没有把这个文件加到源码控制中,当你从TFS服务器拉取代码到本地,把代码放到不同的本地文件夹中,绝对路径会给你带来很多麻烦,需要手动检查 TFS 服务器上该文件的代码,您需要在项目中修改该文件的绝对路径。但是这个问题会在你提交代码后你的同事更新后再次出现。因为一个绝对路径不能分配给两个不同的路径 C:\E:\.

要解决此问题,您需要将源代码中的绝对路径更改为相对路径。通常,我们更喜欢将此文件添加到 Solution/Project 文件夹,然后使用 MSBuild 宏$(SolutionDir)/$(ProjectDir)来指定它。

检查构建命令和属性的通用宏以获取更多详细信息。

希望这可以帮助。


推荐阅读