'svn'未被识别为内部或外部命令 - Visual Studio输出

时间:2013-12-16 22:15:17

标签: svn msbuild visual-studio-2013

我正在跑步:
Windows 8 x64
Visual Studio 2013
Slik Subversion

在我的csproj文件中,我有以下内容从构建

之前的SVN存储库中提取

<Target Name="BeforeBuild">
<Exec ContinueOnError="true" Command="svn co --trust-server-cert --non-interactive --username MY_USERNAME --password MY_PASSWORD https://MY_SVN_REPOSITORY $(MSBuildProjectDirectory)\SUB_DIRECTORY" />
</Target>

在输出窗口中,我得到:

'svn' is not recognized as an internal or external command, operable program or batch file.

为什么我可以从命令提示符成功运行此命令,但不是Visual Studio?

svn co --trust-server-cert --non-interactive --username MY_USERNAME --password MY_PASSWORD https://MY_SVN_REPOSITORY $(MSBuildProjectDirectory)\SUB_DIRECTORY

2 个答案:

答案 0 :(得分:2)

尝试使用“cmd / c”命名前缀,包括svn的完整路径,或确保svn的位置出现在%path%环境变量的某处。

如果这是一个常见位置,请将其硬编码到exec任务中引用的属性中:

<Target Name="BeforeBuild">
<PropertyGroup>
    <SvnDir>c:\programfiles\svn\</SvnDir>
</PropertyGroup>
<Exec ContinueOnError="true" Command="$(SvnDir)svn co --trust-server-cert --non-interactive --username MY_USERNAME --password MY_PASSWORD https://MY_SVN_REPOSITORY $(MSBuildProjectDirectory)\SUB_DIRECTORY" />
</Target>

编辑:编辑以显示您可以配置该文件夹,但是granadacoder有一个很好的解决方案,可以轻松集成到构建解决方案中。

答案 1 :(得分:1)

在dos命令窗口中输入“set”。

并查看“路径”。

您可能会看到“svn.exe”所在的文件夹。

你的msbuild可能看不到它。

但还有更好的方法。

获取并安装MSBuild社区任务.........并且他们有一个svn任务。 它比编写EXEC命令更容易。

很多自定义的Msbuild任务就是这样。它们只是包装命令行调用,但是为您提供可设置的属性,而不是连接exec命令。

https://github.com/loresoft/msbuildtasks/tree/master/Source/MSBuild.Community.Tasks/Subversion

一个例子

 <SvnExport RepositoryPath="file:///d:/svn/repo/Test/trunk"
 LocalPath="$(MSBuildProjectDirectory)\Test\Export">
 <Output TaskParameter="Revision" PropertyName="Revision" />
 </SvnExport>

或者,如果msbuild扩展包更多,你就是一杯茶。

http://www.msbuildextensionpack.com/help/4.0.5.0/html/bccddf04-f5ee-21d4-0f64-bb1b42b08257.htm

    <!-- Export -->
    <MSBuild.ExtensionPack.Subversion.Svn TaskAction="Export" Item="c:\path\workingcopy" Destination="c:\path\exported"/>

我同时使用两者。而且,使用这些非常有用的附加任务,您将“多次获得金钱”。 Aka,值得为安装和运行而进行的小型安装。