Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在映射驱动器上生成失败,但不是本地生成_C#_Msbuild_Xna_Monogame_Mapped Drive - Fatal编程技术网

C# 在映射驱动器上生成失败,但不是本地生成

C# 在映射驱动器上生成失败,但不是本地生成,c#,msbuild,xna,monogame,mapped-drive,C#,Msbuild,Xna,Monogame,Mapped Drive,我正在用VS2013和monogame编写一个用C#编写的游戏。但是,monogame不支持XNA内容管道(仍然),因此建议使用Microsoft的XNA和VS2010分别构建您的内容。因为我不想让我的主要开发机器(Win8)与VS2010等混杂在一起,所以我创建了一个Win7虚拟机来运行Win7以及VS2010以及构建内容所需的所有工具。我的所有项目和解决方案文件都有相应的2010版本,而2010解决方案只有构建内容所需的项目 我可以成功构建内容,但前提是它直接存在于虚拟机的硬盘上(C:\)。

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

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

以下是我得到的生成错误:

Error loading pipeline assembly "S:\Src\ContentPipelineExtension\bin\x86\Debug\Newtonsoft.Json.dll".
我已将S:\映射到我的网络共享。Newtonsoft.Json.dll存在于指定的路径中

我试过:

  • 在构建时指定
    /verbosity:d
    ,以查看是否输出了更多信息。没有
  • 将调试器附加到MSBuild.exe进程,并启用任何异常中断。它从不间断
  • 使用
    subst
    而不是Windows资源管理器的驱动器映射工具(它可能在幕后使用
    subst
    ,但我想确定一下)
  • ,但当我这样做时,我击中了目标
  • 对不匹配的leave bug应用了变通方法,并在C:\和S:\上同时调试了构建。在这两种情况下,我都在调用XNA的
    BuildContent
    任务之前放置了一个断点。我让这两个构建运行,直到它们到达这个断点,然后我并排打开本地窗口。我比较了所有的局部变量,发现除了预期的C:\和S:\路径根之外没有任何区别
  • 在ILSpy中探索XNA代码,试图找出哪里出了问题,但也没有成功
  • 通过执行:
    CasPol.exe-m-ag 1.2-url file://S:\*FullTrust
    ,在CAS中的网络共享上启用完全信任。行为没有改变
  • 启用Fusion日志查看器(
    fuslogvw.exe
    )并签出其日志。它说它已成功加载程序集
  • 已将
    添加到我的MSBuild.exe.config中。没有变化
为什么在运行我的映射S:\时生成失败,而在将源的副本放置到我的C:\?


更新:我刚刚发现了最糟糕的工作。我修改了ContentPipelineExtension项目的
输出路径
,使其成为C:\上的绝对目录。这使得构建能够成功完成,但显然还远远不够理想。

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

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

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

TEMP
环境变量解析为C:\上的一个文件夹,并为我保存一个特定路径的硬编码。现在,我可以从我的Win7 VM中使用与我在主Win8计算机中使用的相同的源代码树来构建项目。

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