3

我正在尝试使用 C# Interactive REPL(来自 Roslyn)加载 DLL。它抛出以下异常:

“尝试从网络位置加载程序集,这会导致程序集在以前版本的 .NET Framework 中被沙盒化。此版本的 .NET Framework 默认情况下不启用 CAS 策略,因此此加载可能很危险。如果此加载不打算对程序集进行沙箱处理,请启用 loadFromRemoteSources 开关。有关 详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=155569 。

DLL 不在网络位置,所以我不知道为什么会抛出这个异常。无论如何,没有 app.config 文件供我修改(据我所知),所以有人知道我该如何解决这个错误吗?

更新:

我已经解除了对程序集的阻止,这使得这个异常消失了。但我仍然想回答更一般的问题,即如何在 C# 交互窗口的 app.config 中设置通常定义的开关?

4

1 回答 1

2

有问题的程序集在您尝试加载它时不需要位于网络位置。您看到的消息是警告您尝试加载的程序集(在某些时候)是从 Internet 下载的,并且当前标记为不受信任。

对于您的元问题,大多数配置设置映射到一个或多个代码结构(API、属性等),允许您以编程方式根据需要调整设置。如何修改特定设置取决于设置及其影响的 API。在某些情况下,您可能需要编写代码来配置运行时,在其他情况下,您可能需要配置 IIS、日志记录和跟踪、WCF 端点等。

如果您阅读上面链接的文章,您会发现以下内容:

如果应用程序是从 Web 复制的,Windows 会将其标记为 Web 应用程序,即使它驻留在本地计算机上也是如此。您可以通过更改文件属性来更改该名称,也可以使用该元素授予程序集完全信任。作为替代方案,您可以使用UnsafeLoadFrom方法加载操作系统已标记为已从 Web 加载的本地程序集。

通常,使用 UnsafeLoadFrom 可能比让您的应用程序从不受信任的来源下载任意程序集并让它在您的应用程序内以完全信任的方式运行更安全。

文档继续说:

此元素通常在应用程序配置文件中使用,但可以根据上下文在其他配置文件中使用。有关详细信息,请参阅 .NET 安全博客中的文章更多隐式使用 CAS 策略:loadFromRemoteSources

仔细阅读后一个文档 - 它说明了您需要编写的代码以实现与设置 loadFromRemoteSources 配置标志相同的结果:但是,不要低估将任意代码加载到您的应用程序中的危险!

于 2013-02-27T19:08:29.453 回答