我试图通过jenkins创建一个nuget包。
它是一个参数化的构建,它使用以下命令构建程序包:
"C:\Program Files (x86)\MSBuild\nuget.exe" pack "C:\Program Files (x86)\Jenkins\workspace\Common.Extensions\Common.Extensions.csproj" -Properties Configuration=Release -Version 1.2.3 -IncludeReferencedProjects
不幸的是,这会导致"无效的参数"错误。
我找不到任何参数错误,所以我从头开始一次删除一个选项。我删除了“IncludeReferencedProjects'和'版本'选项,nuget包构建得很好。
这是一个奇怪的部分,然后我一次重新介绍一个选项(不是通过重新输入它们,只需返回我的命令历史记录并重新运行以前失败的命令)并且nuget包构建正常
我在我的智慧结束。第一次收到命令时命令如何失败,以后才能使用相同的命令成功?
我正在使用nuget 3.4.4
修改
实际上我对事件的顺序错了。如果我删除最后两个选项,它就会开始工作。如果我然后重新键入版本参数,它的工作原理。如果我在历史记录中向上导航并运行完全相同的命令(我使用notepad ++比较工具来确保我运行相同的命令)从命令历史记录中运行它并不起作用。这两个命令是完全相同的!如何工作而另一个不工作?
修改2
我在下面添加了一个屏幕截图,因为这太奇怪了我觉得我一定会错过一些明显的东西:
第一个命令是手动输入。你可以看到它的工作原理。第二个命令是从“控制台输出”中的剪贴板中获取的。来自詹金斯,它失败了。
答案 0 :(得分:1)
好的,所以对于未来开发人员的理智而言,结果是问题:字符编码!
我能想到的唯一可以解释的是,某些角色必须看起来像一个有效的角色给我,但实际上并不是ascii。
所以我找到了一个名为TextFX的notepad ++插件,它有一种将文本转换为Hex-16的方法。因此,我接受了无效的命令,将其粘贴到一个新文件中,然后粘贴了有效的手动版本,并将其转换为Hex-16。
原来,连字符' - '字符不是标准的ascii连字符。我从网上某处使用unicode编码复制了选项,他们选择了一些奇怪的连字符,而不是使用常规连字符。
重新输入连字符作为标准的连字符后,我的jenkins构建返回到功能状态。