当我通过 SharpSvn 以编程方式添加文件时,另一个进程正在使用该文件

The file being use by another process when i add it programatically by SharpSvn

我们正在使用 SharpSvn 以编程方式将 SolidWorks 文件添加到 SVN 乌龟。 在 SolidWorks 中打开文件时,我想通过代码将其添加到 SVN 而无需关闭文件。 我使用了下面的代码

        var SvnResult = new SvnResult();
        var FullPath = SvnHelper.FileCombine(FileName);

        try
        {

            var SvnArg = new SvnAddArgs();
            SvnArg.Force = true;
            SvnArg.Depth = SvnDepth.Infinity;
            //
            SvnClient.Add(FullPath, SvnArg);

            SvnResult.Message = "Success.";
            SvnResult.Status = true;
            //
            return SvnResult;
        }
        catch (SvnException exc)
        {
            SvnResult.Message = exc.Message;
            SvnResult.Status = false;
            return SvnResult;
        }

我得到这样的错误: 该进程无法访问该文件,因为它正被另一个进程使用。

如何在不关闭文件的情况下将其添加到 SVN? 此致,

我们解决了这个问题。起初我们使用 TortoiseSvn.exe 命令行来添加和提交文件,但是当我们使用发送提交命令时,会出现 svn 对话框表单。为了解决这个问题,我从 svn 安装程序中安装了“命令行客户端工具”。通过安装此选项,您可以在 svn 路径“C:\Program Files\TortoiseSVN\bin”下找到 svn.exe。 我将此路径添加到环境变量,然后在文件打开时使用 svn 命令行添加和提交。

public SvnResult CommitFiles_BySVNCmd(string filePath)
    {
        var fullPath = SvnHelper.FileCombine(filePath);
        var svnResult = new SvnResult();

        try
        {
            // svn add command
            var status = GetStatus(fullPath);
            //
            if (status.LocalContentStatus == SvnStatus.NotVersioned)
            {

                var argumentsAdd = $@"add {fullPath}";
                ProcessStart(argumentsAdd);
            }


            // svn commit command
            var argumentsCommit = $@"commit -m Commited_Automatically {fullPath}";
            ProcessStart(argumentsCommit);


            svnResult.Message = "Success
            svnResult.Status = true;

            return svnResult;

        }
        catch (SvnException se)
        {

            svnResult.Message = se.Message;
            svnResult.Status = false;

            return svnResult;
        }
    }

private void ProcessStart(string arguments)
{
     var processInfo = new ProcessStartInfo("svn", arguments);
     processInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
     Process.Start(processInfo);
}

此致,