【问题标题】:Visual Studio 2010 Build Error - Exception from HRESULT: 0x800300FA (STG_E_ABNORMALAPIEXIT))Visual Studio 2010 构建错误 - 来自 HRESULT 的异常:0x800300FA (STG_E_ABNORMALAPIEXIT))
【发布时间】:2011-06-07 09:52:53
【问题描述】:

最近我们将开发环境从 VS2008 迁移到 VS2010(终极版)。

对于一个包含 6 个项目的解决方案(目前所有 C#、.NET Framework 3.5 和 ASP.NET 2.0)VS 自动升级它没有任何问题。

解决方案有:

  1. ASP.NET 网站
  2. 上述站点的VS2010 Web部署项目
  3. Web 服务应用程序
  4. 上述 WSA 的 VS2010 Web 部署项目
  5. 一个类库。
  6. 另一个类库。

但是,当我们构建时出现 1 个错误:

Could not load file or assembly 'ClassLibrary1BLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An API call exited abnormally. (Exception from HRESULT: 0x800300FA (STG_E_ABNORMALAPIEXIT))

经过研究,我终于找到了 ASP.NET 网站配置中的一个条目:

如果我用这条线构建问题:

<identity impersonate="true" userName="DOMAIN\user" password="password"/>

但是,如果我注释掉并使用以下行(没有提供的凭据)构建,则解决方案构建良好,然后将 web.config 修改回上述内容(使用凭据),站点运行良好 - 凭据只会导致构建出现问题

<identity impersonate="true"/>

现在这是最奇怪的问题 - Web 服务应用程序使用提供的凭据构建良好 - 构建错误仅发生在 ASP.NET 网站上。无论是单独构建项目还是重新构建解决方案,这一切都适用。

任何我如何使用提供的凭据成功构建的指针将不胜感激。

【问题讨论】:

    标签: c# visual-studio-2010 exception build


    【解决方案1】:

    检查模拟用户的权限。

    在将标志设置为 false 之后,&lt;identity impersonate="false"/&gt;,它对我来说也变得栩栩如生。 但是,一旦将其设置回 true,它就可以正常构建,但是当我加载站点时,我得到了:

    当前身份(XN-DTDEV\Fusion) 没有写入权限 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET 文件”。

    现在这台机器在域中,并且该用户是本地用户,应​​该具有管理权限。当我回来检查时,它没有。似乎有一个政策会在每次重新启动时重新设置本地管理员。

    【讨论】:

    • 我将模拟域用户添加到我的 IIS_IUSRS 组中,该组对临时文件夹具有写入权限。然后一切都很好。
    【解决方案2】:

    我意识到已经有一个公认的答案,但是对于通过搜索错误代码访问此页面的其他人......

    查看您尝试模拟的用户的权限。

    在我的情况下,我只是在我的开发机器上收到错误,而不是在我们的登台或部署服务器上。 (有一段时间我通过在我的开发环境中从配置中删除“身份”节点并在后期构建中添加该行来解决这个问题,所以除了我之外的任何人都不是问题..

    在我的环境中,我们有一个特定的用户,我们的所有网络应用程序在运行时都会模拟该用户。我已经创建了用户帐户,但没有明确设置其帐户权限。当我在我的开发机器上添加用户作为管理员时,这个问题完全消失了。 (不理想,我知道,但它“对我有用”,并且伤害很小,因为该用户帐户无论如何都被锁定在我们的“真实”服务器上......)

    【讨论】:

      【解决方案3】:

      更改“临时 ASP.NET 文件”的权限后,您需要删除其内容并允许新文件继承新的安全权限

      【讨论】:

        【解决方案4】:

        感谢 mattdwen 的回复 - 不幸的是,您的建议从未奏效(“临时 ASP.NET 文件”文件夹权限是正确的),但确实提供了导致我 (HACK) 解决问题的提示。阅读您的答案后,我尝试了以下方法,这使我朝着不同的方向前进:

        (1) 我使用&lt;impersonate="true"/&gt;&lt;identity impersonate="false"/&gt;&lt;identity impersonate="true" userName="DOMAIN\different-user" password="password"/&gt;(这里的“不同用户”是本地管理员)成功地重建了解决方案 3 次。

        (2) 然后我将 web.config 修改回原来的 &lt;identity impersonate="true" userName="DOMAIN\user" password="password"/&gt; 并且只重建了 ASP.NET 网站项目 - 成功。

        这使我得出结论(原始错误消息强烈暗示)VS 在重建解决方案时无法(由于未知原因)在ASP.NET 网站项目。

        有问题的类库有许多对 3rd 方组件、Office 互操作等的引用,现在尝试一一消除并发现真正的根本原因太费时了。

        因此,我临时实施了 hack(畏缩)将原始用户添加到本地管理员。

        【讨论】:

          【解决方案5】:

          如果前面提到的任何解决方案都不起作用,并且您正在使用模拟。 答案是授予您冒充用户访问以下文件夹的权限:

          1. C:\Windows\Microsoft.NET\Framework[v4.0.30319 or the version that you're using]\Temporary ASP.NET Files

          2. 您的站点目录。

          您可能还需要创建如下文件夹:

          C:\Windows\Microsoft.NET\Framework\[v4.0.30319 or the version that you're using]\Temporary ASP.NET Files\[Application-Name-Goes-Here]
          

          但先试试前一个,它对我有用。

          授予模拟用户权限以保存临时数据、提取 dll 文件以及从目录中任何需要的文件的这两项更改

          【讨论】:

            猜你喜欢
            • 2022-10-13
            • 1970-01-01
            • 1970-01-01
            • 2013-09-21
            • 1970-01-01
            • 1970-01-01
            • 2015-03-20
            • 1970-01-01
            • 2012-11-04
            相关资源
            最近更新 更多