“安全警告”对话框(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\。