“安全警告”对话框(MSBuild 项目文件)

更新:2007 年 11 月

在 Visual Studio 2005 及更高版本中,可以自定义 MSBuild 项目文件以重新定义生成过程。将项目加载到集成开发环境 (IDE) 中后,会立即在设计时执行项目文件中定义的生成过程部分。“安全警告”对话框检测可能带来安全风险的自定义项目文件,并允许您选择 IDE 打开项目的方式。

UI 元素

  • 更多详细信息
    打开一个对话框,该对话框说明为什么确定项目文件具有潜在的安全风险。

  • 加载项目以进行浏览
    用更高的安全性在 IDE 中打开项目。此选项允许您浏览项目的内容,但是某些功能(如 IntelliSense)受到限制。当加载项目以进行浏览时,诸如生成、清理、发布或打开设计器等操作仍是不安全的。

  • 以正常方式加载项目
    在 IDE 中以正常方式打开项目。如果您信任源并了解涉及的潜在风险,可以使用此选项。IDE 不限制任何项目功能,并且不会针对此项目再次向您给出提示。

  • 对于此解决方案中的每一个项目都询问我
    选择此选项,将针对解决方案中的每个项目向您给出提示。

确定不安全的项目文件

将项目文件确定为具有潜在安全风险的原因有几个。这些原因是:

  • 项目文件包含一个或多个非标准的 Import 元素。

  • 项目文件覆盖了一个或多个可能不安全的目标。有关目标的更多信息,请参见 MSBuild 目标

  • 项目文件覆盖了一个或多个可能不安全的属性。有关属性的更多信息,请参见 MSBuild 属性

  • 项目文件定义了一个或多个可能不安全的项。有关项的更多信息,请参见 MSBuild 项

  • 项目文件包含一个或多个 UsingTask 元素。

  • 项目项位于可能不安全的位置。

非标准的 Import 元素

标准 .targets 文件的列表存储在注册表中的以下位置:HKEY_LOCALMACHINE\Software\Microsoft\VisualStudio\8.0\MSBuild\SafeImports\。如果项目文件导入注册表中没有存储的 .targets 文件,它将被确定为具有潜在的安全风险。

潜在的危险目标

IDE 在加载项目时运行多个目标。如果这些目标之一在自定义项目文件中已被覆盖,它将被识别为具有潜在的安全风险。IDE 在加载项目时运行的目标包括:

  • Compile

  • GetFrameworkPaths

  • AllProjectOutputGroupsDependencies

  • AllProjectOutputGroups

  • CopyRunEnvironmentFiles

  • ResolveComReferences

  • ResolveAssemblyReferences

  • ResolveNativeReferences

具有潜在危险的属性

下面的列表介绍了具有潜在危险的属性的基本类型:

  • 具有潜在危险的目标的 DependsOn 属性 (Attribute) 中使用的属性 (Property)。

  • 在安全的 .targets 文件中使用的 Import 元素的 Project 属性 (Attribute) 中使用的属性 (Property)。

  • 由具有潜在危险的目标或其任务使用的属性。

  • 以下划线 (_) 开头的属性。

  • IDE 还使用一些特殊的属性来管理具有潜在危险的目标、项和属性。这些属性无法在项目文件中覆盖。特殊属性如下:

  • LoadTimeSensitiveTargets

  • LoadTimeSensitiveProperties

  • LoadTimeSensitiveItems

  • LoadTimeCheckItemLocation

具有潜在危险的项

导入的 .targets 文件使用的某些项无法在项目文件中覆盖。如果覆盖了一个或多个这样的项,项目将被视为具有潜在的安全风险。

UsingTask 元素

自定义任务可以运行可能不安全的代码。因此,包含一个或多个 UsingTask 元素的所有项目文件都被视为具有潜在的安全风险。

位于具有潜在危险的位置的项目项

位于原本安全的 .targets 文件中的某些项使用用户定义的项目属性设置自己的路径。为了防止项覆盖重要的文件,包含计算为下列位置之一或其任何子目录的项路径的项目文件,将被视为具有潜在的安全风险,除非它们还位于解决方案文件或项目文件目录中或其下的目录中:

  • 任何驱动器的根目录。

  • Windows 目录,如 C:\Windows\。

  • Program Files 目录,如 C:\Program Files\。

请参见

概念

MSBuild

其他资源

MSBuild 参考

MSBuild 概念