如何检测 visual studio 扩展中的非托管 C++ 项目
How can I detect an unmanaged C++ project in a visual studio extension
在我的 Visual Studio 扩展中,我需要检测 C++ 项目是托管代码还是非托管代码。
以前,我有一个满意的方法,在 MSDN 论坛 this posting 中有描述。
在该示例中,有必要获取活动配置的 ManagedExtensions 属性。
Sub Macro1()
Dim objProject As EnvDTE.Project
Dim objConfiguration As EnvDTE.Configuration
Dim objProperty As EnvDTE.Property
For Each objProject In DTE.Solution.Projects
objConfiguration = objProject.ConfigurationManager.ActiveConfiguration()
objProperty = objConfiguration.Properties.Item("ManagedExtensions")
System.Windows.Forms.MessageBox.Show(objProject.Name & " (" & objConfiguration.ConfigurationName & ") ManagedExtensions: " & objProperty.Value.ToString)
Next
End Sub
不幸的是,这个方法对我不再有效。
对于非托管项目,我在尝试获取 ActiveConfiguration 时遇到异常。
对于托管项目,我可以获得 ActiveConfiguration,但 ManagedExtensions 属性 不可用。事实上,我认为属性集合是空的。
是否有识别非托管 C++ 项目的新方法?
您可以通过 VCConfiguration 对象获取 ManagedExtensions 属性,代码类似于
Private Enum compileAsManagedOptions
managedNotSet = 0
managedAssembly = 1
managedAssemblyPure = 2
managedAssemblySafe = 3
managedAssemblyOldSyntax = 4
End Enum
Dim VCProj As Object 'VCProject
Dim VCConfig As Object 'VCConfiguration
Dim VCManagedOption As compileAsManagedOptions = compileAsManagedOptions.managedAssemblyPure
VCProj = prj.Object
If VCProj IsNot Nothing Then
VCConfig = VCProj.Configurations.Item(1)
If VCConfig IsNot Nothing Then
VCManagedOption = VCConfig.ManagedExtensions
End If
End If
其中 prj 是 Envdte.Project 对象。
仅当我根据项目类型知道它是 C++ 项目时才执行此代码。
我将变量定义为对象,这样我就不必添加对
的引用
Microsoft.VisualStudio.VCProject.dll
到我的包,因为这个 DLL 只有在安装了对 C++ 项目的支持后才会出现。
在我的 Visual Studio 扩展中,我需要检测 C++ 项目是托管代码还是非托管代码。
以前,我有一个满意的方法,在 MSDN 论坛 this posting 中有描述。
在该示例中,有必要获取活动配置的 ManagedExtensions 属性。
Sub Macro1()
Dim objProject As EnvDTE.Project
Dim objConfiguration As EnvDTE.Configuration
Dim objProperty As EnvDTE.Property
For Each objProject In DTE.Solution.Projects
objConfiguration = objProject.ConfigurationManager.ActiveConfiguration()
objProperty = objConfiguration.Properties.Item("ManagedExtensions")
System.Windows.Forms.MessageBox.Show(objProject.Name & " (" & objConfiguration.ConfigurationName & ") ManagedExtensions: " & objProperty.Value.ToString)
Next
End Sub
不幸的是,这个方法对我不再有效。
对于非托管项目,我在尝试获取 ActiveConfiguration 时遇到异常。
对于托管项目,我可以获得 ActiveConfiguration,但 ManagedExtensions 属性 不可用。事实上,我认为属性集合是空的。
是否有识别非托管 C++ 项目的新方法?
您可以通过 VCConfiguration 对象获取 ManagedExtensions 属性,代码类似于
Private Enum compileAsManagedOptions
managedNotSet = 0
managedAssembly = 1
managedAssemblyPure = 2
managedAssemblySafe = 3
managedAssemblyOldSyntax = 4
End Enum
Dim VCProj As Object 'VCProject
Dim VCConfig As Object 'VCConfiguration
Dim VCManagedOption As compileAsManagedOptions = compileAsManagedOptions.managedAssemblyPure
VCProj = prj.Object
If VCProj IsNot Nothing Then
VCConfig = VCProj.Configurations.Item(1)
If VCConfig IsNot Nothing Then
VCManagedOption = VCConfig.ManagedExtensions
End If
End If
其中 prj 是 Envdte.Project 对象。
仅当我根据项目类型知道它是 C++ 项目时才执行此代码。
我将变量定义为对象,这样我就不必添加对
的引用
Microsoft.VisualStudio.VCProject.dll
到我的包,因为这个 DLL 只有在安装了对 C++ 项目的支持后才会出现。