【问题标题】:VSTS 2010 SGEN : error : Could not load file or assembly (Exception from HRESULT: 0x80131515)VSTS 2010 SGEN:错误:无法加载文件或程序集(HRESULT 异常:0x80131515)
【发布时间】:2011-03-01 17:37:57
【问题描述】:

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

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

SGEN:错误:无法加载文件或 程序集 '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 问题,因为正是这个实用程序说该路径不受信任......

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 工作...只有开发人员有这个问题..就在 TFS 上...奇怪
    • 它被锁定的原因是我的源代码位于共享中。将代码移至本地磁盘 - 一切正常。 (关于共享问题的 .NET4 SGEN 权限)。
    • 请注意,大多数公司不允许本地管理员访问,或者明确禁止普通用户(包括开发人员)访问“取消阻止”按钮。
    • 我遇到了从 zip 文件复制的 DLL 的问题。
    • 我自己今天刚遇到这个问题,解锁所有相关的 DLL 文件就像一个魅力。
    【解决方案2】:

    我刚刚在 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

    【讨论】:

    • 是的,我遇到了这个解决方案,但对我来说没用,我没有改变任何东西......我们解决了序列化程序集关闭
    • 对于其他人的信息,SGEN 通常位于“C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools”
    • 开发人员 IT:在我的情况下,因为我需要它们,所以无法关闭序列化程序集的生成。但是,序列化程序集的转换也是一种解决方案。
    • 注意如果是64位的机器需要在...\Bin\NETFX 4.0 Tools\x64\下创建
    • 对于 VS2015 将其定位在:C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools
    【解决方案3】:

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

    【讨论】:

    • 也为我工作。根据他在问题中编辑的评论,这也是 OP 的正确答案。
    • 为我工作。谢了。
    • 项目属性 -> 构建 -> 生成序列化程序集是自动的,将其设置为关闭后,编译开始像魅力一样工作。 +1 和谢谢。
    • 这也适用于我的情况。无论如何,我想知道关闭它到底意味着什么,因为默认情况下它是为发布配置打开的:我想确保当我在生产环境中发布它时它对应用程序没有任何副作用。跨度>
    • 只有一个项目有这个问题 - 将它从 Auto 转为 Off - 这个项目引用了一个 SOAP WS。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,并通过在 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>
      

      【讨论】:

        【解决方案6】:

        对于那些运行 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>
        

        【讨论】:

          【解决方案7】:

          我遇到了同样的问题,在 GAC 中加载了程序集并运行了

          【讨论】:

          • 问题是我们不希望 GAC 中有这些人。我们解决了序列化程序集关闭
          【解决方案8】:

          在我的情况下,将下面的 sn-p 添加到 app.config 文件中。我正在运行带有 VS2010 服务包 1 的 Windows XP。

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

          【讨论】:

            【解决方案9】:

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

            为了解锁文件夹中的所有文件,我使用了 power shell 和以下命令

            dir -Path [directory path] -Recurse | Unblock-File
            

            【讨论】:

              【解决方案10】:

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

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

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

              【讨论】:

                【解决方案11】:

                unblockconfig 都不适合我。 对我有用的是this tip about caspol。 我跑了

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

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

                【讨论】:

                  【解决方案12】:

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

                  【讨论】:

                    【解决方案13】:

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

                    【讨论】:

                      猜你喜欢
                      • 2012-08-19
                      • 2016-03-27
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-10-08
                      • 1970-01-01
                      相关资源
                      最近更新 更多