2011-06-30 37 views
73

有沒有辦法使用在發佈模式下編譯的代碼創建NuGet包?還是有一些原因,我應該只發布(在本地提供)在調試模式下編譯的軟件包?包裝在發佈模式編譯的NuGet項目?

每次我從我的項目目錄中調用nuget pack時,我的nuspec文件位於下面,代碼中我只編譯了發佈模式,它抱怨在調試文件夾("\bin\Debug\SomeProject.dll")中找不到DLL。如果我在調試模式下編譯它,那些文件就在那裏,它會將它們打包起來。

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
    <metadata> 
     <id>$id$</id> 
     <version>$version$</version> 
     <authors>$author$</authors> 
     <owners>$author$</owners> 
     <iconUrl>http://somewhere/project.png</iconUrl> 
     <requireLicenseAcceptance>false</requireLicenseAcceptance> 
     <description>$description$</description> 
    </metadata> 
</package> 

回答

131

可以解決這個問題是這樣的:NuGet.exe pack Foo.csproj -Prop Configuration=Releasethe reference)。

+7

對於任何想從鏈接中閱讀短篇小說的人來說(雖然閱讀良好),從v1.3到v1.4的變化從默認的Release發佈到默認的項目設置只能在項目文件中直接修改(無VS GUI選項)。爲避免所有將來的'nuget pack'調用命令行屬性調整,請在您最喜愛的文本編輯器中編輯項目文件XML。 – patridge

+2

有沒有辦法在一個軟件包中打包Release和Debug版本,然後讓我的項目自動使用Debug一個版本與一個Release版本,具體取決於我是否在Debug和Release Solution配置中? –

+0

@JD:據我所知這是不可能的,但我正在考慮爲nuget做出貢獻。你能解釋一下在哪種情況下你需要這個功能嗎?它何時會有幫助? – Giorgi

14

如果您使用的是生成後事件,你想是否使用調試創建一個包或釋放結構,你可以設置生成後事件命令行,像這樣:

"<path to nuget tools>\NuGet.exe" pack "$(ProjectPath)" -Prop Configuration=$(ConfigurationName) 
1

要具有的NuGet自動使用發佈當您運行nuget pack模式,請執行以下操作:

  1. 在文本編輯器中打開.csproj文件。
  2. 查找以下行:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    
  3. 在該行,以Release更換Debug
  4. 保存更改。