在我的构建输出中包含 Nuget 依赖项?

Posted

技术标签:

【中文标题】在我的构建输出中包含 Nuget 依赖项?【英文标题】:Include Nuget dependencies in my build output? 【发布时间】:2018-01-09 21:09:50 【问题描述】:

我正在构建一个模块化的 .NET 核心应用程序,它可以使用 MEF 在运行时加载扩展。我有 2 个项目,一个是我希望能够在运行时加载的库,然后我有我的主应用程序来进行加载。

我的库项目有一些 Nuget 依赖项。为了在运行时加载我的库,我需要在运行时在库旁边提供这些 Nuget 依赖项,但使用 VS2017 构建时不会将这些 Nuget DLL 作为输出的一部分。

如何在构建库时包含 Nuget DLL?

编辑:我已经尝试过dotnet publishdotnet pack,但是这两个都使我成为一个nupkg 文件,只包含我的DLL,而不是我需要的nuget DLL。此外,我无法在运行时非常轻松地加载 nupkg 文件,这就是为什么我想自己获取生成的程序集。

对于它的价值,这就是我的 csproj 的样子:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <AssemblyName>JSON.plugin</AssemblyName>
    <IncludeBuiltProjectOutputGroup>true</IncludeBuiltProjectOutputGroup>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Composition" Version="1.0.31" />
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\BDDGen.Types\BDDGen.Types.csproj" />
  </ItemGroup>

</Project>

【问题讨论】:

命令行方式是执行dotnet publish,而不是dotnet build。不确定 VS 是否有办法做到这一点(当然,它必须)。 dotnet publish 为我构建了一个 .nupkg 文件,其中只有我的库 DLL,没有别的。 您是否尝试将您的引用嵌入到您的 DLL 中?也许看看Costura.Fody 不,但这可能是一种选择。我只想要我的 DLL 和它旁边依赖的 Nuget DLL。 @omajid 我之前在任何地方都没有得到publish 目录,但似乎在运行dotnet cleandotnet publish 之后,我的所有部门都在publish 文件夹中,就像我一样通缉。谢谢你。 :) 【参考方案1】:

为了使构建过程将所有引用的 dll 文件从缓存文件夹中的 NuGet 包复制到构建输出中,请在 &lt;PropertyGroup&gt; 中设置此属性:

<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>

【讨论】:

这适用于 nuget 包依赖项。如果我有一个包含多个项目的解决方案,并且我还需要在解决方案的主项目中包含其他项目的输出 DLL,该怎么办?即使使用您的建议,我现在仍然缺少的是我从不直接依赖于它们的主项目动态加载的两个项目的 DLL。 如果它不依赖于它们,那么它们将不会被复制到输出中。如果你想要,你需要添加一个项目引用 我不想添加项目引用,因为项目之间没有“直接依赖关系”。无论如何,我找到了另一种可能的方法。我可以在依赖项目上使用构建后事件集。我添加了一点xcopy 脚本,用于在每次构建后将项目的输出DLL 复制到主项目的bin 文件夹中。 正是我在 .Net 2.0 标准项目中所需要的。 @CheshireCat,你能分享你上面提到的代码吗,谢谢

以上是关于在我的构建输出中包含 Nuget 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET Core 应用程序 docker 映像中包含依赖项?

如何在安装和部署项目中包含依赖项?

在安装项目中包含文件依赖项

在打包的 JAR 中包含本地依赖项 [重复]

如何在使用 maven 构建的战争中包含系统依赖项

NPM 仅安装后依赖项