NuGet:不要包括参考包

时间:2014-09-05 13:48:40

标签: c# visual-studio nuget

摘要

当我使用NuGet打包一个库并在另一个项目中引用它时,引用项目会将附加文件拉入构建目录。

工作案例


Project: ReferenceLibrary
  Output: ReferenceLibrary.dll

Project: DerivedLibrary
  Output: DerivedLibrary.dll
  References: ReferenceLibrary (Copy Local = False)

Project: ConsoleApplication
  Output: ConsoleApplication.exe
  References: DerivedLibrary

编辑:未复制参考库,因为它在运行时已解析。根据目标,有几个版本。导出项目中的参考。是的,我可以对它进行编码。

如果我构建它,那么只有DerivedLibrary.dll被复制到ConsoleApplication构建文件夹(即bin / Release)。

非工作案例

Project: ConsoleApplication
  Output: ConsoleApplication.exe
  Package: DerivedLibrary.nupkg (depends on ReferenceLibrary.nupkg)

项目引用已添加到DerivedLibray.dll。 DerivedLibrary.dll和ReferenceLibrary.dll都从其包中复制。

我可以看到它被复制到MSBUILD日志中。

_CopyFilesMarkedCopyLocal:
    Copying file from "c:\...\ReferenceLibrary.dll" to "bin\Debug\ReferenceLibrary.dll"

即使它在任何地方都没有在.csproj中引用。

我无法分辨这是否是一个NuGet问题(由于它是如何解包的)或Visual Studio项目(它如何复制引用的程序集并对其他程序集中的需求进行编码)。

1 个答案:

答案 0 :(得分:2)

我找到的一个可能的解决方案是使用帖子构建目标来删除有问题的引用。

在派生库中添加DerivedLibrary.targets文件。

<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="RemoveUnwantedReferences" AfterTargets="Build">
      <Message Text="Removing unwanted references"/>
      <Delete Files="$(OutputPath)ReferenceLibrary.dll"/>
    </Target>
</Project>

然后在.nuspec中加入

<package>
  ...
  <files>
    <file src="Targets/DerivedLibrary.targets" target="/build/DerivedLibrary.targets" />
  </files>
</package>

然后当有人安装包时,将添加post build钩子。当他们构建复制的文件时,将自动删除。