閱讀英文

共用方式為


AllowPartiallyTrustedCallersAttribute 類別

定義

允許部分信任的程式代碼呼叫元件。 如果沒有此宣告,只有完全信任的呼叫端才能使用元件。 無法繼承這個類別。

C#
[System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple=false, Inherited=false)]
public sealed class AllowPartiallyTrustedCallersAttribute : Attribute
C#
[System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple=false, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AllowPartiallyTrustedCallersAttribute : Attribute
繼承
AllowPartiallyTrustedCallersAttribute
屬性

範例

下列範例示範如何使用 AllowPartiallyTrustedCallersAttribute 類別。

C#
// The following HTML code can be used to call the user control in this sample.
//
//		<OBJECT id="usercontrol" classid="usercontrol.dll#UserControl.UserControl1" width="800"
//		height="300" style="font-size:12;">

// To run this test control you must create a strong name key, snkey.snk, and 
// a code group that gives full trust to assemblies signed with snkey.snk.

// The user control displays an OpenFileDialog box, then displays a text box containing the name of 
// the file selected and a list box that displays the contents of the file.  The selected file must 
// contain text in order for the control to display the data properly.

// Caution  This sample demonstrates the use of the Assert method.  Calling Assert removes the 
// requirement that all code in the call chain must be granted permission to access the specified 
// resource, it can open up security vulnerabilities if used incorrectly or inappropriately. Therefore, 
// it should be used with great caution.  Assert should always be followed with a RevertAssert 
// command to restore the security settings.

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.IO;
using System.Security;
using System.Security.Permissions;
using System.Reflection;
using System.Runtime.CompilerServices;

// This strong name key is used to create a code group that gives permissions to this assembly.
[assembly: AssemblyKeyFile("snKey.snk")]
[assembly: AssemblyVersion("1.0.0.0")]

// The AllowPartiallyTrustedCallersAttribute requires the assembly to be signed with a strong name key.
// This attribute is necessary since the control is called by either an intranet or Internet
// Web page that should be running under restricted permissions.
[assembly:AllowPartiallyTrustedCallers]
namespace UserControl
{
    // The userControl1 displays an OpenFileDialog box, then displays a text box containing the name of 
    // the file selected and a list box that displays the contents of the file.  The selected file must 
    // contain text in order for the control to display the data properly.
    public class UserControl1 : System.Windows.Forms.UserControl
    {
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.ListBox listBox1;
        // Required designer variable.
        private System.ComponentModel.Container components = null;

              // Demand the zone requirement for the calling application.
              [ZoneIdentityPermission(SecurityAction.Demand, Zone = SecurityZone.Intranet)]
        public UserControl1()
        {
            // This call is required by the Windows.Forms Form Designer.
            InitializeComponent();

            // The OpenFileDialog box should not require any special permissions.
            OpenFileDialog fileDialog = new OpenFileDialog();
            if(fileDialog.ShowDialog() == DialogResult.OK)
            {
                // Reading the name of the selected file from the OpenFileDialog box
                // and reading the file requires FileIOPermission.  The user control should 
                // have this permission granted through its code group; the Web page that calls the 
                // control should not have this permission.  The Assert command prevents a stack walk 
                // that would fail because the caller does not have the required FileIOPermission.  
                // The use of Assert can open up security vulnerabilities if used incorrectly or 
                // inappropriately. Therefore, it should be used with great caution.
                // The Assert command should be followed by a RevertAssert as soon as the file operation 
                // is completed.
                new FileIOPermission(PermissionState.Unrestricted).Assert();
                textBox1.Text = fileDialog.FileName;
                // Display the contents of the file in the text box.
                FileStream fsIn = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read, 
                    FileShare.Read);
                StreamReader sr = new StreamReader(fsIn);
            
                // Process every line in the file
                for (String Line = sr.ReadLine(); Line != null; Line = sr.ReadLine()) 
                {
                    listBox1.Items.Add(Line);
                }
                // It is very important to call RevertAssert to restore the stack walk for
                // file operations.
                FileIOPermission.RevertAssert();
            }
        }

        // Clean up any resources being used.
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if( components != null )
                    components.Dispose();
            }
            base.Dispose( disposing );
        }

        #region Component Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify 
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.SuspendLayout();
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(208, 112);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(320, 20);
            this.textBox1.TabIndex = 0;
            this.textBox1.Text = "textBox1";
            this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
            // 
            // listBox1
            // 
            this.listBox1.Location = new System.Drawing.Point(200, 184);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(336, 108);
            this.listBox1.TabIndex = 1;
            // 
            // UserControl1
            // 
            this.Controls.Add(this.listBox1);
            this.Controls.Add(this.textBox1);
            this.Name = "UserControl1";
            this.Size = new System.Drawing.Size(592, 400);
            this.Load += new System.EventHandler(this.UserControl1_Load);
            this.ResumeLayout(false);
        }
        #endregion

        private void UserControl1_Load(object sender, System.EventArgs e)
        {
        }

        private void textBox1_TextChanged(object sender, System.EventArgs e)
        {
        }
    }
}

備註

重要

不再支援部分信任的程序代碼。 此屬性在 .NET Core 中沒有作用。

注意

.NET Framework 4 引進會影響 AllowPartiallyTrustedCallersAttribute 屬性行為的新安全性規則(請參閱 Security-Transparent 程式代碼、層級 2)。 在 .NET Framework 4 中,所有程式代碼預設為安全性透明,也就是部分信任。 不過,您可以標註個別類型和成員,以指派其他透明度屬性。 如需這項和其他安全性變更,請參閱安全性變更。

.NET Framework 2.0 版 () 元件必須具有強名稱,才能有效地使用 AllowPartiallyTrustedCallersAttribute (APTCA) 屬性。 .NET Framework 4 () 元件不需要強名稱,APTCA 屬性才有效,而且可以包含透明、安全性關鍵和安全性關鍵程序代碼。 如需在元件層級套用屬性的詳細資訊,請參閱 套用屬性

根據預設,如果強名稱的元件未在元件層級明確套用這個屬性,它只能由授與完全信任的其他元件呼叫。 將 FullTrustLinkDemand 放在元件中每個可公開存取類別的公用或受保護方法上,以強制執行這項限制。 部分信任程式代碼所要呼叫的元件可以透過使用 AllowPartiallyTrustedCallersAttribute來宣告其意圖。 C# 中的宣告範例是 [assembly:AllowPartiallyTrustedCallers];Visual Basic 中的範例是 <assembly:AllowPartiallyTrustedCallers>

警告

此元件層級屬性的存在可防止預設行為放置 FullTrustLinkDemand 安全性檢查,並讓元件可從任何其他元件(部分或完全信任)元件呼叫。

當APTCA屬性存在時,所有其他安全性檢查都會如預期般運作,包括存在的任何類別層級或方法層級宣告式安全性屬性。 此屬性只會封鎖隱含且完全信任的呼叫端需求。

這不是宣告式安全性屬性,而是一般屬性(它衍生自 System.Attribute,而不是 System.Security.Permissions.SecurityAttribute)。

如需詳細資訊,請參閱從部分信任的程式代碼使用連結庫

建構函式

屬性

PartialTrustVisibilityLevel

取得或設定以 AllowPartiallyTrustedCallersAttribute (APTCA) 屬性標示之程式代碼的預設部分信任可見度。

TypeId

在衍生類別中實作時,取得這個 Attribute的唯一標識碼。

(繼承來源 Attribute)

方法

Equals(Object)

傳回值,這個值表示這個實例是否等於指定的物件。

(繼承來源 Attribute)
GetHashCode()

傳回這個實例的哈希碼。

(繼承來源 Attribute)
GetType()

取得目前實例的 Type

(繼承來源 Object)
IsDefaultAttribute()

在衍生類別中覆寫時,指出這個實例的值是否為衍生類別的預設值。

(繼承來源 Attribute)
Match(Object)

在衍生類別中覆寫時,傳回值,指出這個實例是否等於指定的物件。

(繼承來源 Attribute)
MemberwiseClone()

建立目前 Object的淺層複本。

(繼承來源 Object)
ToString()

傳回表示目前 物件的字串。

(繼承來源 Object)

明確介面實作

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

將一組名稱對應至對應的分派標識碼集。

(繼承來源 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

擷取 物件的型別資訊,可用來取得介面的類型資訊。

(繼承來源 Attribute)
_Attribute.GetTypeInfoCount(UInt32)

擷取物件提供的類型資訊介面數目(0 或 1)。

(繼承來源 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

提供物件所公開屬性和方法的存取權。

(繼承來源 Attribute)

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0