如何在公司电脑上解除DLL的阻止?

18

我尝试测试MVVMLight,但它附带的DLL文件被阻止了。我已经了解过这个问题,有人告诉我要在文件属性中点击“取消阻止”(UNBLOCK).. 但是我没有找到这个选项。然后我发现一个叫做STREAMS的程序可以解除阻止.. 但也没有生效...还有其他解决方法吗?

错误 7

无法加载程序集 file:///C:\MIX10-MVVM-Samples\Mix10.MvvmDemo2 - End\Mix10.MvvmDemo2\Bin\Debug\GalaSoft.MvvmLight.Extras.SL4.dll

. 这个程序集可能是从Web下载的。如果程序集是从Web下载的,则Windows会将其标记为Web文件,即使它存储在本地计算机上也是如此。这可能会阻止它在您的项目中使用。您可以通过更改文件属性来更改此指定。仅解除信任的程序集。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkId=179545。Mix10.MvvmDemo2


相关链接:https://dev59.com/03A75IYBdhLWcg3w9-Ox - Jim G.
6个回答

22

该文件包含一个备用数据流,表明内容来自互联网且不安全。这是NTFS文件系统的一项功能,不幸的是,资源管理器无法支持显示它们的内容。您可以通过在命令提示符中使用DIR /R命令选项来查看它们,并使用TYPE filename:streamname命令输入它们的内容。使用DELETE filename:streamname命令删除它们。

另一个技巧是将文件复制到不支持备用数据流的文件系统中,这会将其从文件中切割出来,例如闪存驱动器或zip工具。

后续版本的Windows(我想从Win7开始)在资源管理器中内置了对此的支持。右键单击文件,选择属性,然后点击“解除锁定”。


所以你的意思是,如果我只是将被阻止的.dll文件复制到闪存驱动器上,然后再将它们复制回来,它们就会被解除阻止?我会试一下。 - punkouter
2
@punkouter。当然,如果您将文件复制到不支持NTFS的另一个驱动器上,则所有附加流都将被删除,您将拥有未阻止的文件。 - Oleg
好的,搞定了...看起来可以用!讨厌这个功能!(或者是安全限制我的机器) - punkouter
7
使用streams.exe -d -s *.*命令可以自动清除给定目录中的alternate data streams。 - SliverNinja - MSFT
将文件复制到另一个驱动器(网络共享驱动器)并压缩文件对我很有效。 - SharpCoder

17

SysInternals有一个非常好的命令行实用程序叫做Streams。这对我非常有帮助。

Streams v1.56 - 枚举备用NTFS数据流版权所有(C) 1999-2007 Mark Russinovich Sysinternals - www.sysinternals.com

用法: streams [-s] [-d] <文件或目录>
-s 递归子目录
-d 删除流

在您想要从中删除流的目录中执行以下命令(与复制到USB/FAT32驱动器具有相同的效果)

streams.exe -d -s *.*


11

仅供一般理解。NTFS支持流(请参见http://msdn.microsoft.com/en-us/library/aa364404%28VS.85%29.aspx)。流的完整名称是文件名:流名称:流类型。因此,可以在文件的附加流中轻松地编写有关该文件的其他信息。如果您从互联网下载文件,则Internet Explorer会在具有名称Zone.Identifier的流中写入一些简单的信息。如果您有一个从互联网下载的test.dll文件,则可以使用

more < test.dll:Zone.Identifier

要查看来自流的信息。您将看到类似以下内容:

[ZoneTransfer]
ZoneId=3

解除阻止其实就是删除此流。我建议您阅读http://weblogs.asp.net/dixin/archive/2009/03/14/understanding-the-internet-file-blocking-and-unblocking.aspx以获取更详细的信息。


看起来我没有解除阻止的权限。但是我意识到MvvmLight是开源的,所以我想我至少可以自己编译它。 - punkouter

11

首先解锁zip文件,然后提取dll文件。实际上这就是他们在这里的指示。


但是在zip文件的属性中也没有“解除阻止”的选项...我不知道为什么会缺少这个部分...我只能猜测这与公司的安全有关? - punkouter
1
我有同样的问题。在属性对话框中,未出现“解除阻止”按钮。这可能是公司电脑上应用的安全策略所致。 - Mas

2

我只是在Notepad++中打开了dll文件并以不同的名称保存了它。


0
如果有帮助的话,我从TFS下载了两个被阻止的DLL。
我的解决方案:
  • 在Windows资源管理器中,删除这两个被阻止的DLL。
  • 在TFS中,对文件夹进行“获取指定版本”的操作,并确保选中“即使本地版本与指定版本匹配,也要覆盖所有文件”,以便下载已删除的DLL的最新副本。
  • 重新构建你的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接