【发布时间】:2017-08-27 11:58:05
【问题描述】:
我正在尝试在 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:
项目
要打包的项目。它是 csproj 文件或目录的路径。如果省略,则默认为当前目录。
那么为什么如果我指定 csproj 的路径,它会查找 project.json 文件?
我能够通过指定以下内容来解决程序集名称的这个问题:
"buildOptions": { "outputName": "MyProject" },
但是 pack 命令完全忽略了这一点。在packOptions 部分中似乎也没有指定 NuGet 包名称的选项。
我查看了this old question,但看起来他们在谈论 nuget 工具,而不是 dotnet 工具。
我唯一的选择是重命名文件夹(现在可能会导致很多其他内容损坏),还是有另一种方法可以为 dotnet pack 命令指定 NuGet 包名称?
顺便说一句,我在几个地方读到project.json 即将消失,我们将回到.csproj,但尚不清楚何时生效。我应该以消除project.json 文件为目标还是为时过早?
【问题讨论】:
-
@mklement0 - 谢谢。但正如 LexLi 已经指出的那样,该功能仍未完全发挥作用。我宁愿不将一个部分工作的解决方案换成另一个 - 特别是如果这意味着放弃适用于 .NET Standard 和 .NET Framework 的单个
dotnet pack命令并返回到 .nuspec 文件和每个项目的 2 个不同的构建命令(对于 2 个不同的 .csproj 文件)用于过渡。
标签: .net nuget .net-core dotnet-cli