Ⅰ nuget 命令上傳的時候報錯method not allowed 405
產生這個錯誤是由於IIS安裝了WebDAV模塊
刪除WebDAV Mole與WebDAV Hanlder,上傳時會返回404錯誤,通過瀏覽器訪問路徑nuget/Packages也是404錯誤。
查看IIS日誌發現nuget push實際執行的是HTTP PUT操作 —— PUT /api/v2/package/,WebDAV不允許這個操作。
根據網上的說法,必須要卸載WebDAV,可是這台伺服器上有一個站點需要它,後來將NuGet Server安裝到另外一台伺服器解決了這個問題。
Ⅱ 如何把.net core 打包到nuget
以往做nuget包一般要麼用命令行,要麼用nuget的圖形化界面去做,但是一些操作比較麻煩.比如引入命名空間,引入第三方nuget包。這些在.NET Core項目里卻很簡單,只需要使用命令行dotnet pack,在.NET Core系列 : 1、.NET Core 環境搭建和命令行CLI入門做了簡要介紹,下面來詳細介紹下這個命令。dotnet-pack- 將代碼打包成 NuGet 包
一.概要
dotnet pack [--output] [--no-build] [--build-base-path] [--configuration] [--version-suffix] [<project>]
二.描述
dotnet pack命令生成項目並創建 NuGet 包。這個操作的結果是兩個nupkg擴展名的包。一個包含代碼,另一個包含調試符號。
該項目被依賴的 NuGet 包裝被添加到 nuspec 文件,因此,能夠在安裝包時得到解決。
默認情況下,項目到項目之間的引用是不打包到項目中的。如果想那樣做,需要在依賴中引用需要項目的type節點設置為 「build」 ,設置就像下面的例子:
裡面僅有一個 lib 文件 netstandard1.6 目標配置文件。這意味著, NuGet 包只適用於.Net Core 應用程序 針對 NetStandard1.6 (和即將到來的 4.6.3)。
Ⅲ $home/dotnet命令是啥意思
命令
dotnet-build ——生成 .NET Core 應用程序。
dotnet-clean ——清理生成輸出。
dotnet-migrate ——將有效的預覽版 2項目遷移到.NET Core SDK1.0項目。
dotnet-msbuild ——提供MSBuild命令行的訪問許可權。
dotnet-new ——為給定的模板初始化C#或F#項目。
dotnet-pack ——創建代碼的NuGet包。
dotnet-publish ——發布.NET 依賴於框架或獨立應用程序
dotnet-restore ——還原給定應用程序的依賴項。
dotnet-run ——從源運行應用程序。
dotnet-sln ——用於添加,刪除和列出解決方案文件中項目的選項。
dotnet-test ——使用測試運行車呢更新運行測試。
項目引用
命令
dotnet-add 引用 ——添加項目引用。
dotnet-list 引用 ——列出項目引用
dotnet-remove 引用 ——刪除項目引用
NuGet 包
命令
dotnet-add 包 ——添加NuGet 包。
dotnet-remove 包 ——刪除NuGet包。
NuGet命令
命令
dotnet-nuget delete ——從伺服器刪除或者取消列出包
dotnet-nuget locals ——清除或列出本地NuGet資源,例如http請求緩存,臨時緩存或計算機范圍的全局包文件夾。
dotnet-nuget push ——將包推送到伺服器,並將其發布。
示例
初始化.NET Core控制台應用程序:
dotnet new console
還原給定應用程序的依賴項:
dotnet restore
生成給定目錄中的項目及其依賴項:
dotnet build
運行名為myproject.dll的依賴於框架的應用:
dotnet myproject.dll
Ⅳ 如何用jenkins自動生成nuget包
關於NuGet的介紹已經很多,可以參考下面的:
NuGet學習筆記(1)——初識NuGet及快速安裝使用 http://kb.cnblogs.com/page/143190/
NuGet學習筆記(2)——使用圖形化界面打包自己的類庫 http://kb.cnblogs.com/page/143191/
NuGet學習筆記(3)——搭建屬於自己的NuGet伺服器 http://kb.cnblogs.com/page/143192/
上面的文章介紹了搭建Web版本的NuGet伺服器以及用圖形化的方式生成NuGet包。
用NuGet.Server管好自家的包包 http://www.cnblogs.com//archive/2012/06/05/nuget_server_push.html
上面的文章介紹了搭建Web版本的NuGet伺服器,以及自動化生成NuGet包的方法
本文介紹簡單的NuGet伺服器,以及VS2013自動化生成NuGet包的內容。
一、VS自動生成NuGet包
1、在VS中創建類庫項目
2、啟用NuGet程序包還原(Enable
NuGet Package Restore)
在解決方案上右擊,選擇「啟用NuGet程序包還原」
確定後會在解決方案中增加一個「.nuget"文件夾,該文件夾有三個文件。
此時,打開項目文件ClassLibrary1.csproj,可以看到類似下面的內容,注意:下面綠色背景行的內容是否出現在ClassLibrary1.csproj中
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists(『$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props『)" />
<PropertyGroup>
<Configuration Condition=" 『$(Configuration)『 == 『『 ">Debug</Configuration>
<Platform Condition=" 『$(Platform)『 == 『『 ">AnyCPU</Platform>
<ProjectGuid>{92A6F604-9829-49FB-8B06-FF2E4C757EC4}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ClassLibrary1</RootNamespace>
<AssemblyName>ClassLibrary1</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SolutionDir Condition="$(SolutionDir) == 『『 Or $(SolutionDir) == 『*Undefined*『">..\</SolutionDir>
<RestorePackages>true</RestorePackages>
</PropertyGroup>
<PropertyGroup Condition=" 『$(Configuration)|$(Platform)『 == 『Debug|AnyCPU『 ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" 『$(Configuration)|$(Platform)『 == 『Release|AnyCPU『 ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Class1.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists(『$(SolutionDir)\.nuget\NuGet.targets『)" />
<Target Name="" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists(『$(SolutionDir)\.nuget\NuGet.targets『)" Text="$([System.String]::Format(『$(ErrorText)『, 『$(SolutionDir)\.nuget\NuGet.targets『))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
如果沒有出現帶加號行的內容,需要手動添加上。
第2塊綠背景內的代碼創建了對.nuget文件夾下的NuGet.targets文件的引用,並添加了缺少NuGet.targets文件的錯誤信息。
第1塊綠背景內的第1行代碼創建了SolutionDir 並設置默認值為項目的父目錄,NuGet.targets利用這個配置值來找到他需要的NuGet.exe等資源。
第二行代碼,RestorePackages被設置為True。
3、設置BuildPackages
2中啟用了NuGet還原,但是還需要設置讓NuGet自動生成nupkg包文件,用記事本打開.csproj文件添加下面1行語句
<BuildPackage>true</BuildPackage>
到1下一行的話,Debug和Release編譯均生成包
到2下一行的話,只用Debug編譯才生成包
到3下一行的話,只用Release編譯才生成包
4、編譯
編譯後就可以再bin文件夾下看到.nupkg文件了
Ⅳ 如何使用nuget添加第三方組件
使用NuGet發布自己的類庫包(Library Package)
NuGet是一個為大家所熟知的Visual Studio擴展,通過這個擴展,開發人員可以非常方便地在Visual Studio中安裝或更新項目中所需要的第三方組件,同時也可以通過NuGet來安裝一些Visual Studio的插件等。作為一名開發人員,您可能也會開發一些公共組件以供他人使用,本文將一步步介紹如何以最簡單的方式將自己所開發的類庫包發布到nuget上,以供更多的人使用。
背景
如果你還是不知道什麼是NuGet,那麼就看這樣一個案例:我現在需要在我的項目中引用Castle.Core程序集,按照以往的做法,就是從Castle Projects官方網站,下載一個最新版本的dll,然後把它復制到項目的lib目錄下(或者隨便什麼地方都行),這樣做不僅繁瑣,而且你需要時刻關心官網上這個程序集的最新版本信息(當然或許你也不會去關注),更煩的是,如果你是一個開源項目的Contributor,你還需要花一定的時間去管理所有的這些libs,不僅如此,如果你是使用的源代碼管理系統來管理項目源碼,比如使用git等,那你還不得不把這些libs上傳到源代碼管理系統中,否則團隊中的其他組員即使獲得了源代碼,也無法正確編譯。但這樣做又大大增加了源代碼的存儲空間,使得代碼克隆和下載都變得非常耗時。
現在,就可以直接使用NuGet來解決所有問題,我們先創建一個Class Library,命名為DaxnetNugetTest,然後在這個項目上點右鍵,選擇Manage NuGet Packages:
在彈出的對話框中,搜索Castle關鍵字,然後在搜索結果列表中選擇Castle.Core,單擊Install按鈕:
安裝完成後,Castle.Core的程序集就被引用到項目中了,同時在項目中多出了一個packages.config文件,以向NuGet表明,當前項目使用了哪些Package,版本是什麼,以及是基於哪個版本的.NET Framework。
今後,如果Castle.Core程序集有版本更新,則同樣可以使用Manage NuGet Packages菜單打開上面的對話框,然後在左邊的Updates列表中,就會列出發生了版本更新的Package,如果有,則單擊Update按鈕即可更新。
更有趣的是,如果你在解決方案上點右鍵,選擇Enable NuGet Package Restore菜單,那麼在你編譯項目的時候,NuGet會自動分析出你項目所依賴的第三方組件,然後在編譯開始之前會自動上網下載所需的版本,因此,你也就不要去維護這些libs了,更沒必要把這些libs也上傳到源代碼管理系統中。
不過這些也都不是本文的重點,本文的重點是,介紹如何將自己的Class Library發布到NuGet上。
發布自己的類庫包(Library Package)
STEP 1:在NuGet上注冊並獲取API Key
首先,你需要到NuGet上注冊一個新的賬號,然後在My Account頁面,獲取一個API Key,這個過程很簡單,我就不作說明了。
STEP 2:下載NuGet.exe
NuGet有個命令行工具:NuGet.exe,非常好用,不過使用之前需要下載,下載地址:http://nuget.codeplex.com/downloads/get/669083。為了方便使用,請設置機器的PATH環境變數,將NuGet.exe的路徑添加到PATH中。
STEP 3:設置API Key
使用以下命令設置NuGet API Key:
1
nuget setApiKey <my_api_key>
記得將上面的my_api_key替換為STEP 1中獲得的API Key。
STEP 4:開發自己的類庫(Class Library)
上面我們新建了一個類庫:DaxnetNugetTest,並通過NuGet添加了對Castle.Core的引用,現在我們添加一些代碼,來使用Castle.Core所提供的一些功能。我們將Class1.cs改名為CastleHelper.cs,此時也會將Class1類改名為CastleHelper。在CastleHelper.cs中寫入以下代碼:
1
2
3
4
5
6
7
public class CastleHelper
{
public static Castle.Core.Pair<int, int> GetIntPair()
{
return new Castle.Core.Pair<int, int>(20, 30);
}
}
然後,打開AssemblyInfo.cs文件,將assembly的屬性設置好,記得再設置一下AssemblyVersion特性,以指定我們類庫的版本。目前我們使用1.0.0.0版本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[assembly: AssemblyTitle("DaxnetNugetTest")]
[assembly: AssemblyDescription("Daxnet's test of the NuGet.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("daxnet")]
[assembly: AssemblyProct("DaxnetNugetTest")]
[assembly: AssemblyCopyright("Copyright © daxnet 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("20662b9f-91de-4515-9c8c-ced3d61589e1")]
[assembly: AssemblyVersion("1.0.0.0")]
全部設置好以後,編譯整個項目待用。
STEP 5:產生並修改nuspec
nuspec是NuGet將項目打包成nupkg的輸入文件,可以通過nuget spec命令產生。在命令提示符下,進入DaxnetNugetTest.csproj文件所在目錄,然後執行:
1
nuget spec
此時會提示創建成功:
用notepad打開DaxnetNugetTest.nuspec文件,把需要替換的信息替換掉,不需要的tag全部刪掉,注意裡面的$xxx$宏,這些就是引用了AssemblyInfo.cs中的設置值,在編譯產生package的時候,會使用AssemblyInfo.cs中的相應值進行替換。完成編輯後,我們的nuspec文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>
<projectUrl>http://apworks.org</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>First release</releaseNotes>
<right>Copyright 2013</right>
</metadata>
</package>
注意兩點:1、$description$使用AssemblyDescriptionAttribute的值進行替換,在產生package之前,一定要記得先編譯項目,否則會提示$description$找不到的錯誤;2、releaseNotes如果沒有,就直接刪掉這個節點,如果有,則填入自己的內容,不要使用默認內容,否則會在下一步產生警告信息。
STEP 6:產生類庫包(Library Package)
同樣在DaxnetNugetTest.csproj路徑下,使用下面的命令產生NuGet類庫包:
1
nuget pack DaxnetNugetTest.csproj
成功後,提示:
注意:由於我們的項目通過NuGet引用了Castle.Core,因此,它將會作為一個依賴組件(dependency)打包到產生的nupkg文件中。
另外,NuGet會使用默認的項目配置所產生的程序集進行打包。如果項目默認是Debug,而你需要用Release打包,則使用下面的命令:
1
nuget pack DaxnetNugetTest.csproj -Prop Configuration=Release
STEP 7:發布類庫包
現在,通過以下命令發布類庫包:
1
nuget push DaxnetNugetTest.1.0.0.0.nupkg
完成以後,出現以下提示:
STEP 8:測試已發布的類庫包
新建一個控制台應用程序,在項目上點右鍵,選擇Manage NuGet Packages,在搜索框中輸入DaxnetNugetTest,此時我們發布的Package已經可以顯示了:
單擊Install按鈕,NuGet會自動分析組件依賴關系,然後把所需要的所有程序集都下載下來並添加到項目引用中:
寫一點代碼來測試:
1
2
3
4
5
6
7
8
9
class Program
{
static void Main(string[] args)
{
var pair = DaxnetNugetTest.CastleHelper.GetIntPair();
Console.WriteLine(pair.First);
Console.WriteLine(pair.Second);
}
}
輸出如下:
STEP 9:更新類庫包
隨著類庫開發進度不斷向前,必然會有版本更新。更新類庫包很簡單,只需要在AssemblyInfo.cs中更新一下版本號,然後重新執行上面的STEP 6、7即可。注意在執行STEP 7的時候,nupkg的文件名應該使用新版本的文件名。
現在,我們重新打開DaxnetNugetTest項目,將CastleHelper類中的20,30改為40,50,然後打開AssemblyInfo.cs,版本號升級為2.0.0.0,重新編譯項目,並重新產生、發布nupkg:
再打開用來測試的控制台程序,同樣打開Manage NuGet Packages對話框,我們可以在Updates中看到,DaxnetNugetTest有了更新:
點擊Update按鈕,將類庫更新到最新版本。重新運行這個控制台程序,我們發現,輸出已經是最新版本的值了:
STEP 10:刪除已發布的包
原則上,NuGet不允許用戶刪除已發布的包,而只能將其設置為不顯示在Manage NuGet Packages的列表中。打開www.nuget.org,用已注冊的賬戶登錄後,可以在My Account頁面選擇Manage My Packages鏈接進入管理頁面:
進入後,可以看到我們已發布的Packages:
點擊DaxnetNugetTest左邊的小垃圾桶圖標,即可進入Listing頁面,頁面中我們也能看到「Permanently deleting packages is not supported」的提示。要將Package從Package List中移除,只需要去掉List DaxnetNugetTest 2.0.0.0 in search results選項前面的鉤鉤,然後單擊Save按鈕保存即可:
總結
本文簡要介紹了NuGet的使用,並介紹了一種將自己開發的類庫以NuGet Package的方式發布到NuGet伺服器的簡單方法。NuGet功能非常強大,有興趣的朋友可以上www.nuget.org進行學習研究。