﻿# 將 ASP.NET 網站部署在 UNC 路徑上最重要的步驟

如果要將 ASP.NET 網站安裝在遠端的 UNC 路徑上，在設定 IIS 時除了一般檔案的存取權限外，最重要的就是 ASP.NET 的執行權限是否有正確設定，由於所有置於 UNC 路徑上的 .NET 應用程式都會預設套用 LocalIntranet 群組，所以你無法將 ASP.NET 佈署在 UNC 路徑上，除非自行新增 .NET 安全性原則。

在沒設定 .NET 安全性群組之前，不管你怎麼設定都會出現以下**安全性例外狀況**的錯誤訊息：

![安全性例外狀況 :: 例外詳細資訊: System.Security.SecurityException: 型別 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 的使用權限要求失敗。](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/56e4399017af4b0c83f7-image.png "安全性例外狀況 :: 例外詳細資訊: System.Security.SecurityException: 型別 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 的使用權限要求失敗。")

![SecurityException: Request for the permission of type ‘System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089′ failed](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/251795cf3c7abef70dcc-image.png "SecurityException: Request for the permission of type ‘System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089′ failed")

**解決此問題的步驟如下：**

1\. \[開始\] / \[執行\] / 輸入 cmd 並按下 Enter

2\. 進入 .Net Framework 的安裝目錄（注意：x86 架構與 x64 架構的目錄並不相同）

    如果是 **x64** 架構請進入 C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727

    如果是 **x86** 架構請進入 C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727

    **注意**: 如果進入錯誤的路徑，怎麼設定還是無法使用，這取決於你的 .NET 應用程式是跑什麼架構！

3\. 執行 CASPOL.exe 工具授權特定 UNC 路徑為「完全信任」，請參考以下指令

```
caspol -m -ag 1. -url "file://\\server\share\*" FullTrust -exclusive on
```

  接著畫面會問你是否確認要執行這個動作，它會要你輸入 yes 或 no，但你只能輸入 y 或 n 喔！( 按 y )

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

  我們可以透過 caspol -listgroups 指令驗證此安全性原則是否設定成功：

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

4\. 最後去設定 IIS ( IIS6 或 IIS 7 )，如果先前已經設定好請務必記得「回收應用程式集區」才能讓生效！

**其他補充說明：**

1\. 如果你不小心新增了兩個重複的 UNC 路徑到 .NET 安全性原則中會造成 ASP.NET 無法執行

   錯誤訊息是: 不允許一個以上的獨佔群組。 或 More than one exclusive group is not allowed.

   ![System.Security.Policy.PolicyException: 不允許一個以上的獨佔群組。](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5e429b54446d74f318c5-image.png "System.Security.Policy.PolicyException: 不允許一個以上的獨佔群組。")

2\. 如果 CASPOL.exe 本身在執行的時候會引發例外(Exception)，那可能要重新開機才能解決此問題！

3\. 若要移除先前設定的安全性原則，可以參考以下指令：

```
caspol -rg 1.6
```

**注意**：所有 .NET 安全性原則都有個編號，記得先用 caspol -listgroups 列出所有群組，並找出你之前新增的安全性原則編號，然後才能帶入指令中。

**相關連結**

-   [CasPol.exe 程式碼存取安全性原則工具幾個常用的指令](/post/2008/09/07/CasPolexe-Code-Access-Security-commands)
-   [Using Caspol.exe to grant .NET applications rights to a remote network share](http://thebackroomtech.com/2009/04/01/using-caspolexe-to-grant-net-applications-rights-to-a-remote-network-share/)
-   [使用程式碼存取安全性原則工具 (Caspol.exe) 設定安全性原則](http://msdn.microsoft.com/zh-tw/library/a0ke3k86.aspx)
-   [程式碼存取安全性原則工具 (Caspol.exe)](http://msdn.microsoft.com/zh-tw/library/cb6t8dtz.aspx)
-   [如何設定 .NET Framework 安全性設定與部署 .NET Framework 應用程式](https://web.archive.org/web/20130930074115/http://support.microsoft.com:80/kb/837909)
-   Executing ASP.Net Application from Network Share in IIS 6.0
-   [CASPOL, Webfarms & content located on remote network devices](http://www.iislogs.com/articles/22/)
-   [How to setup a website to access content on a remote NAS server](http://www.iislogs.com/articles/23/)
-   [Managing Shared Configuration : Managing and Maintaining IIS 7.0](https://learn.microsoft.com/en-us/iis/manage/managing-your-configuration-settings/shared-configuration_264)
-   [Using caspol.exe to add assemblies to full trust assembly list](http://vspug.com/ssa/2007/09/06/using-caspol-exe-to-add-assemblies-to-full-trust-assembly-list/)
