VSTS 2010 SGEN:错误:无法加载文件或程序集(HRESULT的异常:0x80131515)


106

我在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/ zh-CN / library / dd409252(VS.100).aspx

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

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

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

Answers:


213

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


工作...只有开发人员才有这个问题..从TFS出发...很奇怪
spaghetticowboy 2012年

它被锁定的原因是我的源代码位于共享中。将代码移至本地磁盘-一切正常。(共享问题上的.NET4 SGEN权限)。
thedrs 2012年

31
上帝祝福你。说真的
FAtBalloon

请注意,大多数公司不允许本地管理员访问,或明确禁止包括开发人员在内的普通用户访问“取消阻止”按钮。
kevinarpe 2012年

2
我从zip文件复制DLL时遇到了这个问题。
79IT 2013年

59

我只是在一个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策略的一些更改:链接


1
是的,我遇到了这个解决方案,但对我却毫无用处,我没有做任何改变...我们解决了序列化程序集关闭的问题
开发人员IT 2010年

7
对于其他人,SGEN通常位于“ C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ NETFX 4.0 Tools”
Steve Cooper

开发人员IT:由于我需要序列化程序集,因此我无法关闭它们。但是,顺带一提,序列化程序集也可以是一个解决方案。
马丁·希尔达尔

1
请注意,如果您需要在... \ BIN \ NETFX 4.0工具\ 64 \创建一个64位的机器
维韦克艾耶尔

1
对于VS2015,请在以下位置找到它:C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools
Farshid 2015年

23

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


也为我工作。根据问题中他的编辑评论,这也是OP的正确答案。
akousmata 2014年

为我工作。Tks。
ViniciusGonçalves18年

1
项目属性->生成->生成序列化程序集为Auto,将其设置为Off后,编译就开始工作了。+1和thanx。
Honza P.

在我看来,这也起作用。无论如何,我想知道到底要关闭它是什么意思,因为默认情况下,它对于Release配置是打开的:我想确定在我将其发布到生产环境时,它对应用程序没有任何副作用。
阿西莫夫,

只有一个项目遇到此问题-将其从“自动”更改为“关”-该项目正在引用SOAP WS。
Subha


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>

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>

1

我遇到了同样的问题,将程序集加载到GAC中并工作了


问题是我们不希望GAC中有这些人。我们解决了序列化程序集关闭的问题
开发人员IT 2010年

1

在我的情况下,可以将以下代码段添加到app.config文件中。我正在运行Windows XP,带有VS2010 Service Pack 1。

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

0

与FYI一样(如果您正在运行Windows 7),可以在以下位置找到sgen.exe文件:

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

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


0

无论是对我unblock还是config对我都不起作用。这个秘诀对我来说是什么caspol?我跑了

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

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


0

我遇到了类似的问题,最后通过删除解决方案“属性”文件夹中的licenses.licx文件解决了这个问题。


0

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.