使用XP Mode在Windows 7上构建Visual Studio 2010 Silverlight 4项目时出错

时间:2009-12-01 00:37:59

标签: visual-studio-2010 silverlight-4.0

我在Windows 7上的XP模式VM中安装了Visual Studio 2010 Beta 2.然后我创建了一个简单的Silverlight 4(beta)项目并尝试构建它。我收到以下错误:

  

错误1“ValidateXaml”任务失败   不料。   System.IO.FileLoadException:不能   加载文件或程序集   “文件:// \软件tsclient \ d \用户\我\文档\ Visual   工作室   2010 \项目\ SilverlightApplication2 \ SilverlightApplication2 \ OBJ \调试\ SilverlightApplication2.dll”   或其中一个依赖项。手术   不受支持。 (例外   HRESULT:0x80131515)

     

档案名称:   “文件:// \软件tsclient \ d \用户\我\文档\ Visual   工作室   2010 \项目\ SilverlightApplication2 \ SilverlightApplication2 \ OBJ \调试\ SilverlightApplication2.dll”   ---> System.NotSupportedException:尝试加载程序集   从一个网络位置   导致组装   沙盒在以前的版本中   .NET Framework。这个版本的   .NET Framework不启用CAS   默认情况下,策略,所以此负载可能是   危险的。如果没有这个负载   打算组装沙箱,   请启用   loadFromRemoteSources切换。看到   http://go.microsoft.com/fwlink/?LinkId=155569   了解更多信息。

     

在   System.Reflection.RuntimeAssembly._nLoad(的AssemblyName   fileName,String codeBase,Evidence   assemblySecurity,RuntimeAssembly   locationHint,StackCrawlMark&   stackMark,布尔   throwOnFileNotFound,布尔值   forIntrospection,布尔值   suppressSecurityChecks)at   System.Reflection.RuntimeAssembly.nLoad(的AssemblyName   fileName,String codeBase,Evidence   assemblySecurity,RuntimeAssembly   locationHint,StackCrawlMark&   stackMark,布尔   throwOnFileNotFound,布尔值   forIntrospection,布尔值   suppressSecurityChecks)at   System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(的AssemblyName   assemblyRef,证据   assemblySecurity,StackCrawlMark&   stackMark,布局forIntrospection,   布尔值suppressSecurityChecks)at   System.Reflection.RuntimeAssembly.InternalLoadFrom(字符串   assemblyFile,Evidence   securityEvidence,Byte [] hashValue,   AssemblyHashAlgorithm hashAlgorithm,   Boolean forIntrospection,布尔值   suppressSecurityChecks,   StackCrawlMark&安培; stackMark)at   System.Reflection.Assembly.LoadFrom(字符串   assemblyFile)at   Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask   任务)   Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask   任务)   Microsoft.Silverlight.Build.Tasks.ValidateXaml.Execute()   在   Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()   在   Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost   taskExecutionHost,TaskLoggingContext   taskLoggingContext,TaskHost taskHost,   ItemBucket存储桶,TaskExecutionMode   howToExecuteTask,Boolean& taskResult)

我认为这与XP Mode将My Documents文件夹重定向到主机,将其转换为网络共享位置以及触发某种CAS /安全策略这一事实有关。

任何人都知道如何修复它?

3 个答案:

答案 0 :(得分:4)

您是否在配置文件中添加了<loadFromRemoteSources enabled="true"/>

答案 1 :(得分:4)

还在http://social.msdn.microsoft.com/Forums/en-US/webdevelopmentprerelease/thread/ea9b9cab-cbfd-496d-8a81-7b3dd06e8c23上解释了启用loadFromRemoteSources以及其他选项;设置环境变量COMPLUS_EnableLegacyCASPolicy。

修改(随着帖子的删除,从上面的网址中复制并粘贴)

David DeWinter - MSFT(2009年5月20日,星期三,上​​午2:10)

警告:我不是安全团队,但会尽力回答这个问题......

这里发生的事情是,Silverlight的构建任务正在尝试加载一个程序集,该程序集在以前版本的CLR中,根据CAS策略将其根据其证据(例如其区域)将其归类为部分信任程序集。

在CLR 4.0中,CAS策略完全弃用,默认情况下甚至没有启用。但是,在这种情况下,当CLR 2.0中的部分信任负载是CLR 4.0中的完全信任负载时,CLR似乎会抛出异常。

loadFromRemoteSources切换引用的异常消息是在配置下的运行时元素中,如下所示:

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

这不会启用旧版CAS策略,但会允许您(或者,在本例中为构建系统)加载具有与主机AppDomain相同权限的远程程序集。在这种情况下,似乎你可以修改构建系统的配置(我假设在这种情况下将是Visual Studio:%ProgramFiles%\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe.config)来启用此功能开关。

如果您不想修改该配置,则可以将环境变量COMPLUS_EnableLegacyCASPolicy设置为1,这将启用CLR 2.0中存在的CAS策略,并允许Silverlight加载此任务。

希望有所帮助。 大卫,博客 - http://blogs.rev-net.com/ddewinter/ Twitter - @ddewinter

答案 2 :(得分:3)

如果您将<loadFromRemoteSources enabled="true"/>添加到 devenv.exe.config ,它应该可以正常工作。 有关详情,请访问http://msdn.microsoft.com/en-us/library/dd409252%28VS.100%29.aspx