构建 csproj 时包含 NuGet 实用程序包

Include NuGet Utility Package when building csproj

我需要为我的项目使用包含实用程序的 NuGet 包。它包含几个二进制文件(EXE 和 DLL)。

我已成功将它添加到我的项目中,但我怀疑 nupkg 的格式不正确,因为如果不手动指向本地 NuGet 缓存中的包,我无法在我的项目中使用它的任何 DLL 或 EXE。编译时,none 的资源被添加到输出中(我假设这是因为我的代码中没有引用任何内容)。

我想创建一个包装器项目来调用二进制文件,但我也希望其他项目开发人员能够在不调整目录变量的情况下编译解决方案。理想情况下,我可以将 csproj 配置为直接从本地包缓存中提取位。我认为这可以通过在 Visual Studio 中将 Generate Path Property 值设置为 Yes 来实现,但是当我尝试在 csproj 文件中使用 <Include/> 语句时找不到该变量.

我问的可能吗?即,在我的 csproj 中引用 NuGet 包位以确保在编译输出中删除二进制文件?我可以使用路径 属性 执行此操作,还是可以在不直接将包的二进制文件提交到我的项目的情况下执行其他操作?

(我意识到我需要与开发人员一起解决他们的软件包存在的任何问题,但目前我没有直接影响,所以这是我目前能做的最好的事情)。

我明白了,主要是因为误解了一些不同的标签和属性的用途。

为了达到预期效果,我做了以下操作:

  <ItemGroup>
    <Content Include="$(Pkg{PackageId})\**">
      <Link>{NameOfSolutionDirectory}\%(RecursiveDir)%(Filename)%(Extension)</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

其中{PackageId}是NuGet包的名称(此步骤需要通过Solution Explorer在包属性中将'Generate Path Property'设置为'Yes'),{NameOfSolutionDirectory}是如果您像我一样担心保持项目井井有条,我想用于包含这些位的解决方案中的文件夹的名称。替换这些值时应排除 {}

如果要将范围限定到包内容中的特定目录,请在 Include 属性中进行。如果您想在该目录中包含 所有 文件,则 ** 是必需的,否则您可以按扩展名或任何您想要的其他模式来确定范围。