取消阻止文件 - 为什么我需要打开一个新会话?

时间:2015-11-09 15:00:29

标签: powershell

我正在使用Carbon的Powershell模块进行一些工作。当我将文件夹移动到另一台机器时,其中的脚本被标记并阻止执行,直到我解除阻塞它们(这很好)。当我执行以下操作时:

declare module 'alt-container' {
  declare function hello(foo: string): number;
}

在创建新的Powershell会话之前,我仍然无法导入模块。此时文件肯定是未阻止的,但在创建新会话之前,我仍然会收到相同的错误。

我已经阅读了一些technet文章,他们声明你只需要关闭并打开Powershell来解决它,但没有理由说明为什么需要这样做。

1 个答案:

答案 0 :(得分:0)

这实际上可以追溯到PowerShell所基于的.Net框架。您实际上是将新装配加载到流程中。被阻止的文件被视为"远程"文件,默认情况下.net未设置为加载它们。

How the Runtime Locates Assemblies

  
      
  1. Checks whether the assembly name has been bound to before如果是,则使用先前加载的程序集。
  2.   

事情是,这一步缓存"否定"加载(至少根据我的经验,尝试加载其他程序集)。 .Net无法在卸载程序集后卸载程序集,因此除了重新启动该程序之外别无选择。