1

我想检查项目的依赖项(右键单击项目并单击“项目依赖项”)是否已以编程方式正确添加。我怎样才能做到这一点?

恰恰,

Qn- 第 1 部分)如何访问解决方案中项目的“依赖项”(而不是引用)?

Qn-第 2 部分)我应该如何(而不是在哪里,如 csproj/sln...)检查是否已根据需要添加了项目的所有依赖项?

我尝试翻阅 csproj 和 sln 文件。我看不到一个属性/项目组,在解析时会给我一个添加的依赖项列表。

我应该为此目的使用 EnvDTE。我已经在使用 Microsoft.Build.Evaluation 类来完成我正在执行的大部分其他构建操作。我不知道这是否会使过程更加复杂。

请指教。谢谢!!

4

2 回答 2

1

Visual Studio 项目文件实际上只是 XML,因此理论上您可以将文件加载为XmlDocument并选择所有Reference找到的节点。这是我的引用如何存储在示例 VB.net 项目文件中的示例。我想它在 .csproj 文件中并没有太大的不同:

  <ItemGroup>
    <Reference Include="System.Data.Linq" />
    <Reference Include="System.Deployment" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Printing">
  </ItemGroup>

一旦你能够做到这一点,从Include属性中的值构建一个引用名称的集合然后验证它是否包含你期望的引用将是非常简单的。

项目具有的任何显式引用也是隐式项目依赖它们在“解决方案属性”窗口中显示,但不可编辑。

编辑

如果您正在寻找解决方案的项目依赖项,除了您拥有的任何显式引用之外,还手动选择了这些依赖项,您可以在 .sln 文件中找到这些依赖项。

当您在解决方案属性窗口中手动选择项目依赖项时,会在Project的部分内创建一个ProjectSection(ProjectDependencies)部分。

例如,以下是 .sln 文件中的正常项目条目:

Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MyProject",
"Source\MyProject\MyProject.vbproj",
"{AB5BA87B-77D5-4812-B02C-9B4FB87F4EF6}" EndProject

如果您稍后手动添加项目依赖项,该项目将如下所示:

Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MyProject", "MyProject\MyProject.vbproj", "{AC1BE764-AC53-47B0-9608-648C28D3BB79}"
    ProjectSection(ProjectDependencies) = postProject
        {10F4313B-A586-4CC6-BAFE-51930EC8C68F} = {10F4313B-A586-4CC6-BAFE-51930EC8C68F}
    EndProjectSection
EndProject

注意添加的ProjectSection(ProjectDependencies)

不幸的是,与项目文件不同的是,解决方案文件不是 XML。这将使将文件直接解析为文本更加困难。此外,解决方案文件中的项目与 GUID 相关联,以后引用它们的任何部分都使用该 GUID,而不是项目名称。这也使事情变得更加复杂,因为您必须对解决方案文件进行一些预处理以创建 GUID 到项目名称的映射。此时,您将能够从解决方案文件中列出任何明确的项目依赖关系,并比较添加的依赖项是否是您希望添加的依赖项。

于 2012-09-05T16:51:25.700 回答
0

就是我想要的。我已经解析了 sln 文件并提取了项目的 GUID。

于 2012-09-10T14:43:15.583 回答