无法加载文件或程序集 HRESULT: 0x80131515(当向具有网络驱动器上的程序集引用的MVC项目添加控制器时)

78

我看到了这个问题:VSTS 2010 SGEN : error : Could not load file or assembly (Exception from HRESULT: 0x80131515),但所有的答案都不起作用。在我构建或其他方面没有出现过这个问题。我可以正常地运行项目,但当我尝试添加一个实体框架模板控制器时就会出现这个问题:

controller settings

然后我收到了这个错误:

error message

所有项目文件都在我的网络共享上,因为那是我们工作文档所在的地方。这是我尝试过的:

1)将项目设置中的生成器序列化程序集开关设置为打开、关闭和自动。

2)将sgen.exe.config添加到C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools,并加入以下代码:

<configuration>
 <runtime>
   <loadFromRemoteSources enabled="true" />
 </runtime>
</configuration>

3) 尝试解除程序集的阻止,但是在属性选项卡中没有找到解除阻止的选项。no unblock option

这些解决方法都不起作用。有谁知道我该如何解决这个问题吗?对于来自Nuget或我的自己项目的任何自定义程序集,由于它们的位置存在于网络空间中,因此只有在尝试添加EF模板控制器时才会发生此错误。我可以成功构建和运行程序。


如何在Visual Studio中使用来自Web的程序集中,“如果程序集已经被解除阻止并可用,则 Unblock 按钮将不会出现。”所以我猜这就是为什么你没有得到那个选项。顺便提一下,你记得重新启动Visual Studio了吗? - Conrad Frix
@ConradFrix 是的,我重新启动了多次,但仍然没有作用 =(。 - SventoryMang
尝试将<loadFromRemoteSources enabled="true" />添加到C:[Visual Studio 2010安装目录] \ Common7 \ IDE \ devenv.exe.config中,看看是否有帮助。 - hawkke
@hawkke 是的先生,那个方法很有效!请将其发布为答案,以便我能给您点赞! - SventoryMang
11个回答

136

我只需要在Windows资源管理器的文件属性对话框中点击“解除阻止”。


4
幸好我只有一个小时的沮丧,但这个Win7的“安全功能”总是让我感到困扰。 - KeithS
这个属性在哪里找到?在解决方案属性中还是其他地方?请帮忙! - Mesam Mujtaba
1
在Windows资源管理器中,右键单击文件,然后单击属性。 - Aymeric Gaurat-Apelli
这已经是我第二次在这个问题上浪费了1个小时。 - Axel2D
哎呀!哈哈,谢谢,感谢这篇文章,对我帮助很大。 - Steve Bauman
哈哈,它像魔法一样运行良好。 - ThanhLD

84

尝试将您的<loadFromRemoteSources enabled="true" />添加到C:\[Visual Studio 2010 Install Dir]\Common7\IDE\devenv.exe.config中的<runtime>之下,看看是否有帮助 :)


非常准确。我正在尝试在 Parallels 中进行 Visual Studio 2010 构建,同时保持实际源文件在共享的 OS X 驱动器上,并且单元测试拒绝在没有这种修改的情况下运行。我还尝试更改 sgen.exe.config,但没有成功 - 只有这个解决方案起作用。 - DeckerEgo
这个解决方案对我在PowerShell v1中使用Import-Module加载程序集的问题也起到了作用。非常感谢! - Cameron Flint
40
在Windows资源管理器中打开文件属性,然后点击“解除阻止”也可以解决问题,至少对我有效。 - user1151923
我的错误来自于InstallUtil - 我必须在C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe.config中添加<runtime><loadFromRemoteSources enabled="true" /></runtime>,然后它就可以工作了。 - rythos42
@user1151923 - 哇,这真的起作用了! - Pavdro
太好了! 非常感谢! - Bajju

10

作为额外的解决方案,我们最近遇到了这样一个问题。 解决方法是解除文件的阻止状态,但需要有一定技巧。 我们将文件复制到 zip 文件中并上传到服务器。 当我们从 zip 存档中提取文件时,它们已经被阻止。 我们无法解除阻止文件。 即使我们点击解除阻止按钮,然后点击确定,在查看属性时仍然会显示被阻止。

我们必须删除所有已阻止的文件,解除源 zip 文件的阻止状态,然后再提取文件。 在此过程中,原来被阻止的文件将被解除阻止,并且应用程序可以正常运行。 希望这可以帮助某些人避免一些挫折。

编辑:我认为您还必须以管理员身份运行 Windows 文件资源管理器才能解除文件的阻止状态。


这个技巧对我很有用,而且不需要以管理员身份运行Explorer。 - Erich Musick

9

在我的情况下,我正在访问映射到网络驱动器上的文件。对我有用的解决方案是按照以下步骤将我的网络IP地址添加为可信任驱动器:

  1. 控制面板
  2. 网络和共享中心
  3. Internet选项(窗口左下角)
  4. 安全选项卡
  5. 选择“本地Intranet”
  6. 单击“站点”按钮
  7. 单击“高级”按钮
  8. 将您的网络驱动器的IP添加到该区域。

不确定是什么原因让这个方法比其他方法都有效,但这就是解决问题的方法。现在所有的项目和解决方案都能够无问题地构建了。


2
这里是最后一个答案,但这是唯一对我有效的。 - Ankit
1
谢谢您先生 - 您是一位绅士和学者。这就是它。我正在使用VirtualBox,我的项目位于共享文件夹中,Windows将其视为网络驱动器。 - dadude999
1
我正在使用Hyper-V,并通过网络共享加载我的项目 - 这是唯一对我有效的解决方案。 - 131nary
1
对我来说也是正确的答案。在 Mac 上,我在 VMWare 虚拟机中启动 Visual Studio,并将我的项目文件映射为网络驱动器。将 vmware-host 添加到区域解决了这个问题。 - Baptiste

9

这个问题源于某些必需的文件被放置在“不受信任的位置”,例如网络或共享位置(即使在同一台计算机上)。如果该位置在同一台计算机上,则可以使用subst命令行选项。


8

我从其他论坛中看到了这个问题,并且这里有一个解决方案,由某人发表:在包含未能加载的DLL程序集的项目属性上,转到生成设置,最底部有一项“生成序列化程序集:”,默认为自动。将其设置为关闭。然后你的解决方案应该可以顺利构建。

当我将API放在具有多个项目的Web表单解决方案中时,我遇到了这个问题。但它在单项目解决方案MVC中运行良好。


2
  1. 我只需要在文件属性对话框中点击“解除阻止”。

  2. 请检查您的文件是否为只读,然后取消勾选并执行第一步(在进一步浪费时间之前 :))


除了以管理员身份运行之外,这应该是任何人在进行权限操作之前应该检查的第一件事情。并确保您解除所有与您的服务相关的内容(任何不会自动打开任何类型的访问权限对话框的内容都将在未授予权限时失败。例如,Windows 应用程序将自动要求用户授予访问权限,但服务则不能)。 - Bizhan

2

2

这里的其他答案帮助我在PowerShell中解决了这个问题。运行Unblock-File <filename>以允许脚本被执行时访问它。


我的工作环境存在一些权限问题,所以我在通过文件资源管理器解除阻止时遇到了一些麻烦。这个方法非常有效,谢谢。 - seneill

1
解除所有文件的阻止:Unblock-File -Path "*.dll"

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