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

Posted

技术标签:

【中文标题】C++ Windows 驱动程序 MSB3030 无法复制文件 \'\' 因为找不到【英文标题】:C++ Windows Driver MSB3030 could not copy the file '' because it was not foundC++ Windows 驱动程序 MSB3030 无法复制文件 '' 因为找不到 【发布时间】:2018-11-05 15:13:49 【问题描述】:

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++ 没有任何意义。

【问题讨论】:

我们使用 v4 打印驱动程序成功构建的唯一解决方案是首先清理驱动程序项目,然后构建驱动程序项目,最后重建渲染过滤器项目。问题不限于电脑,因为我们在两台电脑上都有问题。我还没有时间测试您的解决方案,但现在如果我们按此顺序(重新)构建它可以工作。 v4 驱动程序是通过 VS17 File > New Project > .. Wizard thing... 创建的 【参考方案1】:

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

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

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

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

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

查看Common macros for build commands and properties了解更多详情。

希望这会有所帮助。

【讨论】:

以上是关于C++ Windows 驱动程序 MSB3030 无法复制文件 '' 因为找不到的主要内容,如果未能解决你的问题,请参考以下文章

npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装

npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装

C++笔记:error MSB6006: “CL.exe”已退出,代码为 2 + VS无法启动程序,系统找不到指定的文件

C++ 中 MSB ->LSB 和 LSB->MSB 的有符号 INT 转换

windows下编译caffe报错:error MSB4062: 未能从程序集 E:NugetPackagesOpenCV.2.4.10......的解决办法

当代码在 Visual Studio C++ 中正常工作时出现 MSB6006 错误