【发布时间】: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