dotnet pack项目参考

Jay*_*Jay 18 c# project-reference nuget-package .net-core

我非常喜欢在几个程序集之间分离功能,例如,外观到数据提供程序,数据提供程序的合同以及数据提供程序实现本身......在我看来,它可以轻松地对单个组件进行单元测试功能和将来很容易换掉一件事(在我的例子中,它使数据提供者易于更换).

如果我创建一个包含3个项目并使用项目引用的解决方案,那么当我在入口程序集上构建dotnet时,所有引用都将复制到输出文件夹中.当我通过dotnet打包条目汇编项目来创建NuGET包时,NuGET包中只包含条目组件(而不是契约或数据提供者)

这似乎是设计上的; .NET Core dotnet-pack 的文档说明了这一点

项目到项目的引用不会打包在项目中.目前,如果您具有项目到项目的依赖关系,则每个项目必须有一个包.

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

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

Iva*_*uba 3

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

<PropertyGroup>
    <NuspecFile>App.nuspec</NuspecFile>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

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

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