0

Addin VS2008-.NET3.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アセンブリが見つかりません)。

助言がありますか?

4

1 に答える 1

0

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" の同等のプロジェクト (グローバル プロパティとツール バージョンが同じプロジェクト) がプロジェクト コレクションに既に存在します。このプロジェクト コレクションに同等のものをロードするには、最初にこのプロジェクトをアンロードしてください。

于 2012-08-28T08:12:20.037 に答える