如何使用 AllowPartiallyTrustedCallers 属性调用具有通过使用 Visual C#.net、 Visual C# 2005年或更高版本的 Web 页上的强名称程序集

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 839300
重要本文包含如何帮助降低安全设置或如何关闭计算机上的安全功能为您显示的信息。您可以通过这些更改来解决特定问题。您在进行这些更改之前,我们建议您考虑在您的特定环境中实施该替代方法带来的风险。如果实施该替代方法,采取任何适当的附加措施来帮助保护您的系统。
概要
您可能需要从 Web 页中调用一个 Windows 用户控件。若要调用一个 Windows 控件,用户控件的可访问受保护的资源和作为具有强名称程序集生成时的您必须标记 AllowPartiallyTrusted 程序集属性与 Windows 用户控件的程序集。您还必须包括在调用 Assert 方法来允许 Windows 用户控件访问 受保护的资源。
简介
本分步指南介绍了如何调用 Windows 从 Web 页的用户控件。本文介绍的 Windows 用户控件是作为具有强名称程序集生成的。这篇文章中的示例说明如何使用程序集的 AllowPartiallyTrustedCallers 属性,以便可以从网页访问具有强名称程序集。文章中的示例还介绍了如何使用 Assert 方法。

back to the top

创建具有强名称密钥对

具有强名称密钥对用于为程序集的用户控件中的具有强名称签名。当您创建一个代码组授予权限,才能使用该程序集从部分受信任的代码时使用强名称。
  1. 打开 Visual Studio 命令提示符。

    在 Microsoft Visual Studio.net 2002年中单击 开始、 指向 程序、 指向 Microsoft Visual Studio.net、 指向 Visual Studio.net 工具,然后单击 Visual Studio.net 命令提示符。Visual Studio.net 命令提示窗口中显示。

    在 Microsoft Visual Studio.net 2003年中单击 开始、 指向 程序、 指向 Microsoft Visual Studio.net 2003年、 指向 Visual Studio.net 工具,然后单击 Visual Studio.net 2003年命令提示符。Visual Studio.net 2003年命令提示窗口中显示。

    可视有关 Studio 的 2005 年单击 开始、 指向 程序、 指向 Microsoft Visual Studio 2005、 指向 Visual Studio 2005 工具,然后单击 Visual Studio 2005 命令提示符。Visual Studio 2005 命令提示窗口中显示。

    在可视有关 Studio 的 2008 年单击 开始、 指向 程序、 指向 Microsoft Visual Studio 2008、 指向 Visual Studio 2008 工具,然后单击 Visual Studio 2008 命令提示符。将出现 Visual Studio 2008Command 提示窗口。
  2. 命令提示符下键入以下,然后按 ENTER 键:
    sn-k c:\snKey.snk
back to the top

通过使用 Microsoft Visual C#.net、 Microsoft Visual C# 2005 或更高版本中创建一个 Windows 用户控件

警告此替代方法可能会使您的计算机或网络更容易受到恶意用户或恶意软件 (如病毒的攻击。我们不建议使用此替代方法,但提供此信息,以便您可以在您应自行决定实施此替代方法。使用此替代方法需要您自担风险。

此用户控件演示如何使用 AllowPartiallyTrustedCallers 属性的程序集。只能在完全受信任的调用方通过调用具有强名称程序集,除非该程序集使用 AllowPartiallyTrustedCallers 属性。用户控件的示例还演示了如何使用 Assert 方法。Assert 方法声明调用代码可以使用调用 Assert 方法访问受权限请求该资源的代码。该代码可以访问该资源,即使堆栈中处于较高位置的调用方不拥有访问该资源的权限。

此用户控件使您可以通过使用打开对话框中选择一个文件中。该控件然后打开在列表框中的文本的文件。此用户控件的用户界面包括一个文本框和列表框。文本框将显示为所选文件的名称和列表框显示所选文件的内容。

若要从 OpenFileDialog 框中读取所选文件的名称和读取该的文件的权限类型必须被授予在 FileIOPermission。用户控件必须具有通过其代码组授予此权限。调用控件的网页不具有此权限。

若不成功,因为该调用方没有所需的 FileIOPermission 权限类型执行堆栈步使用 Assert 方法。请注意是否不正确或不恰当地使用 Assert 方法,则 Assert 方法可以打开安全漏洞。因此,您必须非常谨慎使用 Assert 方法。 方法必须遵循 Assert 方法,只要完成文件操作。

注意要确保该文件的内容正确显示在列表框中,使用该用户控件选择仅文本文件。
  1. 启动 Microsoft Visual Studio.net,Microsoft 可 Visual Studio 的 2005年或更高版本的 Visual Studio。
  2. 文件 菜单上指向 新建,然后单击 项目。在 新建项目 对话框。
  3. 项目类型 框中,单击 Visual C# 项目

    注意在 Visual 的 Studio 单击 Visual C#项目类型 下。
  4. 模板 框中,单击 Windows 控件库
  5. 名称 框中键入 用户控件
  6. 单击 确定
  7. 在解决方案资源管理器窗口中右键单击 UserControl1.cs,然后单击 查看代码。 UserControl1.cs 文件将出现。
  8. 将现有代码替换下面的代码:
    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;[assembly:AllowPartiallyTrustedCallers]namespace UserControl{	/// <summary>	/// Summary description for UserControl1.	/// </summary>	public class UserControl1 : System.Windows.Forms.UserControl	{		private System.Windows.Forms.TextBox textBox1;		private System.Windows.Forms.ListBox listBox1;		/// <summary>		/// Required designer variable.		/// </summary>		private System.ComponentModel.Container components = null;		public UserControl1()		{			// This call is required by the Windows.Forms Form Designer.			InitializeComponent();			// TODO: Add any initialization after the InitForm call.			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 Assert command must 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();			}		}		/// <summary>		/// Clean up any resources that are being used.		/// </summary>		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(32, 16);			this.textBox1.Name = "textBox1";			this.textBox1.TabIndex = 0;			this.textBox1.Text = "textBox1";			// 			// listBox1			// 			this.listBox1.Location = new System.Drawing.Point(144, 16);			this.listBox1.Name = "listBox1";			this.listBox1.Size = new System.Drawing.Size(120, 95);			this.listBox1.TabIndex = 1;			// 			// UserControl1			// 			this.Controls.Add(this.listBox1);			this.Controls.Add(this.textBox1);			this.Name = "UserControl1";			this.Size = new System.Drawing.Size(376, 120);			this.ResumeLayout(false);		}		#endregion			}}
  9. 在解决方案资源管理器中,用鼠标右键单击 AssemblyInfo.cs,然后单击 查看代码。 AssemblyInfo.cs 文件将出现。
  10. 找到下面的代码:
    [assembly: AssemblyVersion("1.0.*")]
    此代码替换下面的代码:
    [assembly: AssemblyVersion("1.0.0.0")]
  11. 找到下面的代码:
    [assembly: AssemblyKeyFile("")]
    此代码替换下面的代码:
    [assembly: AssemblyKeyFile("c:\\snKey.snk")]
  12. 生成 菜单上单击 生成解决方案
back to the top

创建要为其指定该权限的程序集的代码组

警告此替代方法可能会使您的计算机或网络更容易受到恶意用户或恶意软件 (如病毒的攻击。我们不建议使用此替代方法,但提供此信息,以便您可以在您应自行决定实施此替代方法。使用此替代方法需要您自担风险。

代码组确定程序集是否与被称为成员条件的管理员定义的条件相匹配。如果匹配的程序集,该代码组授予程序集的一组权限与该代码组关联的。

若要创建代码组,请执行下列操作:
  1. 单击 开始,指向 设置,然后单击 控制面板。将显示 控制面板 窗口。
  2. 双击 管理工具。此时将显示 管理工具 窗口。
  3. 在 Microsoft Visual Studio.net 2002年中双击 $ Microsoft.net 框架配置。在 .NET Framework 配置 窗口出现。

    对于 Microsoft Visual Studio.net 2003年双击 Microsoft.net Framework 1.1 配置。将出现 .net 配置 1.1 窗口。

    在 Microsoft Visual Studio 2005 或更高版本中,双击 $ Microsoft.net Framework 2.0 配置。在 .NET Framework 2.0 配置 窗口出现。
  4. 在左窗格中展开 运行库安全策略,展开 计算机,然后展开 代码组
  5. 用鼠标右键单击 All_Code,然后单击 新建。将显示创建代码组向导。
  6. 请确保 创建新代码组 所选,请在 名称 框中键入 MyUserControlCodeGroup,然后单击 下一步选择条件类型 页上会出现。
  7. 选择此代码组的条件类型 列表中单击 强名称
  8. 单击 导入。在 导入强名称从组件 对话框。
  9. 定位到您在"通过使用 Microsoft Visual C#.net、 Microsoft Visual C# 2005 或更高版本创建一个 Windows 用户控件节中创建的 UserControl.dll 文件,然后单击 打开
  10. 单击 下一步。显示 分配设置为代码组的权限 页面。
  11. 单击 使用现有权限设置、 从在列表中选择 FullTrust,然后单击 下一步。 此时会出现 正在完成向导 页面。
  12. 单击 完成 关闭创建代码组向导。
back to the top

创建一个 HTML 文件,以调用用户控件

创建一个代码组以分配为程序集的权限后,您必须创建要从浏览器,调用用户控件的 HTML 文件,您必须设置环境以确保用户控件调用成功。
  1. 单击 开始,单击 运行,键入 记事本,然后单击 确定
  2. 在记事本,中粘贴以下代码:
    <OBJECT id="MyWinControl1" height="200" width="200" classid="http:UserControl.dll#UserControl.UserControl1" VIEWASTEXT>    </OBJECT> 
  3. Microsoft Internet Information Services (IIS) 根文件夹中将文件另存为 CallUserControl.htm。
  4. 在 IIS 根文件夹"创建使用 Microsoft Visual C#.net、 Microsoft Visual C# 2005 或更高版本的 Windows 用户控件"一节中创建 UserControl.dll 文件复制。
  5. 打开 Microsoft Internet Explorer。
  6. 地址 框中键入 http://localhost/CallUserControl.htm,然后按 ENTER 键。在 打开 对话框出现。
  7. 找到任何文本文件,然后单击 打开。 在浏览器上 列表框 控件中显示文件的文本。
back to the top
参考
有关更多的信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:back to the top

警告:本文已自动翻译

属性

文章 ID:839300 - 上次审阅时间:07/15/2008 19:26:56 - 修订版本: 4.1

Microsoft Visual C# 2005 Express Edition, Microsoft Visual C# .NET 2003 标准版, Microsoft Visual C# .NET 2002 标准版, Microsoft Visual C# 2008 Express Edition

  • kbmt kbhowtomaster kbhowto kblistbox kbfileio kbdll kbcontrol kbweb kbuser kbsecurity kbpolicy kbopenfile KB839300 KbMtzh
反馈