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

时间:2010-06-09 15:18:28

标签: visual-studio-2010 msbuild .net-4.0 tfsbuild sgen

我遇到了VS2010的一个奇怪问题。我们使用TFS来构建我们的API dll,我们曾经在我们的项目中引用它们,使用一个完全可信的映射网络驱动器。我们一直在这样工作至少两年,一切都很完美。

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

  

SGEN:错误:无法加载文件或   assembly'file:/// L:\ Api \ Release   API_20100521.1 \ Release \ CS.API.Exceptions.dll'或其依赖项之一。手术   不受支持。 (例外   HRESULT:0x80131515)

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

我尝试添加

<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问题,因为正是这个实用程序说路径不受信任......

13 个答案:

答案 0 :(得分:211)

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

答案 1 :(得分:56)

我在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策略的一些更改:Link

答案 2 :(得分:21)

有同样的问题,配置更改不起作用。只有当我在项目属性中将Generate Serialization Assembly设置为off时才能正常工作。

答案 3 :(得分:6)

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

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

答案 4 :(得分:3)

我遇到了同样的问题并通过在C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0工具

下添加sgen.exe.config来修复它。

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

<?xml version ="1.0"?>
<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>

答案 5 :(得分: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>

答案 6 :(得分:1)

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

答案 7 :(得分:1)

将下面的代码段添加到app.config文件中。我正在使用VS2010 Service Pack 1运行Windows XP。

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

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:0)

unblockconfig都不适合我。 我的诀窍是this tip about caspol。 我跑了

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

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

就像我一样,Unblock不是解决方案,因为Unblock不会出现在我的dll文件属性中。保持观察并最终关闭我的解决方案文件并使用本地C:copy而不是网络UNC路径重新打开项目sln文件。能够在走这条路线后发布。

答案 12 :(得分:0)

在我看来,一堆dll被阻止了。

要取消阻止文件夹中的所有文件,我通过以下命令使用了Power Shell

Exception: PermissionError: [Errno 1] Operation not permitted: '/home/jenkins/workspace/jobDev/YoctoBuild/Yocto-Linux-v3/build-rzn1d/tmp/work/rzn1_snarc-dip-linux-gnueabi/base-files/3.0.14-r89/package/etc'