是否可以使Visual Studio将引用项目的所有依赖项复制到输出路径中?
在解决方案中,项目A(库,.NET标准)定义了一些函数,并依赖于库L1(通过NuGet)和库L2(本地.dll
,引用并复制到项目中)
项目B(控制台应用程序)引用项目A.
构建B时,输出文件夹包含B和A.dll
的所有直接依赖关系。 L1和L2在输出中不可用。因此,该程序无法正常工作。
如何强制VS将L1和L2复制到B的输出?
到目前为止,我发现的唯一方法是将A打包为NuGet,但这似乎是不必要的开销和不舒服。我想我只是忘记了其他人似乎都知道的事情......
我的解决方案包含两个项目。
调试ConsoleUser
应用程序时,它会编译并启动。在运行时,当它调用使用MongoDB.Driver的MongoWrapper
中的方法时,应用程序崩溃,因为MongoDB.Driver依赖项未复制到ConsoleUser
的输出文件夹中。
如何解决这个问题?
答案 0 :(得分:1)
是否可以使Visual Studio将引用项目的所有依赖项复制到输出路径中?
是的。
这是publishing the application所做的 - 它为应用程序准备部署。发布时,它将包含应用程序在输出中运行所需的所有依赖项。
使用“发布”工具部署到本地文件夹。可用的确切选项取决于您的应用类型。在解决方案资源管理器中,右键单击项目并选择“发布”,然后选择“文件夹”。有关详细信息,请参阅Deploy to a local folder。
教程:Publish your Hello World application with Visual Studio 2017
答案 1 :(得分:1)
使用.Net标准库和.Net Framework应用程序引入了这个问题。
使用文本编辑器打开.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;包裹管理