3

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

错误 1 ​​“ValidateXaml”任务意外失败。System.IO.FileLoadException:无法加载文件或程序集 'file://\tsclient\d\Users\me\Documents\Visual Studio 2010\Projects\SilverlightApplication2\SilverlightApplication2\obj\Debug\SilverlightApplication2.dll' 或其之一依赖关系。不支持操作。(来自 HRESULT 的异常:0x80131515)

文件名:'file://\tsclient\d\Users\me\Documents\Visual Studio 2010\Projects\SilverlightApplication2\SilverlightApplication2\obj\Debug\SilverlightApplication2.dll'---> System.NotSupportedException:尝试从网络位置加载程序集,这会导致程序集在以前版本的 .NET Framework 中被沙盒化。此版本的 .NET Framework 默认情况下不启用 CAS 策略,因此这种加载可能很危险。如果此加载不打算对程序集进行沙箱处理,请启用 loadFromRemoteSources 开关。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=155569

在 System.Reflection.RuntimeAssembly._nLoad(AssemblyName 文件名,字符串代码库,证据 assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark 和 stackMark,布尔 throwOnFileNotFound,布尔 forIntrospection,布尔 suppressSecurityChecks)在 System.Reflection.RuntimeAssembly.nLoad(AssemblyName 文件名,字符串代码库,证据 assemblySecurity , RuntimeAssembly locationHint, StackCrawlMark & stackMark, Boolean throwOnFileNotFound, Boolean for Introspection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark & stackMark, Boolean for Introspection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.InternalLoad组装文件,证据 securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark) at System.Reflection.Assembly.LoadFrom(String assemblyFile) at Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task)在 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) 在 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 bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult)任务结果)任务结果)Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark) 在 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) 在 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) 在 System.Reflection.Assembly.LoadFrom(String assemblyFile)。 Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) 在 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 bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult)Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark) 在 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) 在 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) 在 System.Reflection.Assembly.LoadFrom(String assemblyFile)。 Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) 在 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 bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult)AssemblyHashAlgorithm hashAlgorithm, Boolean for Introspection, Boolean suppressSecurityChecks, StackCrawlMark & stackMark) at System.Reflection.Assembly.LoadFrom(String assemblyFile) at Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) at Microsoft.Silverlight.Build.Tasks .ValidateXaml.XamlValidator.Execute(ITask task) 在 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 bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult)AssemblyHashAlgorithm hashAlgorithm, Boolean for Introspection, Boolean suppressSecurityChecks, StackCrawlMark & stackMark) at System.Reflection.Assembly.LoadFrom(String assemblyFile) at Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) at Microsoft.Silverlight.Build.Tasks .ValidateXaml.XamlValidator.Execute(ITask task) 在 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 bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult)在 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) 在 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute 的 System.Reflection.Assembly.LoadFrom(String assemblyFile) (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 bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult)在 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) 在 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute 的 System.Reflection.Assembly.LoadFrom(String assemblyFile) (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 bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult)在 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) 在 Microsoft.Silverlight.Build.Tasks 的 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask 任务) 的 LoadFrom(String assemblyFile)。 ValidateXaml.Execute() 在 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 在 Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask , 布尔值&任务结果)在 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task) 在 Microsoft.Silverlight.Build.Tasks 的 Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask 任务) 的 LoadFrom(String assemblyFile)。 ValidateXaml.Execute() 在 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 在 Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask , 布尔值&任务结果)Execute() 在 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 在 Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask, Boolean&任务结果)Execute() 在 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 在 Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask, Boolean&任务结果)

我相信这与 XP Mode 将 My Documents 文件夹重定向到主机,将其变成网络共享位置,并且触发了某种 CAS / 安全策略这一事实有关。

谁知道怎么修它?

4

3 回答 3

4

<loadFromRemoteSources enabled="true"/>在配置文件中添加了吗?

于 2009-12-01T00:43:11.400 回答
4

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

编辑:(当帖子被删除时,从上面的 URL 复制并粘贴)

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/推特 - @ddewinter

于 2010-04-13T07:22:25.350 回答
3

如果您添加<loadFromRemoteSources enabled="true"/>devenv.exe.config它应该可以工作。更多信息请访问http://msdn.microsoft.com/en-us/library/dd409252%28VS.100%29.aspx

于 2010-01-23T01:51:41.530 回答