没有引用的 C# 项目依赖项

luk*_*e77 5 c# msbuild dependencies csproj visual-studio

我有一个包含多个项目的解决方案。

假设我有项目:

  • P1
  • P2参考P1
  • P3
  • P4引用P1P3依赖于块包N1

P2是我的启动项目。

我想配置P2并依赖于P4,以便构建P4 ,并将P4和依赖项推送到P2的 bin 文件夹,但我不希望P2的 dll 有对P4的 .net 引用

我通过 csproj 中的特定项目参考部分成功地做到了这一点:

<ProjectReference Include="..\P4\P4.csproj">
  <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  <OutputItemType>Content</OutputItemType>
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  <Targets>Build;DebugSymbolsProjectOutputGroup</Targets>
</ProjectReference>
Run Code Online (Sandbox Code Playgroud)

但此解决方案仅添加P4而不是依赖项(P3N1

有谁知道该怎么做?

谢谢

Leo*_*SFT 1

有谁知道该怎么做?

这是间接依赖关系的默认行为。

如果项目P4实际上不包含任何显式使用参考项目P3和 nuget 包N1的代码,则 VS/MSBuild 不会检测到P2需要P3 , N1,因此 MSBuild 认为没有必要复制P3 , N1到P2的输出文件夹。这就是为什么只将P4而不是依赖项(P3N1)添加到P2的 bin 目录中的原因。

要解决此问题,您可以直接引用P3N1来投影P2或在P2的构建事件中添加复制命令行以将这些 dll 复制到 bin 文件夹中。

此外,您还可以将虚拟代码添加到项目 P2 中使用项目引用P3N1的文件中。

有关更多详细信息,请参阅如果在解决方案中使用项目依赖项,MSBuild 不会复制引用(DLL 文件) 。

希望这可以帮助。