2015-05-21 82 views
0

我工作在Visual Studio中的一個項目,被分成三個不同的項目:兩個csproj DLL,一個NuGet包。這個怎麼做?

  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包而不是兩個寬鬆的NuGet包中引用Acme.SDKAcme.Domain這兩個類。

這可能嗎?那麼,我該怎麼做呢?

回答

2

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