我正在尝试在 VS2022 中自动化流程 Build -> Pack -> Add for nuget package。我已经创建了 SDK 类型项目并使用默认设置来创建 nuget 包。在 Release 模式下执行 Pack Command 后,我在 /bin/Release/ 文件夹中有以下输出:
net8.0/ contains library files
my-package.nupkg
到目前为止一切顺利。现在我想在 Pack 命令完成后自动执行 nuget add 命令,并将 nuget 包发布到我的本地存储库。当我在 csproj 文件所在的文件夹中启动 power shell 时,并执行以下命令:
nuget add bin/Release/my-package.0.0.1.nupkg -Source 'c:\Users\MyUser\OneDrive\nuget\packages\'
命令成功完成,我可以查看并使用其他解决方案中的包。
但是,如果我尝试自动化此操作,则不起作用。在 csproj 文件中:
<Target Name="AddPackage" AfterTargets="Pack" Condition=" '$(Configuration)' == 'Release'">
<Message Text="Adding nuget file to local repository..." Importance="high" />
<Exec Command="nuget add bin/Release/$(PackageId).$(PackageVersion).nupkg -Source 'c:\Users\MyUser\OneDrive\nuget\packages\'" />
</Target>
输出窗口显示错误:
1>Adding nuget file to local repository...
1>The given path's format is not supported.
error MSB3073: The command "nuget add bin/Release/my-package.0.0.1.nupkg -Source 'c:\Users\MyUser\OneDrive\nuget\packages\'" exited with code 1.
我也尝试过没有相对路径:
Command="nuget add $(PackageId).$(PackageVersion).nupkg -Source ....
Command="nuget add my-package.0.0.1.nupkg -Source ....
并手动复制csproj文件夹中的nupkg文件,并且出现同样的错误。
任何人都知道为什么它是从命令行而不是从 VS 运行的,以及如何从 VS 构建/打包过程自动执行此任务?
我能够重现您的问题:
我认为你需要这样的东西:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageId>ClassLibrary1</PackageId>
<PackageVersion>1.0.0</PackageVersion>
</PropertyGroup>
<Target Name="AddPackage" AfterTargets="Pack" Condition=" '$(Configuration)' == 'Release'">
<Message Text="Adding nuget file to local repository..." Importance="high" />
<!--<Exec Command="nuget add bin/Release/$(PackageId).$(PackageVersion).nupkg -Source 'c:\Users\MyUser\OneDrive\nuget\packages\'" />-->
<Exec Command="nuget add "$(ProjectDir)bin\Release\$(PackageId).$(PackageVersion).nupkg" -Source "C:\Path\To\Your\NuGet\Package\Source"" />
</Target>
</Project>
你可以看到我这边成功了:
关键是文件是XML格式。