【问题标题】:Control VisualSVN Server from C#从 C# 控制 VisualSVN 服务器
【发布时间】:2012-04-18 12:35:46
【问题描述】:

我安装了 VisualSVN 服务器 2.5.4。我可以创建用户和存储库。我的问题是如何从 C# 创建/删除用户/存储库。有图书馆吗?

【问题讨论】:

    标签: c# svn visualsvn-server


    【解决方案1】:

    2015 年 3 月 9 日更新

    不再需要编写自定义 WMI 脚本;从 VisualSVN Server 3.4 开始可用的 PowerShell cmdlet 涵盖了大多数 Subversion 服务器管理和存储库管理用例。在https://www.visualsvn.com/server/features/powershell/阅读有关新功能的信息

    VisualSVN Server 3.4 引入了 PowerShell 模块,为您提供了许多有用的 cmdlet。 cmdlet 可用于本地或远程管理 VisualSVN Server 及其存储库。这是complete reference on VisualSVN Server PowerShell cmdlets

    例如,

    • 您可以通过运行以下 PowerShell 命令创建一个新的存储库 MySuperRepo

      New-SvnReposiory MySuperRepo

    • 您可以在存储库中创建项目结构

      New-SvnRepositoryItem MySuperRepo -Path /branches, /tags, /trunk -Type Folder

    • 您可以为 DOMAIN\Developers Active Directory 组帐户提供对新存储库的读/写访问权限

      Add-SvnAccessRule MyRepo -Path / -AccountName DOMAIN\Developers -Access ReadWrite

    • 您可以计算存储库在磁盘上的大小:

      Measure-SvnRepository MySuperRepo

    • 您可以验证存储库是否损坏:

      Test-SvnRepository MySuperRepo

      还有更多!

    有关详细信息和 cmdlet 的完整列表,请阅读文章 VisualSVN Server PowerShell Cmdlet Reference


    VisualSVN 服务器可以通过 WMI(Windows 管理 Instrumentation) 接口。

    描述 VisualSVN 服务器界面的 MOF 文件位于计算机上的 %VISUALSVN_SERVER%\WMI 中 安装了 VisualSVN 服务器。使用此文件作为参考,您可以 编写一个 C# 脚本来管理 VisualSVN 服务器。

    请查看 MSDN 文章: http://msdn.microsoft.com/en-us/library/bb404655

    我包含以下示例供您参考:

    • 此 C# 代码将创建一个密码为“secret”的 Subversion 用户“user1”。

          ManagementClass userClass = new ManagementClass("root\\VisualSVN", "VisualSVN_User", null);
      
          // Obtain in-parameters for the method
          ManagementBaseObject inParams =
              userClass.GetMethodParameters("Create");
      
          // Add the input parameters.
          inParams["Name"] = "user1";
          inParams["Password"] = "secret";
      
          // Execute the method and obtain the return values.
          ManagementBaseObject outParams =
              userClass.InvokeMethod("Create", inParams, null);
      
    • 此 C# 代码将创建一个新的存储库“Repo1”。

          ManagementClass repoClass = new ManagementClass("root\\VisualSVN", "VisualSVN_Repository", null);
      
          // Obtain in-parameters for the method
          ManagementBaseObject inParams =
              repoClass.GetMethodParameters("Create");
      
          // Add the input parameters.
          inParams["Name"] = "Repo1";
      
          // Execute the method and obtain the return values.
          ManagementBaseObject outParams =
              repoClass.InvokeMethod("Create", inParams, null);
      
    • 此 C# 代码将提供 SID S-1-5-32-545 ('BUILTIN\Users') 对存储库“测试”的读/写访问权限。仅供参考:AccessLevel 值 如 MOF 中所述:“0 - 无访问权限,1 - 只读,2 - 读/写”

      ManagementClass userClass = new ManagementClass("root\\VisualSVN", "VisualSVN_WindowsAccount", null);                            
      ManagementClass authzClass = new ManagementClass("root\\VisualSVN", "VisualSVN_SecurityDescriptor", null);
      ManagementClass permClass = new ManagementClass("root\\VisualSVN", "VisualSVN_PermissionEntry", null);
      
      ManagementObject userObject = userClass.CreateInstance();
      userObject.SetPropertyValue("SID", "S-1-5-32-545");
      
      ManagementObject permObject = permClass.CreateInstance();
      permObject.SetPropertyValue("Account", userObject);
      permObject.SetPropertyValue("AccessLevel", 2);
      
      ManagementObject repo = new ManagementObject("VisualSVN_Repository.Name='Test'");
      
      ManagementBaseObject inParams =
          authzClass.GetMethodParameters("SetSecurity");
      
      inParams["Object"] = repo;
      inParams["Permissions"] = new object[] { permObject };
      
      ManagementBaseObject outParams =
          authzClass.InvokeMethod("SetSecurity", inParams, null);
      

    2013 年 2 月 10 日更新:

    WMI 架构已在 VisualSVN Server 2.6 中更改(并改进!)。简而言之,要在存储库路径上设置访问权限,您需要:

    • 创建VisualSVN_Repository类对象指定存储库名称,
    • 创建VisualSVN_PermissionEntry条目对象,指定帐户用户名和访问权限,
    • VisualSVN_Repository 上调用 SetSecurity 方法,传递有效的存储库路径和 PermissionEntry 对象。

          ManagementClass userClass = new ManagementClass("root\\VisualSVN", "VisualSVN_WindowsAccount", null);
          ManagementClass permClass = new ManagementClass("root\\VisualSVN", "VisualSVN_PermissionEntry", null);
          ManagementClass repoClass = new ManagementClass("root\\VisualSVN", "VisualSVN_Repository", null);
      
          ManagementObject userObject = userClass.CreateInstance();
          userObject.SetPropertyValue("SID", "S-1-5-32-545");
      
          ManagementObject permObject = permClass.CreateInstance();
          permObject.SetPropertyValue("Account", userObject);
          permObject.SetPropertyValue("AccessLevel", 2);
      
          ManagementObject repoObject = repoClass.CreateInstance();
          repoObject.SetPropertyValue("Name", "MyProject");
      
          ManagementBaseObject inParams =
              repoClass.GetMethodParameters("SetSecurity");
      
          inParams["Path"] = "/trunk";
          inParams["Permissions"] = new object[] { permObject };
      
          ManagementBaseObject outParams =
              repoObject.InvokeMethod("SetSecurity", inParams, null);
      

    【讨论】:

    • 非常感谢。这正是我正在寻找的。缺少一件事。如何映射用户和存储库?
    • @RasedDotNet:“映射用户和存储库”是什么意思?
    • @IvanZhakov:为用户设置权限,以便他/她只能访问(一个或多个)具有只读/读写权限的特定存储库
    • @RasedDotNet 我添加了另一个 C# 代码示例,展示了如何为 Windows 帐户设置存储库访问权限(以“BUILTIN\Users”SID 为例)。
    • groups.google.com/forum/#!msg/visualsvn/0NTgU8XzbUo/… 有这个答案的副本。从您的个人资料中,我假设您是原作者,那么 Visual SVN 团队是否复制了您的答案但未注明出处? ;)
    猜你喜欢
    • 1970-01-01
    • 2013-06-27
    • 2011-03-11
    • 1970-01-01
    • 2011-05-20
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    相关资源
    最近更新 更多