2

我有一个使用我在 C: 驱动器上的 Visual Studio 2008 中开发的亚音速的项目。那里没问题。我刚刚升级到 Visual Studio 2010(由于我的计算机巧合地死了,我现在正在运行使用 VirtualBox 虚拟化的 Windows XP)。

该项目在 C: 驱动器上运行没有任何投诉,但如果我从 G: (指向基本 PC 上的一个分区的映射驱动器)运行它,我无法运行 subsonic 使用的自定义工具(下面列出的错误),或者运行 Web 应用程序(“不调试就开始”给我:无法开始监视对“G:\GPNNT\GpnntApp\GpnntApp”的更改)。

这是一个 .net 3.5 解决方案。

在此处输入图像描述

这似乎是一个有据可查且直截了当的问题。我采取了以下措施:

(1) 批处理文件

c:
cd "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"
caspol -all -reset
caspol -q -machine -addgroup 1 -url file:////g:\* FullTrust -name "G Drive"
caspol -q -machine -addgroup 1 -url g:\* FullTrust -name "G Drive 1"


c:
cd "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319"
caspol -all -reset
caspol -q -machine -addgroup 1 -url file:////g:\* FullTrust -name "G Drive"
caspol -q -machine -addgroup 1 -url g:\* FullTrust -name "G Drive"

pause

(我尝试了无数种不同的 url 格式,都无济于事)

(2) .Net 2.0 配置实用程序(控制面板 > 管理工具)

使用分析工具,上面批处理文件中的两个设置似乎都适用于驱动器上的文件。
我还尝试将 Intranet 组设置为 FullTrust(我不想这样做!)。没有不同。

(3) loadFromRemoteSources

可以合理地假设,虽然项目本身只使用 .NET 2,但 VS2010 本身可能在内部使用 .NET 4。经过更多谷歌搜索(例如here),我添加了

<runtime>
  <loadFromRemoteSources enabled="true"/>
</runtime>

到两个 .net 版本的 machine.config 文件。

(4) 升级到VS2010 SP1

这些都没有任何改变。在我的血压达到危险的高水平之前,谁能阐明这一点?我想我可以回到从 C: 运行所有东西,但在这个虚拟化时代,这似乎有点荒谬。我真的希望数据位于与 VM 不同的位置。

我注意到这篇SO 帖子也有同样的问题,并归咎于测试项目,这并不是非常令人满意。我也没有测试项目,尽管我认为 SubSonic dll 中可能有测试参考。

最后一分钟补充:我还注意到 SQL Server 2005/8 不会与 G 对话:(例如,从那里恢复备份),并假设任何解决方案也允许这种情况发生。那将是另一个很棒的东西。

4

2 回答 2

3

为了后代,这里是我调查的一些结果。

VS 2010 中的映射驱动器:

  • 有一条关于从不安全位置加载项目的初始消息。如前所述,这是使用 CASPOL 修复的。CASPOL 的 URL 非常灵活,并接受显示的两种格式。默认情况下,CASPOL 在 .NET 4 中被禁用,因此设置不会产生影响(请参阅此处的原因)。
  • 之后还有几个问题,我没有记录它们,但是在修复每个问题之后,又出现了另一个问题。loadFromRemoteSources 修复了一条消息,但我所做的任何事情都无法触及“无法开始监视更改...”。作为其中的一部分,Christoph 的回答可能是正确的(至少对于 .NET 2),因为您可能必须在驱动器上设置每个程序集,这对于 VS 项目驱动器来说是完全不切实际的。

因此,毫不奇怪,我认为将 VS 项目存储在映射驱动器上太痛苦了。源代码控制和本地项目是要走的路。坦率地说,在网络驱动器上缺乏撤消对开发工作以及 IMO 来说都是一种痛苦。

最初的问题不是我需要一个网络驱动器,而是我不想将项目存储在我的 VM 的 C: 上(即,我希望能够与基于 VM 的驱动器映像分开备份数据)。

一直盯着我看的答案是创建第二个虚拟磁盘并将其作为 G: 附加到 VM。这是一个本地驱动器,所以我没有遇到所有的信任问题,但我得到了完整的数据分离。我将该驱动器上的所有数据保存在一个 Dropbox 文件夹中,同时还为我提供了完整的实时异地备份,这让我很高兴。

于 2011-09-16T12:29:56.440 回答
0

也许我错了(我没有查到这个),但我认为在映射驱动器上工作时需要使用强名称。像

caspol -m -q -ag My_Machine_Zone -url g:\* Nothing -n "GDrive"

caspol -m -q -ag "GDrive" -strong -file "<pathToFile>" "<assemblyStrongName>" "<assemblyVersion>" FullTrust -n "GDriveFileX" -d "Code Group for fileX"

我总是会创建一个顶级组,以便您以后可以轻松地修改或删除该策略。我认为不允许完全信任基于 uri 的映射驱动器是有道理的,即使这很痛苦。

如果可能的话,使用更现代的东西。

于 2011-09-14T08:32:28.510 回答