我对VS 2017如何计算项目参考感到困惑。这是使用新的csproj文件格式。
我有一个解决方案,其中包含许多相关的类库项目。这些项目使用我写过的其他通用库。反过来,这些通用库中的一些利用其他库。从概念上讲,结构如下:
班级图书馆A - >使用支持库SL1 - >使用支持库SL1a - >使用支持库X
班级图书馆B =>使用支持库SL2 - >使用支持库SL2a - >使用支持库Y
关键是,类库A和类库B都不直接使用支持库X或Y.
然而,如果我没有专门包括X& S库在解决方案中,我得到解析器错误,抱怨在我尝试编译类库A或B时无法找到库X或Y中定义的对象。
我认为csproj文件会处理所有这些,指示VS 2017如何找到支持库X& X的源代码。 Y(它们全部可以在我的本地文件系统上访问,而csproj文件中的路径都使用绝对路径)。
显然,我错过了一些东西。当然,为图书馆X& amp;的项目添加特定参考资料并不是什么大不了的事。是的。但是我想明白为什么我必须这样做。这是来自典型类库A的csproj文件的摘录,它引用了DatabaseJobFramework:
<ItemGroup>
<ProjectReference Include="C:\Programming\WebJobs\src\DatabaseJobFramework\DatabaseJobFramework.csproj" />
<ProjectReference Include="C:\Programming\CampaignSystem\src\CampaignDb\CampaignDb.csproj" />
<ProjectReference Include="C:\Programming\CampaignSystem\src\CampaignMessaging\CampaignMessaging.csproj" />
</ItemGroup>
这是DatabaseJobFramework.csproj的摘录,这是一个典型的支持库SL1:
<ItemGroup>
<ProjectReference Include="C:\Programming\WebJobs\src\ImportFramework\ImportFramework.csproj" />
<ProjectReference Include="C:\Programming\WebJobs\src\JobFramework\JobFramework.csproj" />
<ProjectReference Include="C:\Programming\WebJobs\src\JobMessaging\JobMessaging.csproj" />
</ItemGroup>
这是ImportFramework.csproj的摘录,这是一个典型的支持库SL1a:
<ItemGroup>
<ProjectReference Include="C:\Programming\UtilityLibraries\src\SpecializedCollections\SpecializedCollections.csproj" />
<ProjectReference Include="C:\Programming\UtilityLibraries\src\SystemUtils\SystemUtils.csproj" />
<ProjectReference Include="C:\Programming\DataLibraries\src\dBaseIII\dBaseIII.csproj" />
</ItemGroup>
SystemUtils,一个典型的库X,不依赖于我编写的任何代码;它的所有引用都是系统库(例如,Microsoft.CSharp,System)
其他信息
我使用的解决方法涉及将对项目X(类库X;我的示例中的SystemUtils)的引用添加到解决方案中,即使它已在类库SL1a的csproj文件中引用(ImportFramework,in我的例子。)
换句话说,为什么我必须在解决方案中明确包含SystemUtils,即使我已经在解决方案中包含了ImportFramework,并且&gt;&gt;它&lt;&lt;&lt; csproj文件包含对SystemUtils的引用?