﻿# 解決在 Visual Studio 中因為權限不足而無法建置網站的問題

前陣子遇到一個很怪的問題，在正常的安裝下竟然有個專案從 SVN 版本庫簽出後無法正確安裝至我本機的 IIS7 中執行，甚至於無法在 Visual Studio 執行建置(Build)，而且錯誤的狀況都是跟權限有關，但我花了好一段時間才將這個問題解決，原來就是卡在一個很小的地方沒注意到。

這次發生的錯誤訊息如下：

Access to the path 'C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\Temporary ASP.NET Files\\Project1\\265814f7\\8b06370e\\App\_Code.compiled' is denied.

這代表在 ASP.NET 動態編譯時期就無法完成，因為動態編譯的過程中無法存取動態產生的檔案，以致於無法正確編譯網站程式，所以發生錯誤。

以前我也曾經遇過這個問題，這通常與應用程式集區的執行身份識別有關（請見 [IIS應用程式集區自訂身份識別後如何讓 ASP.NET 正常執行](/post/2008/12/31/ASPNET-and-Application-Pool-Identity-setting-in-IIS-60) 一文），但這次狀況更奇怪，通常在 IIS 下無法執行的狀況只要把自訂身份識別的帳戶加入 **IIS\_WPG** 群組 (IIS6) 或加入 **IIS\_IUSRS** 群組 (IIS7) 即可，而且通常在 Visual Studio 編譯時用的是登入者的身份 (Administrator)，怎麼可能會有無法編譯且沒有權限的情勢發生呢？

以下是在 Visual Studio 編譯時所發生的錯誤訊息：

\------ Build started: Project: D:\\...\\WebSite1\\, Configuration: Debug Any CPU ------  
Validating Web Site  
Building directory '/WebSite1/App\_Code/'.  
(0): Build (web): Could not load file or assembly 'AntiXssLibrary, Version=3.1.3524.16873, Culture=neutral, PublicKeyToken=d127efab8a9c114f' or one of its dependencies. Access is denied.  
  
Validation Complete  
\========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========

所以是在 Validating Web Site (驗證網站) 時發生「存取被拒(Access is denied)」的情況，但這代表我 (Administrator) 無法驗證網站嗎？

最後查到原因是因為在 web.config 定義了以下這段

```
<identity impersonate="true" userName="UserA" password="Passw0rd" />
```

因為在 web.config 已經定義了 **變身** (**Impersonation**) 的設定，所以在 Visual Studio 中建置時，雖然可以正確編譯網站，部署到公司內的測試機也可以執行，但在編譯時的**驗證網站**這一段會以該 **UserA** 使用者的身份執行，而該使用者在我本機剛好也不隸屬於任何群組，所以也沒有任何權限，導致建置時無法在 **ASP.NET 的暫存目錄** (C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\Temporary ASP.NET Files) 寫入檔案，以致於無法 建置(Build)成功！

最後我將該使用者 **UserA** 加入到 **IIS\_IUSRS** 群組，所有問題自然迎刃而解，如下圖示：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4cf91d485e84a760a04c-image.png)

這問題一開始並沒那麼直覺，只是覺得納悶說為什麼會有 **存取被拒**(**Access is denied**) 的情況，經過一個小時的盤查才查出結果。
