【问题标题】:Visual Studio projects copy dependencies from referenced project into outputVisual Studio 项目将依赖项从引用的项目复制到输出中
【发布时间】:2018-08-15 06:58:21
【问题描述】:

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

示例

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

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

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

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

到目前为止,我发现的唯一方法是将 A 打包为 NuGet,但这似乎是不必要的开销且不舒服。我想我只是忘记了其他人似乎都知道的事情......

编辑(清除示例)

我的解决方案包含两个项目。

MongoWrapper 项目

  • .NET Standard 2.0 类库
  • 依赖于 NuGet MongoDB.Driver 包
  • 实际使用了这个依赖(没有僵尸依赖)

项目控制台用户

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

观察

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

如何解决这个问题?

【问题讨论】:

  • 更精确,创建一个演示 (minimal reproducible example)
  • 它应该正常工作,除了可能是老式的 GAC 用法。所以请列出所有平台、版本、包等。

标签: c# visual-studio visual-studio-2017 .net-standard-2.0


【解决方案1】:

问题是由使用 .Net 标准库和 .Net Framework 应用程序引起的。

TLDR

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

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

保存文件,在 Visual Studio 中重新打开解决方案并执行清理和构建

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

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

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

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

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

【讨论】:

  • 这解决了我的问题。非常感谢你!!!一年后,问题仍然存在...... :-(
  • 这对我有用,但它似乎消灭了 nuget 管理。我认为我需要从引用中删除我拥有的 nuget 包并再次添加它们
【解决方案2】:

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

是的。

这就是publishing the application 所做的——它准备应用程序进行部署。当您发布时,它将在输出中包含应用程序运行所需的所有依赖项。

使用发布工具部署到本地文件夹。可用的确切选项取决于您的应用类型。在解决方案资源管理器中,右键单击您的项目并选择发布,然后选择文件夹。如需更多信息,请参阅Deploy to a local folder

教程:Publish your Hello World application with Visual Studio 2017

另见:.NET Core application deployment

【讨论】:

  • 针对上面阐明的示例测试了这种方法。它没有按预期工作。另外这个不适合调试
猜你喜欢
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 2011-02-21
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多