尝试使用curl

时间:2016-02-08 12:18:22

标签: xml curl msbuild pubxml

我试图将一个http请求发布到"新文物"通过使用"发布" Visual Studio中的按钮。

在我的发布配置文件中,我选择" web deploy"然后芬兰我的设置。之后我会进入我的" .pubxml" -file并在底部添加一个目标:

 <Target Name="AfterBuild">
 <Exec Command="curl -H &quot;x-api-key:mykey&quot; 
 -d &quot;deployment[application_id]=appId&quot; 
 -d &quot;deployment[description]=MSbuild deploy using curl&quot; 
 -d &quot;deployment[revision]=0&quot; 
 -d &quot;deployment[changelog]=Deployed using MSBuild&quot; 
 -d &quot;deployment[user]=User&quot; 
 -d http://api.newrelic.com/deployments.xml"/>    
 </Target>
</project>

在visual studio的错误列表中,我得到了这个:

Severity Code Description Project File Line Suppression State Error The command 
"curl 
-H "x-api-key:APPKEY" 
-d "deployment[application_id]=APPID" 
-d "deployment[description]=MSbuild deploy using curl" 
-d "deployment[revision]=1" 
-d "deployment[changelog]=Deployed using MSBuild" 
-d "deployment[user]=User" 
http://api.newrelic.com/deployments.xml" 
exited with code 9009

如果我在curl.exe中运行curl命令,它可以正常工作(帖子成功),但在msbuild期间不行。

正如你在上面看到的那样,所有内容都引用了接受网址的引号,(也试过了)

我已尝试像这样指定卷曲路径

&quot;C:\WINDOWS\system32\curl.exe&quot; 

但是那个工作就好了。

我删除了&#34; ItemGroup&#34;因为我不想要包含web配置(已将buildaction设置为&#34; none&#34;在web配置上)

我可以尝试什么?

更新

<Target Name="AfterBuild"> and <Message Text="Test"/>..

这种方式成功但我看不到文字&#34;测试&#34;在构建输出中。

 <Target Name="AfterBuild">
 <Exec WorkingDirectory="C:\Windows\System32\" Command="curl http://www.google.com"/>

返回错误9009。

证明它在正确的目录中:

enter image description here

1 个答案:

答案 0 :(得分:2)

当尝试重现你的问题时,我尝试了几件事(运行curl,运行64bit curl,在PATH中运行,运行时指定完整路径,从system32 diretory运行可执行文件),但有一件事我没有尝试原则是将curl复制到system32目录:由于各种原因可以在互联网上找到,这几乎不是问题的正确解决方案。是的,今天我们又找到了另一个原因:

MsBuild的Exec任务的工作原理是创建一个临时文件,其中包含要运行的Command,然后启动cmd.exe /q /c <path/to/tempfile>。该任务不仅仅是启动cmd.exe,而是通过在Environment.GetFolderPath(Environment.SpecialFolder.System)前加上指定完整路径。在64位系统上从32位进程(即msbuild)调用时返回C:\windows\SysWOW64或类似内容。

因此,msbuild从C:\windows\SysWOW64\cmd.exe启动32位cmd。作为一个32位进程,file system redirection被调用:如果你告诉32位进程查看c:\ windows \ system32它不会这样做,但查看c:\ windows \ SysWOW64。并且curl.exe不存在,因为你把它放在system32中。所以你得到一个代码9009。

长话短说:成为一名优秀的Windows用户并且不要将curl.exe放在sSystem32或SysWOW64中,然后在使用Exec时指定它的完整路径,或者将它所在的目录添加到PATH。 / p>