C#:在构建项目时复制依赖项的依赖项

C#:在构建项目时复制依赖项的依赖项,c#,visual-studio,msbuild,C#,Visual Studio,Msbuild,我有一个C#项目(例如project.exe),它依赖于a.dll,而a.dll依赖于b.dll 当我生成Project.exe时,会生成a.dll并将其复制到Project.exe的输出文件夹中,但不会将b.dll复制到输出文件夹中 在生成Project.exe时,如何将a.dll和b.dll复制到Project.exe的输出文件夹中 编辑:我认为需要指出的是,我希望保持Project.exe和b.dll彼此解耦。这就是拥有一个.dll的意义所在。是否尝试检查b.dll的复制本地属性 在Vis

我有一个C#项目(例如project.exe),它依赖于a.dll,而a.dll依赖于b.dll

当我生成Project.exe时,会生成a.dll并将其复制到Project.exe的输出文件夹中,但不会将b.dll复制到输出文件夹中

在生成Project.exe时,如何将a.dll和b.dll复制到Project.exe的输出文件夹中


编辑:我认为需要指出的是,我希望保持Project.exe和b.dll彼此解耦。这就是拥有一个.dll的意义所在。

是否尝试检查b.dll的复制本地属性

  • 在Visual Studio中,单击解决方案资源管理器选项卡
  • 在引用下查找b.dll
  • 单击鼠标右键并选择“属性”
  • 确保“复制本地”设置为True

  • 看看这是否能解决问题。

    您可以使用msbuild copy命令来实现它。请右键单击项目节点->卸载项目->右键单击项目->编辑project.csproj,在csproj文件中添加以下代码

    <Target Name="AfterBuild">
      <Copy SourceFiles="$(MSBuildProjectDirectory)\..\b\$(OutputPath)b.dll" DestinationFolder="$(OutputPath)" ContinueOnError="true"/>  
      </Target>
    
    
    
    这是样品供你参考。

    执行生成后事件的一种方法:右键单击项目>属性>生成>生成后,您必须编写一个批处理命令来复制dll。这应该是开箱即用的,这就是引用程序集解析的工作方式。因此,我无法复制这一点。如果a.dll将b.dll作为引用,而foo.exe将a.dll作为引用,并且设置了CopyLocal(对于b.dll和a.dll),则b.dll和a.dll都将复制到foo.exe的目录中。因此,您必须提供更多信息。您是否解决了问题,如果问题仍然存在,请随时通知我。如果没有,请添加b.dll作为project.exe的引用,并执行相同的操作。是的,Copy Local设置为true,这没有帮助。我知道我可以添加b.dll作为对Project.exe的引用,但我希望避免这种情况,并保持这些项目的解耦。Husain对您的问题的评论可能是最好的方法。您可以使用内置变量(如OutDir)作为生成后事件复制到bin目录。使用AfterBuild的问题是,如果其他人也希望使用它,它将被覆盖,并且根本不会执行。更好地使用,例如后目标=“构建”。