【问题标题】:Get Imports of a Project in Addin VS2008在 Addin VS2008 中获取项目的导入
【发布时间】:2012-08-28 06:56:39
【问题描述】:
我需要在 Addin VS 2008 - .NET 3.5 中获取项目的“导入”列表。
在 VS2010 - .NET 4.0 中,我使用:
EnvDTE.Project project = GetProject();
var project1 = new Microsoft.Build.Evaluation.Project(project.FullName);
project1.Xml.Imports.ForEach(i => {
Trace.WriteLine("\t Import Project: " + i.Project);
});
但在 VS2008 中失败(未找到 Microsoft.Build 程序集)。
有什么建议吗?
【问题讨论】:
标签:
visual-studio-2008
msbuild
visual-studio-addins
envdte
【解决方案1】:
使用 VS2008 和 .net 3.5,Microsoft.Build.BuildEngine.Engine 在 .net 4.0 中已过时
var engine = new Microsoft.Build.BuildEngine.Engine();
var proj = new Microsoft.Build.BuildEngine.Project(engine);
proj.Load(project.FullName);
foreach (Microsoft.Build.BuildEngine.Import import in proj.Imports)
{
contieneTargets = import.ProjectPath.ContainsWithStringComparison("Microsoft.VisualStudio.SharePoint.targets", StringComparison.InvariantCultureIgnoreCase);
Trace.WriteLine("\t Import Project: " + import.ProjectPath);
if (contieneTargets) break;
}
只有一个问题:当这段代码被执行多次时,我得到了一些项目尚未加载的错误。
System.InvalidOperationException:一个等效项目(一个项目
具有相同的全局属性和工具版本)已经存在
在项目集合中,路径为“test.csproj”。加载一个
等价于这个项目集合,先卸载这个项目。