Visual Studio 2010构建错误 - HRESULT异常:0x800300FA(STG_E_ABNORMALAPIEXIT)

14

最近,我们将开发环境从VS2008迁移到了VS2010(Ultimate)。

对于其中一个解决方案(目前全部为C#、.NET Framework 3.5和ASP.NET 2.0),其中包含6个项目,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网站会出现构建错误。这适用于单独构建项目或重建解决方案。

希望能够提供任何指针,以便我可以成功地使用提供的凭据进行构建。

5个回答

13

检查模拟用户的权限。

刚将标志设置为 false 时,<identity impersonate="false"/>,它对我也起作用了。 然而,一旦将其设置回 true,它就构建成功了,但当我加载网站时,出现以下错误:

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

现在这台机器在域上,该用户是本地用户,应该具有管理员权限。但是,当我重新检查时,它并没有这个权限。看起来每次重启都会重新设置本地管理员的策略。


3
我将模拟的域用户添加到了IIS_IUSRS组中,该组具有对temp文件夹的写访问权限。然后一切都正常了。 - cab0

4

我知道已经有一个被接受的答案了,但是对于通过错误代码搜索到这个页面的其他人...

请检查您要模拟的用户的权限。

在我的情况下,我只在开发机上遇到了这个错误,而在我们的测试或部署服务器上没有遇到过。(一段时间以来,我通过在我的开发环境中从配置中删除“身份”节点并在构建后添加该行来解决此问题,这样它就不会成为任何人的问题,除了我...)

在我的环境中,所有我们的Web应用程序在运行时都会模拟特定的用户。我已经创建了用户帐户,但没有明确设置其帐户权限。当我将该用户添加为我的开发机管理员时,这个问题完全消失了。(我知道这不是理想的解决方法,但是它对我有效,并且对我们的“真实”服务器上锁定该用户帐户造成的伤害最小...)


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

1
如果之前提到的任何解决方案都没有起作用,并且您正在使用模拟身份,则答案是为您模拟的用户授予访问以下文件夹的权限:

  1. C:\Windows\Microsoft.NET\Framework[v4.0.30319或您使用的版本]\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文件和其他所需文件的权限。


0

感谢您的回复mattdwen - 不幸的是,您的建议从未起作用(“Temporary ASP.NET Files”文件夹权限正确),但确实提供了线索,使我(HACK)解决了这个问题。在阅读了您的答案后,我尝试了以下操作,引导我走向不同的方向:

(1) 我成功地重新构建了解决方案3次,分别使用<impersonate="true"/><identity impersonate="false"/><identity impersonate="true" userName="DOMAIN\different-user" password="password"/> (这里的“different-user”是本地管理员)。

(2) 然后,我将web.config修改回原始的<identity impersonate="true" userName="DOMAIN\user" password="password"/>,仅重新构建ASP.NET网站项目- 成功。

这让我得出结论(原始错误消息强烈暗示):当VS重新构建解决方案时,它无法以<identity impersonate="true" userName="DOMAIN\user" password="password"/> 构建Class Libraries或其依赖项之一,在ASP.NET网站项目中。

涉及的类库有许多对第三方组件、Office互操作等的引用,尝试逐个排除并发现真正的根本原因现在会耗费太多时间,因此我暂时实施了一个hack(令人不安),将原始用户添加到本地管理员组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接