Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#无参考的项目依赖关系_C#_Visual Studio_Msbuild_Dependencies_Csproj - Fatal编程技术网

C#无参考的项目依赖关系

C#无参考的项目依赖关系,c#,visual-studio,msbuild,dependencies,csproj,C#,Visual Studio,Msbuild,Dependencies,Csproj,我有一个多项目的解决方案 假设我有一些项目: P1 P2参考P1 P3 P4参考P1和P3对熔核包的依赖性N1 P2是我的创业项目 我想将P2配置为对P4的依赖项,因此将构建P4,并将依赖项推送到P2的bin文件夹中,但我不希望P2的dll具有对P4的.net引用 我通过csproj中的特定项目参考部分地做到了这一点: <ProjectReference Include="..\P4\P4.csproj"> <ReferenceOutputAssembly>fal

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

假设我有一些项目:

  • P1
  • P2参考P1
  • P3
  • P4参考P1P3对熔核包的依赖性N1
P2是我的创业项目

我想将P2配置为对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>

假的
内容
总是
建设;调试符号ProjectOutputGroup
但此解决方案只添加了P4,而不添加依赖项(P3N1

有人知道怎么做吗

谢谢

有人知道怎么做吗

这是间接依赖项的默认行为

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

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

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

有关更多详细信息,请参阅


希望这能有所帮助。

为什么不能将所有引用放入P2?我不想。根据P2的部署方式和位置,并非所有类似P4的项目都将部署。您好,谢谢您的回答。P4直接使用P3和N1。但实际上,P2不使用P4或P3或N1@luke77,您是什么意思“
我想将P2配置为依赖于P4
”?您想要P2参考P4还是P4参考P2?需要确认。对不起,我所说的依赖关系是指构建依赖关系。如果我构建P2,我还希望构建P4,并将P4、P3、N1“粘贴”到P2的bin。@luke77,如果您希望
如果我构建P2,我还希望构建P4,为什么不设置P2引用P4?你不想设置那个吗?如果是,您可以在P2中添加自定义任务以在生成P2之前生成P4,并将P3,N1复制到P2的bin文件夹。@LeoLiu MSFT:您提到过添加自定义任务以生成P4,并将P3,N1复制到P2的bin文件夹。请您给我举一个关于这个主题的例子/片段/讨论,好吗?