我想检查项目的依赖项(右键单击项目并单击“项目依赖项”)是否已经以编程方式正确添加。 我怎么能这样做?
准确地说,
Qn-第1部分)如何在解决方案中访问项目的“依赖关系”(而不是参考)?
Qn-第2部分)我应该如何(而不是在csproj / sln ......中)检查是否已根据需要添加项目的所有依赖项?
我尝试翻阅csproj和sln文件。我看不到一个属性/项目组,在解析时会给我一个添加的依赖项列表。
我正在为此目的使用EnvDTE。我已经在使用Microsoft.Build.Evaluation类进行我正在进行的大量其他构建操作。我不知道这是否会使这个过程复杂化。
请指教。 谢谢!
答案 0 :(得分: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文件中找到它们。
在解决方案属性窗口中手动选择项目依赖项时,会在项目中创建 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到Project名称的映射。此时,您将能够从解决方案文件中列出任何显式项目依赖项,并比较添加的项是否是您希望添加的项。
答案 1 :(得分:0)
This做我想要的。 我已经解析了sln文件并提取了项目的GUID。