dotnet pack 项目参考

dotnet pack project references

我非常喜欢将功能分离到几个程序集中,例如数据提供者的外观、数据提供者的契约和数据提供者实现本身......在我看来,这使得单元测试变得容易一项功能的各个组件,将来很容易换掉一件事(在我的例子中,它使数据提供者很容易换掉)。

如果我创建一个包含 3 个项目的解决方案并使用项目引用,当我在入口程序集上进行 dotnet-build 时,所有引用都被复制到输出文件夹。当我 dotnet pack 入口程序集项目以创建 NuGET 包时,NuGET 包中仅包含入口程序集(不是合同或数据提供者)

这似乎是设计使然; .NET Core dotnet-pack 的 documentation 指出

Project-to-project references aren't packaged inside the project. Currently, you must have a package per project if you have project-to-project dependencies.

我的问题是 - 为什么会这样?如果我想将我的代码分成逻辑程序集,我不得不创建单独的 NuGET 包并引用它们,或者只是将我的所有代码集中到一个程序集中。有什么方法可以在 NuGET 包中包含项目引用吗?

我正在使用 VS2017 / .NET Core v1.1(csproj,不是 xproj)

实现所需的一种可能方法是使用自定义 .nuspec 文件,您可以在其中指定要打包的 dll

<PropertyGroup>
    <NuspecFile>App.nuspec</NuspecFile>
</PropertyGroup>

有了这个,dotnet pack 将生成关于 MyPackage.nuspec 的包。

此外,如果您有 3 个带有合同和实施的项目并且您不想添加 3 个包引用,您可以创建一个仅将这 3 个作为依赖项的元包并引用该单个元包.