【问题标题】:Build fails on mapped drive, but not locally在映射驱动器上构建失败,但不是在本地
【发布时间】:2023-06-26 14:55:02
【问题描述】:

我正在开发一个使用 VS2013 和 monogame 用 C# 编写的游戏。但是,monogame 不支持 XNA 内容管道(仍然),因此建议使用 Microsoft 的 XNA 和 VS2010 分别构建您的内容。由于我不想让我的主要开发机器 (Win8) 与 VS2010 等杂乱无章,因此我创建了一个 Win7 虚拟机来运行 Win7 以及 VS2010 以及构建内容所需的所有工具。我所有的项目和解决方案文件都有对应的 2010 版本,而 2010 解决方案只有构建内容所需的项目。

我可以成功构建内容,但前提是它直接存在于 VM 的硬盘上 (C:\)。如果我将本地驱动器映射到主机上的网络共享并尝试构建,则会收到构建时错误。我为什么要这样做?因为我想要一个源代码树的副本,所以我可以以不错的速度进行迭代。如果我在 VM 中有单独的源代码树,那就太痛苦且容易出错了。

这是我得到的构建错误:

Error loading pipeline assembly "S:\Src\ContentPipelineExtension\bin\x86\Debug\Newtonsoft.Json.dll".

我已将 S:\ 映射到我的网络共享。 Newtonsoft.Json.dll 存在于指定路径。

我试过了:

  • 在构建时指定/verbosity:d 以查看是否输出了更多信息。没有。
  • 将调试器附加到 MSBuild.exe 进程并启用任何异常中断。它永不中断。
  • 使用subst 而不是Windows Explorer 的驱动器映射工具(它可能在幕后使用subst,但我想确定一下)。
  • debugging MSBuild,但是当我这样做时我点击了"mismatched leave" bug
  • 针对不匹配的离开错误应用了解决方法,并同时在 C:\S:\ 上调试了构建。在这两种情况下,我都在调用 XNA 的 BuildContent 任务之前放置了一个断点。我让两个构建运行,直到它们达到这个断点,然后我并排打开本地窗口。我比较了所有本地人,发现除了预期的 C:\S:\ 路径根之外没有区别。
  • 深入研究 ILSpy 中的 XNA 代码,试图找出问题所在,但也没有运气
  • 通过执行:CasPol.exe -m -ag 1.2 -url file://S:\* FullTrust 启用对 CAS 中网络共享的完全信任。行为没有变化。
  • 启用 Fusion Log Viewer (fuslogvw.exe) 并检查其日志。它说它已成功加载程序集!
  • <loadFromRemoteSources enabled="true"/> 添加到我的MSBuild.exe.config。没有变化。

为什么在我映射的 S:\ 上运行时构建失败,而在我的 C:\ 上放置源副本时构建成功?

更新:我刚刚找到了最糟糕的解决方法。我修改了我的 ContentPipelineExtension 项目的 Output Path,使其成为我的 C:\ 上的绝对目录。这可以让构建成功完成,但显然远非理想。

【问题讨论】:

  • 使用诊断冗长而不是详细。
  • @Nick:刚刚尝试过,它没有输出有关特定错误的更多信息。我得到Task BuildContent 错误前的行,所以BuildContent 任务只是没有输出任何有用的东西。
  • .NET 和 VS/MSBuild 一直试图限制对非本地代码的信任,并且在不同版本中使用了不同的方法。也许loadFromRemoteSources 上的article 会有所帮助。
  • @Tom:谢谢。有趣的是,我只是在试验 CAS。请在我的“尝试”列表中查看我的最后两点。现在查看您链接到的文章...

标签: c# msbuild xna monogame mapped-drive


【解决方案1】:

这是我使用的一个技巧。这不是一个令人满意的答案(我不会将其标记为已接受),但在没有更好的解决方案的情况下,它将为我节省大量的时间和痛苦。

我编辑了 2010 年的项目文件并将输出路径更改为如下内容:

<OutputPath>$(TEMP)\ContentPipelineExtension\bin\x86\Debug\</OutputPath>

TEMP 环境变量解析为 C:\ 上的一个文件夹,从而节省了我对特定路径的硬编码。现在我可以使用我在我的主要 Win8 机器中使用的相同源代码树从我的 Win7 VM 构建项目。

【讨论】:

    最近更新 更多