Visual Studio项目将引用的项目的依赖项复制到输出目录

7

是否有可能使Visual Studio将所有已引用项目的依赖项复制到输出路径中?

示例

在解决方案中,Project A(.NET Standard库)定义了一些函数,并依赖于Library L1(通过NuGet)和Library L2(本地.dll,被引用并复制到项目中)

Project B(控制台应用程序)引用Project A。

构建B时,输出文件夹包含B的所有直接依赖项和A.dll。 L1和L2在输出中不可用。 因此,程序无法正常工作。

如何强制VS也将L1和L2复制到B的输出中?

我迄今为止找到的唯一方法是将A打包为NuGet,但这似乎是不必要的开销和不舒适的。 我想我只是忘记了其他人似乎都知道的事情...

编辑(澄清示例)

我的解决方案由两个项目组成。

Project MongoWrapper

  • .NET Standard 2.0类库
  • 依赖于NuGet MongoDB.Driver软件包
  • 实际上使用此依赖项(无僵尸依赖项)

Project ConsoleUser

  • .Net Framework 4.6.1控制台应用程序
  • 引用MongoWrapper项目
  • 实际上使用MongoWrapper

观察

在调试ConsoleUser应用程序时,它会编译并启动。 在运行时,当它调用MongoWrapper中使用MongoDB.Driver的方法时,应用程序崩溃,因为MongoDB.Driver依赖项未复制到ConsoleUser的输出文件夹中。

如何解决此问题?


更加精确,创建一个演示([mcve]) - H H
通常情况下应该可以正常工作,除了可能使用老式的GAC。因此,请列出所有平台、版本、包等信息。 - H H
2个回答

11

问题由使用.Net Standard库和.Net Framework应用程序引入。

简短概述

使用文本编辑器打开.Net Framework项目的.csproj文件。在第一个PropertyGroup内添加以下行:

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

保存文件,重新在Visual Studio中打开解决方案,并执行Clean & Build。

不同项目文件版本中的依赖关系

.Net Framework项目使用旧版本的.csproj项目文件。 引用/依赖项存储在附加的packages.config文件中。 默认情况下,在构建 .Net Framework 项目时,系统会搜索引用项目中的packages.config文件。 如果找不到这样的文件,则构建任务将把所引用的项目视为没有依赖项。 因此,在示例中,未添加MongoDB.Driver库。

通过在.csproj项目文件中添加建议的行,构建任务会搜索所引用项目的项目文件以查找依赖项,其中它们存储在 .Net Standard 项目文件中。

.Net Core项目默认搜索更新的项目文件结构。

可以在“选项-> NuGet->常规->程序包管理”中设置新项目的默认行为。


1
这解决了我的问题。非常感谢你!!!
一年过去了,问题还在那里... :-(
- Tolbxela
这对我有用,但似乎抹掉了NuGet管理。我认为我需要从引用中删除我拥有的NuGet包并重新添加它们。 - Garr Godfrey

2
能否使Visual Studio将所有已引用项目的依赖项复制到输出路径中?
是的。
这就是发布应用程序所做的 - 它准备将应用程序部署。当您发布时,它将包括应用程序运行所需的所有依赖项在输出中。
使用发布工具部署到本地文件夹。可用选项取决于应用程序类型。在解决方案资源管理器中,右键单击项目,选择“发布”,然后选择“文件夹”。有关更多信息,请参见部署到本地文件夹enter image description here 教程:使用Visual Studio 2017发布你的Hello World应用程序 另请参阅:.NET Core应用程序部署

1
已经针对上面澄清的示例测试了这种方法。它并没有按预期工作。此外,它也不适合调试。 - auX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接