dotnet pack - 如何指定包的名称?
dotnet pack - How do you specify the name of the package?
我正在尝试将库打包为 powershell 中的 NuGet 包,如下所示:
function Create-NuGetPackages($projects) {
if (!(Test-Path $NuGetPackageDirectory)) {
New-Item $NuGetPackageDirectory -ItemType Directory
}
foreach ($project in $projects) {
pushd $project.DirectoryName
& dotnet.exe pack --configuration $Configuration --output $NuGetPackageDirectory --no-build
popd
}
return $NuGetPackageDirectory
}
该项目正在使用一个 project.json
和一个 .xproj
文件(还有一个 .csproj
文件用于处理 .NET 4.5.1 中的项目)。上面的命令起作用了,但我最终得到了一个 NuGet 包名称 MyProject.Core
,我需要它是 MyProject
以匹配旧包。
该项目是一个端口,最明智的做法是以Java包命名文件夹,即MyProject.Core
,但我似乎无法弄清楚如何制作它会生成一个具有不同名称的 NuGet 包。
我试过在 CLI 上使用这个命令:
dotnet pack "src\MyProject.Core\MyProject.csproj" --output NuGetPackages\ --configuration "Release"
但它给出了错误:
Unable to find a project.json in src\MyProject.Core\MyProject.csproj\project.json
根据this page:
PROJECT
The project to pack. It's either a path to a csproj file or to a directory. If omitted, it defaults to the current directory.
那么,如果我指定 csproj 的路径,为什么它会查找 project.json 文件?
我能够通过指定来解决程序集名称的这个问题:
"buildOptions": { "outputName": "MyProject" },
但是 pack 命令完全忽略了这一点。在 packOptions
部分似乎也没有指定 NuGet 包名称的选项。
我看过 this old question,但他们似乎在谈论 nuget 工具,而不是 dotnet 工具。
我唯一的选择是重命名文件夹(现在可能会导致很多其他东西损坏),还是有另一种方法可以为 dotnet pack
命令指定 NuGet 包名称?
附带一提,我在几个地方读到 project.json
即将消失,我们将回到 .csproj
,但尚不清楚何时生效。我应该以消除 project.json
文件为目标还是为时过早?
元数据在 csproj 中指定,如文档所述,
<PropertyGroup>
<TargetFramework>netstandard1.4</TargetFramework>
<PackageId>AppLogger.YOUR_NAME</PackageId>
<PackageVersion>1.0.0</PackageVersion>
<Authors>YOUR_NAME</Authors>
<Description>Awesome application logging utility</Description>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageReleaseNotes>First release</PackageReleaseNotes>
<Copyright>Copyright 2016 (c) Contoso Corporation. All rights reserved.</Copyright>
<PackageTags>logger logging logs</PackageTags>
</PropertyGroup>
由于 Lex Li 指出该工具仍在进行中,我提出了一个 hackish 解决方案,它不会迫使我不得不再次求助于 .nuspec
文件(以及大量重新排列项目)只是为了让它工作。
# Hack because dotnet pack doesn't provide a way to override the directory
# name for the NuGet package name when using project.json.
# So, we copy MyProject.Core to a new directory
# MyProject to work around this.
function Copy-MyProject() {
Copy-Item -Recurse -Force "$root\src\MyProject.Core" "$ReleaseDirectory\MyProject"
}
function Delete-MyProject-Copy() {
Remove-Item "$ReleaseDirectory\MyProject" -Force -Recurse -ErrorAction SilentlyContinue
}
function Create-NuGetPackages($projects) {
try
{
Copy-MyProject
$projects = $projects += Get-ChildItem -Path "$ReleaseDirectory\MyProject\project.json"
$projects = $projects | ? { !$_.Directory.Name.Equals("MyProject.Core") }
if (!(Test-Path $NuGetPackageDirectory)) {
New-Item $NuGetPackageDirectory -ItemType Directory
}
foreach ($project in $projects) {
pushd $project.DirectoryName
Write-Host "Creating NuGet package for $project..." -ForegroundColor Magenta
& dotnet.exe pack --configuration $Configuration --output $NuGetPackageDirectory --no-build
popd
}
} finally {
Delete-MyProject-Copy
}
return $NuGetPackageDirectory
}
对于仍然有此问题的人
dotnet pack -p:PackageID=my_id
我正在尝试将库打包为 powershell 中的 NuGet 包,如下所示:
function Create-NuGetPackages($projects) {
if (!(Test-Path $NuGetPackageDirectory)) {
New-Item $NuGetPackageDirectory -ItemType Directory
}
foreach ($project in $projects) {
pushd $project.DirectoryName
& dotnet.exe pack --configuration $Configuration --output $NuGetPackageDirectory --no-build
popd
}
return $NuGetPackageDirectory
}
该项目正在使用一个 project.json
和一个 .xproj
文件(还有一个 .csproj
文件用于处理 .NET 4.5.1 中的项目)。上面的命令起作用了,但我最终得到了一个 NuGet 包名称 MyProject.Core
,我需要它是 MyProject
以匹配旧包。
该项目是一个端口,最明智的做法是以Java包命名文件夹,即MyProject.Core
,但我似乎无法弄清楚如何制作它会生成一个具有不同名称的 NuGet 包。
我试过在 CLI 上使用这个命令:
dotnet pack "src\MyProject.Core\MyProject.csproj" --output NuGetPackages\ --configuration "Release"
但它给出了错误:
Unable to find a project.json in src\MyProject.Core\MyProject.csproj\project.json
根据this page:
PROJECT
The project to pack. It's either a path to a csproj file or to a directory. If omitted, it defaults to the current directory.
那么,如果我指定 csproj 的路径,为什么它会查找 project.json 文件?
我能够通过指定来解决程序集名称的这个问题:
"buildOptions": { "outputName": "MyProject" },
但是 pack 命令完全忽略了这一点。在 packOptions
部分似乎也没有指定 NuGet 包名称的选项。
我看过 this old question,但他们似乎在谈论 nuget 工具,而不是 dotnet 工具。
我唯一的选择是重命名文件夹(现在可能会导致很多其他东西损坏),还是有另一种方法可以为 dotnet pack
命令指定 NuGet 包名称?
附带一提,我在几个地方读到 project.json
即将消失,我们将回到 .csproj
,但尚不清楚何时生效。我应该以消除 project.json
文件为目标还是为时过早?
元数据在 csproj 中指定,如文档所述,
<PropertyGroup>
<TargetFramework>netstandard1.4</TargetFramework>
<PackageId>AppLogger.YOUR_NAME</PackageId>
<PackageVersion>1.0.0</PackageVersion>
<Authors>YOUR_NAME</Authors>
<Description>Awesome application logging utility</Description>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageReleaseNotes>First release</PackageReleaseNotes>
<Copyright>Copyright 2016 (c) Contoso Corporation. All rights reserved.</Copyright>
<PackageTags>logger logging logs</PackageTags>
</PropertyGroup>
由于 Lex Li 指出该工具仍在进行中,我提出了一个 hackish 解决方案,它不会迫使我不得不再次求助于 .nuspec
文件(以及大量重新排列项目)只是为了让它工作。
# Hack because dotnet pack doesn't provide a way to override the directory
# name for the NuGet package name when using project.json.
# So, we copy MyProject.Core to a new directory
# MyProject to work around this.
function Copy-MyProject() {
Copy-Item -Recurse -Force "$root\src\MyProject.Core" "$ReleaseDirectory\MyProject"
}
function Delete-MyProject-Copy() {
Remove-Item "$ReleaseDirectory\MyProject" -Force -Recurse -ErrorAction SilentlyContinue
}
function Create-NuGetPackages($projects) {
try
{
Copy-MyProject
$projects = $projects += Get-ChildItem -Path "$ReleaseDirectory\MyProject\project.json"
$projects = $projects | ? { !$_.Directory.Name.Equals("MyProject.Core") }
if (!(Test-Path $NuGetPackageDirectory)) {
New-Item $NuGetPackageDirectory -ItemType Directory
}
foreach ($project in $projects) {
pushd $project.DirectoryName
Write-Host "Creating NuGet package for $project..." -ForegroundColor Magenta
& dotnet.exe pack --configuration $Configuration --output $NuGetPackageDirectory --no-build
popd
}
} finally {
Delete-MyProject-Copy
}
return $NuGetPackageDirectory
}
对于仍然有此问题的人
dotnet pack -p:PackageID=my_id