我想測試部分信任環境中某段.NET代碼的行爲。什麼是最快的方式來設置呢?隨意假定我(和其他讀者)是全部CAS noobs。在部分信任環境中測試.NET代碼
@Nick:謝謝你的回覆。唉,有問題的工具是明確的非託管代碼。在我的問題中,我沒有說「管理」,也不應該假定人們會從「.NET」標記中推斷出它。
我想測試部分信任環境中某段.NET代碼的行爲。什麼是最快的方式來設置呢?隨意假定我(和其他讀者)是全部CAS noobs。在部分信任環境中測試.NET代碼
@Nick:謝謝你的回覆。唉,有問題的工具是明確的非託管代碼。在我的問題中,我沒有說「管理」,也不應該假定人們會從「.NET」標記中推斷出它。
這是一個很好的問題,特別是從TDD的角度來看,並驗證不同信任場景下的代碼。
我想我會處理這個的辦法是沿着線的東西 -
在使用AppDomain.CreateDomain()過載,使您可以在通過我的TDD的代碼創建一個AppDomain PermissionSet中。 PermissionSet將被構建爲匹配您想要測試的不同信任方案。
負載含有下測試邏輯到應用程序域
組件創建的類型/調用方法等中的應用程序域,陷阱安全異常
東西有點像該實例。我還沒有時間敲定一個概念證明呢。
使用Microsoft Application Verifier。
AppVerifier的幫助確定:
您應該看看.NET Framework配置工具。這是在.NET SDK,你可以在這裏上運行它找到的指令...... http://msdn.microsoft.com/en-us/library/2bc0cxhc.aspx
在運行安全策略部分,你會發現3策略級別:企業,計算機和用戶。如果您鑽入機器或用戶,您會發現代碼組定義和權限集。當你說你想在部分信任環境中測試一些.NET代碼時,我想你會想根據已經定義的標準權限集之一進行測試,例如Internet。您需要定義一個代碼組,它與您的應用程序(或特定程序集)相匹配,並將您選擇的權限集分配給代碼組。
您也可以定義您自己的自定義權限集,但現在讓我們保持簡單。
選擇您希望您的新代碼組在機器範圍內存在,還是僅存在於您的用戶帳戶,並相應地鑽入機器或用戶策略級別。您會看到一個名爲_All _ Code_的代碼組。創建一個子碼組一個內,通過右鍵單擊並選擇新建...
給它一個名字,說PartialTrustGroup,然後單擊下一步。
您必須爲此組指定成員資格條件,並且存在各種類型。我想在我的機器上創建一個名爲PartialTrust的特定文件夾,然後創建一個匹配的URL成員資格條件。因此,我的網址如下所示... file:// c:/ users/martin/documents/partialtrust/*
*是通配符,用於捕獲該路徑下的任何程序集。點擊下一頁。
現在您可以爲您的新代碼組選擇一個權限。目前,請選擇互聯網。這是一個相當嚴格的集合,類似於Java applet沙箱。點擊下一步和完成。
現在右鍵單擊您的新代碼組,然後選擇屬性。在常規選項卡中,確保選中最上面的複選框,然後單擊確定。
現在,從指定的URL下的某個位置加載的任何.NET程序集都將對其應用Internet權限集。如果您沒有編寫代碼仔細觀察縮減的權限集,那麼預計會得到一些SecurityExceptions。
對不起,這是一個很長的描述。它確實比聽起來簡單得多。
你要找的是內置到Visual Studio的功能:
你的項目的安全選項卡中,有一個「高級」按鈕,讓你配置是否要在調試完全信任或指定的信任級別。
我剛在博客上發佈了一篇名爲Partial Trust Testing with xUnit.net的文章。它詳細介紹了我們在Entity Framework團隊中使用的基於xUnit.net的框架以中等信任度來執行代碼。
下面是它的用法的一個例子。
public class SomeTests : MarshalByRefObject
{
[PartialTrustFact]
public void Partial_trust_test1()
{
// Runs in medium trust
}
}
// Or...
[PartialTrustFixture]
public class MoreTests : MarshalByRefObject
{
[Fact]
public void Another_partial_trust_test()
{
// Runs in medium trust
}
}
+1這只是幫了我很多謝謝。 – 2011-02-14 13:35:54