107

我在使用 VS2010 时遇到了一个奇怪的问题。我们使用 TFS 来构建我们的 API dll,并且我们过去常常在我们的项目中引用它们,使用完全信任的映射网络驱动器。我们已经这样工作了至少两年,一切都很顺利。

今天,我将一个 webapp 转换为 vs2010,当我在 Release 中编译它时,它给了我:

SGEN:错误:无法加载文件或程序集 'file:///L:\Api\Release API_20100521.1\Release\CS.API.Exceptions.dll' 或其依赖项之一。不支持操作。(来自 HRESULT 的异常:0x80131515)

奇怪的是,当它在调试配置文件下时它正在工作......

我尝试添加

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

进入 app.config 仍然没有运气(请参阅http://social.msdn.microsoft.com/Forums/en/msbuild/thread/d12f6301-85bf-4b9e-8e34-a06398a60df0http://msdn.microsoft.com/ en-us/library/dd409252(VS.100).aspx )

我很确定这个问题来自 Visual Studio 或 msbuild,因为我们的代码在 prod 中不会从网络共享运行,因为所有引用的 dll 都被复制到 bin 文件夹中。

如果有人有解决方案(或只是搜索路径的想法),请告诉我!

编辑:事实证明它在调试模式下工作,因为序列化程序集的生成已关闭。正如标题所说,这确实是一个 SGEN 问题,因为正是这个实用程序说该路径不受信任......

4

13 回答 13

216

我可以通过在 Windows 资源管理器中找到程序集 DLL,右键单击,选择属性,然后按“取消阻止”按钮来修复此错误。DLL 有一个将其标记为外部文件的流 - 通过单击取消阻止,您可以删除该名称。

于 2010-11-16T07:09:35.937 回答
60

我刚刚在 TFS 构建服务器上遇到了相同/类似的问题,其中构建从网络共享引用 dll。

问题在于 CLR v4 安全策略模型自以前的版本以来发生了变化,并且不像以前那样沙箱化程序集。

要解决您的问题,只需找到 sgen.exe 的位置并在同一文件夹中创建一个 sgen.exe.config ,其中包含以下内容:

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

sgen.exe 通常位于

"C:\Program Files\Microsoft SDKs\Windows\v[current version]\bin\NETFX 4.0 Tools"

您可以在这篇博文中了解有关 .NET 4.0 中 CAS 策略的一些更改:链接

于 2010-08-04T16:42:57.040 回答
24

有同样的问题,配置更改不起作用。只有当我在项目属性中将生成序列化程序集设置为关闭时,它才起作用。

于 2010-11-22T03:27:24.247 回答
6

我遇到了同样的错误,发现我的 DLL 被“阻止”了。在资源管理器中打开 DLL,右键单击 -> 属性 -> 按“取消阻止”。

http://cantgrokwontgrok.blogspot.com/2009/10/visual-studio-unknown-build-error.html

于 2011-06-22T17:41:39.510 回答
3

我遇到了同样的问题,并通过在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools 下添加 sgen.exe.config 来修复它

正如其他人所说,使用这个简单的配置

<?xml version ="1.0"?>
<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>
于 2011-08-08T20:08:05.263 回答
2

对于那些运行 64 位版本的 TFS 构建服务的人,我必须在以下路径中创建配置文件:

 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64

和文件内容:

<?xml version ="1.0"?>
<configuration>
<runtime>
    <loadFromRemoteSources enabled="true" />
</runtime>
</configuration>
于 2014-02-21T21:41:33.180 回答
1

Adding the snippet below to the app.config file worked in my case. I'm Running Windows XP, with VS2010 service pack 1.

<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>
于 2011-04-19T03:49:30.920 回答
1

我有同样的问题,在 GAC 中加载程序集并工作

于 2010-07-22T16:21:50.350 回答
1

在我的情况下,一堆 dll 被阻止了。

要取消阻止文件夹中的所有文件,我使用 power shell 和以下命令

dir -Path [directory path] -Recurse | Unblock-File
于 2020-05-12T09:51:42.640 回答
0

unblockthe和 the都不config适合我。对我来说诀窍是这个提示caspol。我跑了

 %windir%\Microsoft.NET\Framework\v2.0.50727\CasPol.exe -m -ag 1.2 -url file://UncPathName/UncSubPath/* FullTrust

我已经准备好了,甚至不需要重新启动 VisualStudio。

于 2012-03-01T12:30:05.227 回答
0

仅供参考,如果您运行的是 Windows 7,则可以在以下位置找到 sgen.exe 文件:

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 工具

我必须创建一个 sgen.exe.config 并将其放置在那里,然后这个问题就消失了。

于 2011-06-28T13:23:53.040 回答
0

我遇到了类似的问题,我终于通过删除解决方案的 Properties 文件夹中的 licenses.licx 文件来解决它。

于 2015-08-11T15:03:35.230 回答
0

以防万一,Unblock 不是解决方案,因为 Unblock 没有出现在我的 dll 文件属性中。继续寻找并最终关闭我的解决方案文件并使用本地 C: 复制而不是项目 sln 文件的网络 UNC 路径重新打开。走这条路线后能够发布。

于 2016-12-19T16:30:01.783 回答