两个csproj的DLL文件,一个NuGet包。如何实现?

3

我正在使用Visual Studio进行一个项目,该项目分为三个不同的部分:

  1. Acme.Webapplication
  2. Acme.Domain
  3. Acme.SDK

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

SDK项目是我们提供给第三方用户的东西。它调用我们的WebApplication项目中的API。 SDK项目还使用Acme.Domain项目。

现在问题来了。

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

我希望只有一个NuGet包,并仍然能够从该NuGet包中引用Acme.SDKAcme.Domain类,而不是两个松散的NuGet包。

这可能吗?如果可以,我该如何做?

1个回答

5

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接