首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#服务器预提交挂钩,SharpSvn错误

C#服务器预提交挂钩,SharpSvn错误
EN

Stack Overflow用户
提问于 2011-02-22 22:37:37
回答 2查看 1K关注 0票数 1

我有一个C#控制台应用程序,我将其用作SVN Pre Commit Hook。控制台应用程序启动得很好。但是,只要我尝试使用SharpSvn进行写操作,就会收到以下错误:

代码语言:javascript
复制
Commit failed (details follow):
Commit blocked by pre-commit hook (exit code -1066598274) with output:

Unhandled Exception: System.Runtime.InteropServices.SEHException: External 
component has thrown an exception.
at svn_client_cat2(svn_stream_t* , SByte* , svn_opt_revision_t* , 
svn_opt_revision_t* , svn_client_ctx_t* , apr_pool_t* )
at SharpSvn.SvnClient.Write(SvnTarget target, Stream output, SvnWriteArgs args)
   at SharpSvn.SvnClient.Write(SvnTarget target, Stream output)
   at SvnPreCommitHook.Program.Main(String[] args)

我尝试在我自己的机器上执行svn.Write命令,指向svn://svn-server而不是localhost -这样做效果很好。我猜是服务器上的某个东西。TortoiseSVN已安装,尽管我看不到任何上下文菜单...

我的代码如下所示:

代码语言:javascript
复制
private static EventLog _serviceEventLog;

static void Main(string[] args)
{
    _serviceEventLog = new EventLog();

    if (!System.Diagnostics.EventLog.SourceExists("Svn Hooks"))
    {
        System.Diagnostics.EventLog.CreateEventSource("Svn Hooks", "Svn Hooks");
    }

    _serviceEventLog.Source = "Svn Hooks";
    _serviceEventLog.Log = "Svn Hooks";

    SvnHookArguments ha;
    if (!SvnHookArguments.ParseHookArguments(args, SvnHookType.PreCommit, false, out ha))
    {
        /*Console.Error.WriteLine("Invalid arguments");
        Environment.Exit(1);*/
    }

    using (SvnLookClient cl = new SvnLookClient())
    {
        SvnChangeInfoEventArgs ci;
        cl.GetChangeInfo(ha.LookOrigin, out ci);

        if (!ci.LogMessage.Equals("Svn Hook Test"))
        {
            AllowCommit();

            return;
        }

        var checkoutDir = @"C:\SvnTemp\" + DateTime.Now.Ticks.ToString();

        foreach (SvnChangeItem i in ci.ChangedPaths)
        {
            var checkoutFilepath = checkoutDir + "\\" + Path.GetFileName(i.Path);

            if (!Directory.Exists(checkoutDir))
            {
                Directory.CreateDirectory(checkoutDir);
            }

            using (SvnClient svn = new SvnClient())
            {
                using (StreamWriter sw = new StreamWriter(checkoutFilepath))
                {
                    svn.Write(SvnTarget.FromString("svn://localhost/" + i.RepositoryPath), sw.BaseStream);
                }
            }

            var fileContents = File.ReadAllText(checkoutFilepath);

            if (fileContents.Contains("Martin Normark"))
            {
                RemoveTempDirectory(checkoutDir);

                PreventCommit("Name is not allowed!");
            }
        }

        RemoveTempDirectory(checkoutDir);
    }

    AllowCommit();
}
EN

回答 2

Stack Overflow用户

发布于 2011-02-22 22:44:08

可能是以下之一:

服务器上缺少64位

  • vs 32位
  • vcredist
票数 0
EN

Stack Overflow用户

发布于 2019-12-27 23:22:07

也许您应该首先使用HandleProcessCorruptedStateExceptionsAttribute捕获抛出的异常

代码语言:javascript
复制
[HandleProcessCorruptedStateExceptions] 
static void Main() // main entry point
{
    try 
    {

    }
    catch (Exception ex)
    {
        // Handle Exception here ...
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5079480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档