3

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

  1. Acme.Web应用程序
  2. Acme.Domain
  3. Acme.SDK

使用存储其实体类WebApplication的项目以及其他一些“核心”对象和接口。Domain

SDK项目是我们提供给第 3 方用户的东西。WebApplication它对我们的项目进行 API 调用。该SDK项目还利用了该Acme.Domain项目。

现在问题来了。

我们为我们的Acme.SDK. 但是因为Acme.SDK也用到了Acme.Domain项目,所以我们也需要把它打包成一个NuGet包。

我想要的只是一个 NuGet 包,并且仍然能够引用来自Acme.SDKAcme.Domain来自那个 NuGet 包的类,而不是两个松散的 NuGet 包。

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

4

1 回答 1

4

是的。如您所知,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

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

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

于 2015-05-21T15:24:57.843 回答