两个csproj DLL,一个NuGet包。这该怎么做?

时间:2015-05-21 09:23:36

标签: nuget nuget-package nuspec

我正在开发Visual Studio中的一个项目,该项目分为三个不同的项目:

  1. Acme.Webapplication
  2. Acme.Domain
  3. Acme.SDK
  4. WebApplication使用存储其实体类的Domain项目以及其他一些“核心”对象和接口。

    SDK项目是我们为第三方用户提供的。它对我们的WebApplication项目进行API调用。 SDK项目还使用了Acme.Domain项目。

    现在问题来了。

    我们为Acme.SDK创建一个NuGet包。但由于Acme.SDK也使用Acme.Domain项目,因此我们还需要将其打包为NuGet包。

    我想要的只是一个NuGet包,仍然可以从那个NuGet包中引用来自Acme.SDKAcme.Domain的类,而不是两个松散的NuGet包。

    这可能吗?那么,我该怎么做呢?

1 个答案:

答案 0 :(得分:3)

是。如您所知,NuGet可以直接从.csproj文件创建包。这基本上是"自动"模式。它很简单,但也有局限性。

您还可以创建一个.nuspec文件,该文件允许您明确说明如何构建程序包。这可以包括多个程序集,依赖项,目标不同的框架等。

首先在解决方案的根目录中创建一个名为 nuspec 的文件夹。

nuspec 文件夹中打开命令行。

键入:nuget spec MyPackage< =使用您的包ID

这将创建一个 MyPackage.nuspec 文件。编辑此文件。你会在那里看到一堆样板代码。适当更新值。

  

注意:一旦开始使用显式.nuspec文件,您将不得不维护这些值(如版本号),因为它们将不再从.csproj文件中提取。

您需要添加的主要部分是<files/>部分。还要确保包含项目所需的依赖项。

以下是.nuspec文件示例:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyPackage</id>
    <version>1.0.0</version>
    <authors>Author Names</authors>
    <owners>Owner Names</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>MyPackage description</description>
    <releaseNotes>Initial version.</releaseNotes>
    <copyright>Copyright 2015</copyright>

<!-- add dependencies here  
    <dependencies>
        <dependency id="SomePackage.Id" />
    </dependencies>
-->

  </metadata>
  <files>
    <file src="..\ProjectA\bin\Debug\ProjectA.dll" target="lib\net45" />
    <file src="..\ProjectB\bin\Debug\ProjectB.dll" target="lib\net45" />
  </files>
</package>

请注意文件部分如何引用要包含在包中的实际程序集。

编辑.nuspec文件后,您需要创建包。

在命令行中输入:nuget pack MyPackage.nuspec

然后应该创建一个 MyPackage.1.0.0.nupkg 文件,准备好上传到NuGet.org。

以下是Nuspec格式的文档:http://docs.nuget.org/Create/Nuspec-Reference