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

时间:2018-03-07 08:40:18

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

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

实施例

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

项目B(控制台应用程序)引用项目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应用程序时,它会编译并启动。在运行时,当它调用使用MongoDB.Driver的MongoWrapper中的方法时,应用程序崩溃,因为MongoDB.Driver依赖项未复制到ConsoleUser的输出文件夹中。

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

  

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

是的。

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

  

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

     

enter image description here

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

另见:.NET Core application deployment

答案 1 :(得分:1)

使用.Net标准库和.Net Framework应用程序引入了这个问题。

TLDR

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

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

保存文件,在Visual Studio中重新打开解决方案并执行Clean&amp; amp;构建

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

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

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

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

可以在选项 - &gt;中设置新项目的默认行为。 NuGet - &gt;一般 - &gt;包裹管理